Nowadays, software development is becoming ever more complex by the minute. To meet the requirements of the rapidly evolving technological and business landscape software development life cycles have become complex operations consisting of different processes, systems, and all development teams. All to combat this complexity. However, this increased complexity has introduced waste into the software development process.
This in turn has developed teams constantly stretched to meet deadlines while managing the product expectations of customers, management, and end-users. Also, this increased complexity has put delivery teams under constant pressure with continuous development cycles. Thus, they have to perform as effectively as possible since even a small delay can cause a cascading effect that affects the complete development pipeline.
Here, in this article, I am going to explain different types of software development waste I have experienced while doing my job and I will further suggest how to deal with them effectively.
Daily standup and weekly catchup meetings are the norms in many organizations. Besides, properly managed meetings are vital for managing the workload, knowledge sharing, and dealing with blockers in the development pipeline.
As a developer, the most important asset for me is my time and unorganized or longer meetings are the most common time-wasting factors. Another pain point is getting invited to unnecessary meetings just to listen to other people talk with the subject matter having no impact on me or my work. For example, if there is a product demonstration, the best people to demonstrate the functionality is the relevant developer or the team and not the whole delivery team.
When you are in a code sprint, you are focused and you can easily tackle complexities in your solution. However, this focus is constantly interrupted if you are constantly invited to meetings, especially when they are spread throughout the day day. You will not be able to block a consistent time to focus on your coding.
For regular and necessary meetings I believe that the best way to deal with this is talking with your managers and colleagues before a meeting to get to know the exact agenda so that you can assess the importance of attendance, provide your input and leave early if possible or simply outright decline if possible.
As developers, we are constantly learning new things. This can range from learning new technologies, ways to fix issues, introduce new features, etc… All these things ultimately help to improve the final product. However, one major misstep done by us is forgetting how we came to a solution or what we learned.
Assume that you figured out a solution to a blocker yet forgot the steps to overcome that blocker. Then you will have to research and relearn everything from the beginning leading to wasted time in the relearning process.
The only way to overcome this issue is through documentation. Any solution, fix, or workaround must be well-documented regardless of the severity of the issue. You might never need it, yet the documentation of a solution can become a lifesaver whenever it is needed. Keeping documentation does not mean that you have to create professional documentation. I use a note-taking app to keep my findings and as needed create more comprehensive documentation.
We always have to deal with different tasks, even when you are in a code sprint if there is a production bug you will have to switch to fixing that bug. This is a necessary evil as it is not feasible to work on a single task continuously. Yet, it all comes down to how effectively we transition to a new task or handing over current work to a different team member.
This shifting focus undoubtedly leads to development waste as it will take some time for you to get accustomed to the new task. If you are constantly changing tasks this can add up to hours of wasted time. Also when handing off tasks you must ensure the other team member is up to date with the current process and have the necessary skill set to tackle the task successfully.
When a bug fix is assigned to me, I immediately try to involve the developer who is familiar with the product or, better yet the developer who initially developed the feature that is causing a bug. This can cut down the acclamation time by half as you can quickly drill down to the source without having to learn the underlying logic from scratch. Tasks should always be assigned to appropriate personnel. A python developer should not be tackling PHP issues or a DevOps engineer specialized in AWS should not be diagnosing a GCP issue.
I always keep a track of where I left off in the previous task before switching to a new task so that I can quickly switch back. Additionally, when handing off tasks make sure that appropriate team members are assigned for tasks. If a senior developer manages the current task, it will be more effective to hand it off to another senior developer than assign two junior developers.
Software development is a complex process where most scenarios require complex solutions to obtain the desired functionality. However, it is essential to keep the development as simple as possible as complex solutions require more time and resources to develop and test. This leads to software development waste if simple solutions are available.
Always try to adhere to the KISS model (keep it simple, stupid) and most of the time the simplest solution is the best solution. As a developer, your first instinct would be to program something but this is not always the best approach. A 30-minute google search might reveal a pre-existing solution savings hours of wasted development time.
When developing you may think that you can improve functionality or simply make the solution more elegant by developing beyond the scope of the requirement. Unless you are assigned a task to improve a feature or functionality, never try to improve perfectly functional functionality. If you do this and an issue arises, you are just adding unnecessary work to yourself and may even cause a conflict with the original developer.
What I do to keep everything within the assigned scope is to clearly define the goal of the requirements before starting the development and If I need further clarification, I would contact the BA who is responsible. This takes any ambiguity out of the task and I can scope the requirement. Then put all my effort to create the best outcome within this scope.
Software development waste is an issue that negatively affects the development lifecycle at both organizational and individual levels. It causes waste of time and resources in organizations while making developers stressed and overworked, leading to poor performance and efficiency across the board. The best way to manage this is to identify types of software development waste and quickly address them to reduce the waste as much as possible.