Sunday, March 11, 2007

ABCs of product development

These should be obvious to anyone who has developed a real software product before. But, recently I had talked to a few people who were working on their first large scale projects on their own but were making some basic mistakes without realizing it.

1. If you are developing a new product or technology, prototyping and research is a must. Agile development methodologies are good, but for a large scale product use agile methodologies after your research phase.

2. Prototyping and research often takes longer than developing the actual product itself. Someone should actually write a prototype which acts as the prototype for modularization & abstraction as well if possible.

3. Always separate your UI code from your non-UI code. Often, the non UI code will be implemented as services in the windows platform. Develop a fool proof mechanism to keep the software upto-date as well.

4. Never try to automate your UI testing first. It should be done only after automating tests for the non-UI portion. The tests should be such that they perform the test and are able to validate the success or failure as well. Every bug which is found should be part of your automated test suite.

5. Plan to have daily builds if your team is more than 5 people and run your automated test suite on every build. If the build or the tests fail, make it the first priority to fix it.

6. Setup is not an after thought. Plan for upgrades, patches, partial upgrades etc before your first release.  Use VMWare or similar tool with snapshots for setup testing to save time.

7.  Use the best tools for the job. Pick the language, IDE & server technologies which are the best fit for the customer - not for you. ie. Don't develop in C because you don't like C#.

8. Use peer reviews for improving code quality. Every checkin should be reviewed by lead or peers before it is committed. It is all about catching bugs early on in the development cycle.

9. Architecture & good design are a must if you expect your product to be in the market for a long time. Think about changes in market and the possible different uses your components could be put to. Learn this elsewhere, not from this blog.

10.  Security in today's world is important. Your reputation depends on it. Think about it when you design, not when someone finds the first vulnerability in your product and your reputation is already lost.

11. Three documents which should be ready before development starts are Functional Specification(is done when design& test plan can proceed), Design Specification(is done when coding can start) & QA Test plan(is done when testing can start). Preferably, do a team review of all of them

12. Remember that products never get filled with hacks in one day, it takes small hacks everyday to create a monster which everyone wants to re-write because they do not understand!