Software development is not always about developing an exciting new application. There are situations where you need to get into application maintenance or enhance an existing application. I never thought I would write a “How to...” or “Art of...” article, but here it is. It is not in any particular order, just things that I may have done in maintenance projects.
1. Suspend judgment: - It is a universal fact that we fear or suspect the unknown. Unless we can see it, touch it and make sure that it is not dangerous, we may withdraw from things without even putting up a fight for it. There are systems developed over many years and it may seem like an uphill task to take up maintenance of such application. I like the phrase “suspend judgment” – be it meeting a new person, watching a movie, reading a book or getting to know a new application. Suspend judgment at least until you can confidently evaluate whether you like it.
2. Persistence: - Another phrase that is sticking with me is “Things Take Time” – it takes time to get to know people, I have loved some music after listening to it for tenth time. As it says, “Long term relationships take the longest time to build.” It is like a tough puzzle – you can take a shot at it, then go watch a movie, forget all about it and then come back to it. We might be pleasantly surprised to find new ways of looking at things. It is an amusing analogy to compare getting to know a person and getting to know an application. I may not be over enthusiastic about an application in the beginning and usually observe the situation carefully until I tune into the same wavelength.
3. Poke at it: - Like a kid trying out a new addition to his world, poke at the application from all possible angles. Get to know a bit from technical architecture and you apply that to understand business behind the application some more and the circle enhances itself. This need not be very structured. If you get a lot of theory on swimming like how to breathe through mouth while flapping the feet, tilt the head and continue to move forward with an effortless action, the task will look more difficult than it actually is.
4. Find ways to find things: - I think this is an important step in being self sufficient with an application. I need to know how to get into application, documents, database and servers. Give me this much information and I can slowly and steadily learn the application. If someone asks, at least I can reply, “I can check and get back to you”.
5. Dig into it: - Once you know your way around, you can go further into the maze of application. Will I have enough inspiration to do this on my own? I am basically a lazy person and I may not take the initiative to read the code just on my own. A question from somebody about the working of specific feature of the software is a good enough motivator for me – then I can go in with the single objective of finding the answer and learn a lot on the way.
6. Document it: - documentation is painful, but I have always found it easy to do it while I am enjoying the feeling of discovery. Documentation will be boring once you know it all. I write things down usually to organize my own thoughts. I used to study in an odd way during college – I used to create notes, hand written (not scribble, but properly with margins and in good handwriting), while reading about something. This was my way to cut through the clutter in textbooks. I may never refer these notes (I might be making these notes just the day before the exam), but it used to make things clear in my mind. So creating a rudimentary document for my own reference may be a way to understand things better and often you get more questions while writing down. When you have everything in your head, maybe the some of the questions get pushed to the fringe and we would just assume that somehow these things will happen, but while writing it down in black and white, you just cannot bypass these nagging questions.
7. Get your feet wet: - Yet another phrase that I carry around “we are afraid to call ourselves experts”. We are afraid to say that when the knowledge is superficial. We think we can do something and it is simple, but have never done it, so can’t say for sure that it can be done. Try to do it, you will find obstacles that you never knew existed and by solving it, you will learn a lot.
8. Talk about it: - Discussing with team members or with sometimes anyone who may listen to you is another way of validating the assumptions. Ever had a feeling that as you speak you connect dots and come up with ideas that you have never thought of before consciously?
9. Code is the ultimate truth: - Find ways to get to the code. Yet another of my catchphrases. As an aside, I think these kinds of phrases become your guiding principles in life. I might have all my assumptions and ideas about what a system does, but if I can read the code, then that is the ultimate truth about what it really does.
10. How to debug: - I see debugging as one of the perks in software development. It presents natural challenges, kind of like puzzles in daily newspaper. But to enjoy it, one should use right set of tools, know where to look and have patience to keep looking for bits that could be helpful. In maintenance mode, knowing how to debug faster is a matter of survival as well.
Poems read / liked recently.. Khalil Gibran – My Friend masking the madness.. My friend, thou art good and cautious and wise; na...
They said her house is In the small alley next to the ex-Minister’s bungalow. They said It is a big house and the yard will be clean sinc...
Listened to the full speech by Charlie Munger ( text ). I think there are cheat sheets of cognitive biases that I need to add into my me...
These are some topics I need to read up and research further. How to work with irrational people more effectively and get things...