<strong><br> &quot;Learn to Love Maintenance&quot;</strong><br><a href="http://www.kitware.com/blog/home/post/24">http://www.kitware.com/blog/home/post/24</a><br><br><br>It is tip #27 in 
the book<br><strong><em><br>&quot;The Passionate Programmer&quot;</em></strong><br>by
 Chad Fowler<br><a href="http://oreilly.com/catalog/9781934356340" target="_blank">http://oreilly.com/catalog/9781934356340</a><br><br>and
 it is indeed great advice!<br><em><br>&quot;Though software developers are 
typically creative, freedom-loving people, the programmer &quot;society&quot; 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 &#39;architect&#39;) that they 
can tell their parents or college buddies.&quot;</em><br><br>Says Fowler... 
and he adds<br><em><br>&quot;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?.&quot;<br></em><br>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&#39;s code.<br><br>Only by doing maintenance you 
can learn about<br><ul><li>Bad coding</li><li>Bad design</li><li>Bad 
architectures</li><li>Poor build configuration systems</li><li>Insufficient
 testing</li><li>Feature creep</li><li>Bad documentation</li><li>Poor 
team coordination</li><li>Bad Copyright and License checking</li><li>Bad
 project management</li></ul>and develop the necessary <strong>Passionate
 Hate </strong>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. <br><br>Only by suffering through <em>Valley of 
Maintenance</em> you will develop the pride to say: &quot;This will not 
happen on <strong>my watch</strong>&quot;.<br><br>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.<br><br>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.<br><br>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.<br><br><strong>Learn to Love Maintenance !</strong><br><br>...since
 the only other option <br>is to get used to design and write software<br>that
 people use <strong>only once</strong>...<br><br>and that is a very 
pointless life to live.<br><br><br><br>-------------<br><a href="http://www.kitware.com/blog/home/post/24">http://www.kitware.com/blog/home/post/24</a>