Home Software Sustainability
Post
Cancel

Software Sustainability

Sustainability is the ability to be maintained at a certain rate or level, like “the sustainability of economic growth”. The concept of sustainability has principally been associated with ecology, and the relationship between humans and planet Earth. In recent years, software sustainability has emerged as an area of research in the field of software engineering and has been identified as an essential future topic as new approaches to research become increasingly dependent on complex software systems, which operate in evolving, distributed infrastructure eco-systems.

Customer Value

Every digital company is working on customer-centric. Which means they are making decisions based on customer needs and feedbacks. But in practice, not every company is doing this well. So before understand what customer value is, we need to understand what value is. I can tell you; value is what the customer is willing to pay for. It is straightforward to define value when the customer needs is visible. Still, when the customer may not know what they want, it is a little harder to figure out its needs. Fortunately, there are some technics like researching, surveys, interviews, a/b testing, and information based on data history. We can call it discovering.

Embedded quality

Building products is natural; sometime it will take a long time, and sometimes don’t. Building products with quality and sustainability is tough work. The quality should be part of the process, not just after the building.

In software development, there are many techniques like discovery, software design, code review, tests, pair programming, DevOps, automation, paying technical debts, and many others. The whole process should have embedded quality, and that is just one way to achieve sustainability.

Empower the team

A mature organization focuses on effective learning and empowering the people that make decisions. It means the company is working hard to build a culture that makes fits in the VUCA world. The digital market is volatile, and we cannot create an expectation of linear progress. The volatility makes the uncertainty and complexity. Because we cannot predict what will work, new startups and new ideas for products and services are emerging every day. The digital transformation is complex, involving people, culture, technologies, competitors, innovation, processes, and business. So we are talking about the ability to adapt, the company that have more adaptative ability will survive.

The organization culture it is about the whole system, so the people are the focuses to build adaptative abilities like the ownership that is composed by:

  • Taking the initiative.
  • Assuming responsibility.
  • Managing upwards.
  • Empowering.
  • Time management.
  • Learning from mistakes.
  • Decision making.
  • Problem-solving.
  • Critical reflection.
  • Social responsibility.
  • Learning.
  • Personal branding.

The ownership alone is not enough to build a good culture. Still, it is a good start, and that is another way to achieve sustainability.

Simplicity

It is easy to think about a complex solution, but it is hard to think about a simple solution. Many people can make things more complicated than they are because it is more secure to do something based on previous experience than build a new solution.

We want to deliver fast, but the simplicity in software engineering is not that simple. Which means, we want to deliver quickly and with quality.

There are some principles of software development like KISS, YAGNI, and DRY. But I’ll take a chance talking about other approaches that I believe is a bit more sustainable.

  • Start with the business problem. What are we trying to solve? What product are we trying to build and why? How can we measure success?
  • Brainstorm the approach. Get together with the team to do a design session. Start at a high level, going down to lower levels.
  • Writeboard your approach. Get the team together and explain the strategy to them. If you have trouble with this explanation, that means it’s not clear enough.
  • Talk about tradeoffs and alternatives. Good software design and good architecture are all about making the right tradeoffs. No design choice is good or bad by itself: it all depends on the context and the goals.

Start doing the simple design and stay as simple as you can. Try to avoid adding complexity. And that is another way to achieve sustainability.

Whole optimization

A mature organization looks at the whole system and focus on optimizing the entire parts. It is not enough tuning desegregated parts, because the company it seems like an organic thing that is always changing and growing where all the pieces are interconnected. Like a basketball team, the whole team works together for the win.

Here is a popular picture of a value stream mapping that shows an example of measuring efficiency.

value-stream-mapping.png

The first thing we should take a look at is the whole system. We should measure the time of each part of the process. And then, we need to identify where the waste is. And then, we should do some action to make the changes.

In addition to the process, it is essential to build a pleasant environment for people because we want a sustainable work pace. It’s a matter of time or opportunity for people to leave the company due to having to work many hours for a long time. Even if there is a purpose, no one will do that for a long time. And that is another way to achieve sustainability.

Conclusion

It looks like I’m talking about lean, isn’t it?. Yes, it is true, I did on purpose because I believe the software architecture is about sustainability, lean is about sustainability. It is all interconnected, and we can put those concepts together and try to build a great company with very welcome principles.

Please take a look at that wall.

unsustainable-wall.png

Do you know how high this wall can go if build this way?

Would you buy a house with this wall?

I hope you don’t buy this house because I believe it will break someday. That is about sustainability; building software has the same approach. To avoid breaking things, we need to work with standards, embedded quality, effective leaning, empowering, and collaboration.