– Write code without having test cases
– Unavailability of required skill to complete features to be demonstrated to client
– Check-in code without having continuous integration server
– Deliver software to clients which can only be implemented by engineers instead of client facing consultants
It’s proactive if we can visualize issues assess their impact. This impact can be immediate by clogging the flow or by inheriting more owing to our already building up technical debt.
Root cause analysis done after confronting failure is of little value. It’s after the fact and tells us what we should have done earlier. Root cause analysis is excellent for learning; however, if we lack the ability to translate this learning to practical actions, the value is little. For example, analysis of root cause of being diabetic is useful, but the cost of correction is prohibitive.
Producing client valued software which is not easy to implement is consequence of decisions we made at the early steps of our delivery cycle. The surge in the implementation cost from one client to another can lead to re-architect of the product, instead of adding enhancements to the product to address new market challenges.
Many of the above consequences could have been highlighted as we visualize the flow of value prior to delivery. It’s not enough to remove the issue to enable flow. The learning we gain from assessing the issue impact at the moment when it happens is vital for organizational learning and change management.
Visualized issues are opportunities for organizational growth through learning. We as software organizations can only grow by learning and imparting this new knowledge in our development practices and work standards. This learning is unique to every organization and it questions our DNA and work tradition. Resolving issues related to technical debt is where we shift from the current-state to the future mode of operation.