BestReview system experience with FOD
December 5th, 2006::Draft::
In this post, I am changing the names of people, the project and companies to keep them anonymous.
This story goes back to the period of 1997 — 1999.
BestReview was a web based application to collaboratively review documents. The project started with about 3 people in March/April, 1997. I joined it as project manager in later 1998, when its team size was about 10 people. By then it had already a code base of 60K lines of Java code.
It was a typical case of totally fresh and immature engineers handling the application design. Its earlier tech-lead had no idea of how to keep database design independent from GUI screens.
By early 1999, we still had a very unstable system. On the top of that, I had frequently the requests from the marketing guy to change GUI. He used to ask for cost estimates to get the new screens.
Being new to the system, I thought it was really big as the code base was about 60k lines of code. Finally I decided to feel for the project’s complexity by freshly re-engineering its design. In about 3 hours, I got my first cut design. Then from the initial cut, I could estimate that the complete design could be 3 weeks of effort for 3 people using FOD. In fact, there was no prior experience using FOD, except for its conception in the period of August to November, 1998.
I approached my senior manager and expressed that there had been some wierd things going on BestReview system. Actually the project should not go that long. Also I mentioned to him that I could demonstrate redoing the same in 6 six weeks if he gives me three engineers. But he replied that he did not have (human) resources for experimentations. It was around April/May, 1999.
By August, 1999, we had the fresh blood, the new graduate engineers who joined the company. These engineers needed to be given a 6 week long mock project before they were to be inducted into the software development projects.
These engineers as resources were unaccountable and you could do anything with them. So I picked 6 of them. In three weeks, I got a thorough re-design of BestReview based on FOD. In another 3 weeks, I had three of them completing the server side code. And the remaining 3 integrating the existing GUI of BestReview with the new server code.
By the end of 6 weeks, we had a running application. Well this needed some more testing as the team was short of time.
In retrospect, I thought, if I assume there were only 6 engineers for about one year who worked on BestReview. Then its about 72 man months effort. That server side code that we freshly developed was 6 man-weeks effort, i.e 1.5 man months effort. You can grossly approximate the effort to be 10 man months effort after rounding it to 2 man months effort, multiplied by 5 times. So if the original effort of BestReview’s server side is estimated to be 30 man months effort, I still have three times productivity.
It will be interesting to know, what was actually causing such productivity gains. Was it due to Good engineers, good practices like FOD, or both together in the new team that I created? Or was it due to a bad job done by earlier engineers? How much is to do with the agile nature of FOD to carry forward the human thinking in natural language swiftly into design?
Ever since that first experience with FOD in 1999, I never required to dabble with sequence diagrams though I have been using Java for enterprise applications. I am not so much particular about the philosohy of OO thinking around objects with behaviors, or objects with encapsulation, polymorphism, dynamic binding, blah, blah. The issue is not about my adherence to a philosophy or religion. Its about making our lives simpler, and easier. From that perspective, I would like to adjust or reposition FOD or FOA in the context of OOP (object oriented programming).