So when the 4 of us decided that we are going to build such a placement office management software, the design discussions started to take place over GTalk :-) Initially we were pretty ambitious of the functionalities that we would be putting into the system. And you can't blame us...estimation is still a difficult problem in software engineering!
Apart from having design discussions we were thinking on the lines of how are we going to coordinate among ourselves while actually programming the functionalities. The best option seemed to be buying some hosting space and a domain name. After a long email thread of the possible names which included relevant names like placementhelper.com, placementholder.com as well as geeks names (and now seemingly stupid names) like technomaniacs.com and geekyfreaky.com, we selected eatbits.com to be a good enough website domain. We were yet to decide a name of our product...first let there be any product and then we would think of names!
The next 4-5 months (Dec 2005 - April 2006) were kind of event less considering the development of the software that we had conceived:
- Coordinating over GTalk every alternate day.
- No weekends. My Counter Strike practice had certainly taken a beating :-)
- Coding, debugging...coding, debugging
- Many a times under pressure of time and exhaustion after office, we started coding even before having a rough design in our mind. A typical code like helldesign is important. scenario talked about in many software engineering books. Almost always turned out to be extremely bad! So
- After coding like hell for days together, we later found out that there was a functionality that we had missed. And now to correct this required another brave programming effort. Not only it re-iterated the previous point, but also emphasized that changes at design level are the ones that require the most effort to implement.
- Very early we realized that we should put some customization into our system so if this software gets developed we can make it easily adaptable to many placement offices. And while putting in such generalizations another software engineering principle struck our minds - you almost always sacrifice performance when implementing generalizations.
- As we missed our self proposed deadlines one after another, we realized that surely estimation even in terms of time is not that easy.
- Initially we had taken up features and functionalities which didn't quite overlap so that the cost of integration was the least. But till a month back the only way we used to integrate the overlapping code was through taking a diff of the code files. And surely many a times we overwrote code, introduced new bugs and kept us wondering why is this not working now! So here comes another good old advice - always use a code management system like a CVS.
Though we learnt some lessons the hard way, we still had some good points to look back to and on which we never made any compromise:
- Proper 3-tiered architecture (which later on allowed us to make our software with MySQL)
- Using some design patterns efficiently
- Using good coding principles - so that we can easily understand our own code many months down the line (in this effort I read through many books like Code Complete and Writing Solid Code).
In the midst of all this chaos came April and Pango told us that IIM Bangalore is in need of such a software and that we need to give a demo of whatever exists in the name of placement automation software soon as their summer vacations are approaching soon.
The story of our first demo is a story for the next time...