In this article, we will have a look at three aspects of software development that help you change the way you look at software development and how they can assist you if you’re struggling.
The creation of something valuable and the process of delivering it to people is by far the most important aspect of software development. We tend to lose our focus with time and get lost in technical discussions or bugfix-marathons which are necessary but useless if there are fundamental problems within the process of how we create something valuable and how we deliver it.
One way to reveal workflow issues is to calculate and visualize the lead time of a feature request or a bug report. How long does it take for a feature request or bug report to pass through the complete pipeline from being noticed to an available release? As soon as you think about this, you will realize that most of the time a lot of effort is put into the wrong areas. If our automated tests take way too long and our work starts piling up because our integration procedure is slow, then the team as a whole should be on alert and should start working on it or at least offer to help. It doesn’t matter if it’s an operational issue or a problem within the process of approval. It's everyone’s responsibility as professionals.
Another inconsistency can be found when we ask our users how they like the new feature we developed and the answer is “Which new feature? Oh, this? No, I don't use it.”
In this scenario there is a fundamental difference between what is valuable for the team and what the user needs:
There is nothing so useless as doing efficiently that which should not be done at all.
Jez Humble, Lean Enterprise
While not providing something valuable at all, we also risk to introduce bugs or technical debt into our products. There are a lot of techniques that help us to determine what is valuable and how to prioritize it – for example Design Thinking and User Story Mapping.
Imagine that you are running a marathon and at the finish line someone approaches you and tells you that the actual finish line is in another city. Unfortunately, this scenario is something we encounter quite often when working in software development teams. The best way to handle this problem is to think about fast feedback and feedback loops. Fast feedback is the key element when it comes to providing value since it’s the only way to tell if we are going in the right direction. The faster it comes, the better. We should always be searching for it.
In order to reveal issues that are related to feedback, we should always ask ourselves: "When and how fast feedback is generated and is it visible to the relevant people?" This affects the structure of our tests and our deployment pipeline for example, as well as the visibility of a build status or key performance indicators.
Feedback is also important when it comes to our daily work as a team. Frameworks such as Scrum set a good example on how to integrate fast feedback into our work routines.
Last but not least, we should always free up some time to learn and explore new skills, work routines and other useful methods. It keeps us motivated and improves the overall team performance. We can prevent bugfix-marathons and stressful releases most of the time if we just work less, but improve more. If there is no time for improvement then the same problems will occur over and over again.
Techniques such as an Improvement Blitz, in which we stop the current work and use a specific timeframe to tackle major issues within our workflow, can improve the deployment pipeline or specific parts of our infrastructure, and save us a lot of time and stress in the long run.
Since learning and exploring are not only essential to improve a current project, but also for the advancement of a company and personal development, we can also integrate them into our working-time model.