Do you know what congenital analgesia is?
It is a rare genetic disorder in which a person cannot feel physical pain. You might not realize this immediately but feeling pain is vital for your survival. It is your own personal feedback system designed to keep you alive. It warns you whenever your sole existence might be endangered. Without it, not only wounds and bruises, but even broken bones and more severe health issues may go undetected. This is an extremely hazardous condition and results in a much reduced life expectancy for the people affected by it.
Feedback in software engineering
In software development it is equally crucial to have a sufficient feedback system which measures whether the software you produce works correctly. And yes, it’s your responsibility to ensure that such a system is put in place during the development process. The confidence you have in your software should be directly proportional to the amount of feedback you receive. In reality this is a hard thing to achieve due to people’s fear of change, critical mass of the organization, deadlines and worries about the costs incurred. Correctly implemented, though, brings peace to the development process, improves both real and perceived success, reduces risks and optimizes the costs.
The good news is that in the software engineering there are plenty of opportunities to measure your applications and your team’s performance. Even better, working in software engineering you have all the skills necessary to automate those measurements.
The subject of getting valuable feedback is so broad that I will cover different aspects of it in several posts in the future. Here let me introduce some basic concepts, tools and processes.
Processes, People, Tools, Architecture
Most agile development methods break product development work into small increments that maximize the amount of client feedback and minimize the amount of up-front planning and design. Retrospection allocates the time to think about further improvements in a way the team works. Measuring customer satisfaction ensures whether the requirements are understood and implemented correctly.
Coding in pairs provides instant feedback and also facilitates knowledge sharing between team members. Unit tests run automatically provides the first line of defense from the bugs and regressions. Statistical analysis further tries to pinpoint parts of the code where the problems might be hidden in. Test driven development makes it easier to write testable code. Continuous integration checks how well the code integrates with what your colleagues produced. Continuous delivery ensures repeatable and bug-free software delivery. Metrics and alerting system quickly inform when a critical condition arises.
Feedback loops are essential and should form a basis for your company nervous system. In an analogy to how the real humans feel pain when something dangerous happens, it should “feel” something bad is imminent and act before the damage is done. And, though the measuring is important, it is even more important to act according to the observed results. Well organized team should fix any mistakes, adjust development process, improve designs, optimize costs and resources. The worst thing is to repeat the old same mistakes all over again.
In future posts we will further delve into the details of the importance of feedback loops and the agile software architecture. Stay Agile!