Applying Courage in Software Development
Job is not a place for feats. But sometimes you have to be brave to overcome and complete that others considered impossible.
Unpaid technical debt is a typical example of the situation. It manifests poor management and/or lack of competences in the past. The original management issues, of course, have to be resolved first. Because “the fish rots from the head”.
People may whine that it’s impossible to work with that legacy code and it will take a lot of time to refactor or re-implement everything properly. But you may start moving towards making things better. Step by step. One tiny step, than another one, than one more, etc.
Just starting fixing things, little by little, is itself a cure for analysis paralysis. When too much time is spent on rituals and nothing gets done — then just shut up and and start doing anything. It’s the situation SCRUM will not help you and even hurts: planning will be inaccurate, two weeks cycle is too long. Go something lightweight, like Kanban! Cancel useless meetings and start acting!
Analysis and intuition are required to identify task on a critical path, which is small enough to be completed quickly. It might be not the smallest and easiest task, but it should unblock other improvements. And when you complete it, other things will become easier. And first success will motivate your team to wake up and start other improvements.
When it’s not clear where to start with – my personal recipe is to improve repeatability. If too much hassle is required for routine steps – automate these steps. E.g. automating CI/CD makes possible to release product fast and frequently. If you’re uncertain about the software quality – automate testing.
Make one small change, then release it. Again and again. Decreasing possible release cycle from weeks to hours.
This strategy had perfectly worked out in several of my previous projects.