“Learn to Love Maintenance”
It is tip #27 in the book
“The Passionate Programmer”
by Chad Fowler
and it is indeed great advice!
“Though software developers are typically creative, freedom-loving people, the programmer “society” is surprisingly caste-like. Programmers want to be designers, who want to be architects, and so on. Maintenance work gives them neither a notch in their belts nor a clear, elevated role (such as ‘architect’) that they can tell their parents or college buddies.”
Says Fowler… and he adds
“The irony surrounding the project vs. maintenance split is that project work is maintenance. As soon as your project team has written its first line of code, each additional feature is being grafted onto a living code base. Sure, the code might be cleaner or there might be less of it than if you were working on a legacy application, but the basic act is the same. New features are being added to and bugs are being fixed in exiting code. Who knows how to do this better and faster than someone who has truly embraced maintenance programming and made it a mission to lean how to do it well?.”
I will go further, and claim, that no developer can achieve Mastery of her craft unless she has first made her time on maintaining someone else’s code.
Only by doing maintenance you can learn about
- Bad coding
- Bad design
- Bad architectures
- Poor build configuration systems
- Insufficient testing
- Feature creep
- Bad documentation
- Poor team coordination
- Bad Copyright and License checking
- Bad project management
and develop the necessary Passionate Hate for each one of those items that will drive you to recognize their manifestation in any other piece of software that you or others write, and to fight for their final obliteration into the dark vacuum of deep space.
Only by suffering through Valley of Maintenance you will develop the pride to say: “This will not happen on my watch“.
Maintenance is the software activity that brings you closer to your users, it connects you to the daily reality of software use, and exposes, for you, all the limitations of the software, its ambiguities, and shortcomings. Maintenance is the place where you realize what things should have been done differently. It is also the place where you realize what needs to be changed in order to better satisfy the needs of your users.
Maintenance is the place where you hunt and kill bugs, and in the process you learn about their life cycle, their feeding habits, their behavior in the wild, the places where they use to hide, and how they breed, replicate and evolve. Such experiences enrich and inform your decisions when you design and implement new pieces of software, or when you refactor old ones.
Maintenance is how you develop the eye to recognize when something is done wrong and, by contrast, you will be able to write software of outstanding quality, since your eyes will not rest until there are no traces left in your code of any of the bad things that you have seen crippling other pieces of software.
Learn to Love Maintenance !
…since the only other option
is to get used to design and write software
that people use only once…
and that is a very pointless life to live.