After a long period of sullen silence, its time for one of those Point Blank posts.
A few days back I was thinking of the importance of planning. Then the picture of this freeway interchange in LA that I had to drive through a few years back came into my mind.
This interchange was so intricately complex that it took me almost 20 minutes of studying Google maps to figure out which part to take to reach my destination. When I reached there, I was simply astounded to see a multistoreyed flyover system in place. All this prompted me to read more about this concrete labyrinth and find out, "How did they do it?"
To my surprise, I found that this interchange was initially built in the late 1950's and this is how it looked then.
I could figure out that all this needed an enormous amount of planning.Not only it had to meet the needs then, but also it had to be scalable to meet the traffic needs of the future.
They might have taken a couple of years initially, and a couple of years later for the lane doubling and also to increase the number of tentacles. But most definetely they must have spent three times that duration in just planning about this interchanges.
In contrast, I wondered how many of the softwares that we develop are truly scalable. Then I remembered this famous line, "For any software to be reusable, it first has to be usable" and then concluded "No chance".
After having spent close to six good years in this industry, I figured out a whole lot of things which make a project a successful one. Some of the items that I can list out are good planning and analysis, a good design, disciplined implementation and an exhaustive testing phase.
Planning has to essentially come from the top i.e the manager or the lead or even higher, and that has to percolate down to every developer. Right from the moment the project starts, till it ends there needs to be plan for every major activity that's done.
A thorough analysis is important right at the beginning, so that what's to be done i.e the requirements are clearly captured so that the planning is much more effective. This has to be done by all the members working in the team, so that everyone knows what's expected out of them. The leads and the senior engineers need to take initiative in guiding everyone, but everyone needs to participate in this.
A well documented design which is of utmost importance. The design also needs to be done in such a way that it's scalable,manageable and also modifyable without it affecting the rest of the design. The golden rule here to be remembered here is, "The cost of a defect increases if its found at a later stage in a project."
Disciplined implementation is necessary to ensure that the code developed by every developer works in every scenario that its designed to.And if it doesnt work, then atleast it shouldnt take the whole system down with it.
Good testing phase is essential so that every possible scenario that was missed out by the developer either in analysis or design or implementation is made blatantly visible to everyone.
All this doesnt need a SEI CMM Level Certificate or a Six Sigma Black Belt to get this fact straight into the head.
Now some straight questions.
1.How many of the project plans are really good plans and not just ones that hoodwink the quality audit team?
2.How many of that our managers make are feasible and not something that's so aggresive that the members working in the team forget their way to their homes and their family?
3.How many of us do the design document before we complete our coding?
4. How many of us consciously write code with the same commitment that we used to write out exam papers (as if our lives depended on it)?
5.How many of us even actually sit at own desks for even 50 % of the time that we have entered in our timesheets?
6.And how many of us take every bug reported by the tester as a serious one and attempt to fix it from the root cause?
Here are some excerpts from my recent experiences.
1.There was this person from another team who was implementing something who tried to explain me what he was doing. When our team asked him for a design document, he nonchalantly replied, "Coding is still not complete."
2.Another female member in my team had the ignominy of getting her code reviewed by me. And being the incorregible stickler that I am,I asked her this exact question,"Do you ever dress up with the same shabbiness as you have written this code?"
She tried to convince me that the time alloted was too less for her to do all that.I took a full 300 seconds to cleanup the code that she had developed in past 3 weeks.
3. And coming to her point that time wasnt sufficient, I could clearly figure that why when I found that she took 2 half an hour coffee breaks, 1 one hour lunch break and 1 of those forty five minutes snack breaks in the evening.
In the formative years of my career I had the oppurtunity to work as a contractor in a small company comprising of 60 people in the UK. But what they developed was being used in more than a few million phones worldwide.I found that logically and technically they were just a little better than us. But what made them click was their planning, their approach and the unwavering focus and passion towards their work. And yet they found time for everything else in life, because of the kind of planning that was put in by their managers.
In contrast, one the first day in my present project I was given the impression that I was already 3 months behind schedule.
I had another brief stint in the US a year later where I worked as a contractor at the headquarters of a large semiconductor company. My manager there used to develop the highest amount of code in our entire team. Added to that 2 of my team members whom I never met were seamlessly checking in their code from another location situated a couple of thousand miles away.
The question is, "How do they do it?"
Planning, process and attention to detail were the key things that I could observe in their approach. Work was so well planned that on most days I had enough work to do for 8 hours and then leave for home peacefully thereafter.
In comparison, when I leave for home nowadays, I either have the compulsive guilty feeling of leaving so early, or a premonition of the bad things that might happen to me following day in office.
Being a part of this sytem I just wonder if something can be done to change all this.
Or is it just a crazy dream?
Till the time that I find an answer, here's something real whacky that I read in my good friend's status message,
"If you find your application hanging, then just tighten the noose and let it die."
Maybe that's what I should try!