I had written a posting on how to rapidly develop high quality products. As I was uploading it, I remembered that I had put together guidelines for our product development team at L90 (Startup 3.0). I dug up the document and re-read it.
I think our team at L90 was one of the most efficient and customer-focused development teams ever to be assembled. They accomplished a lot with a little. The team developed adMonitor(TM), one of the Internet’s largest and most successful ad-serving networks at the time. adMonitor delivered over 8 Billion advertisements per month for over 3,000 customers with 99.9% reliability in less than 3 milliseconds per transaction and reached over 65% of the worldwide Internet population. All of this, with a development team of less than 30 engineers. Speed was their mindset.
So, given that, I decided to scrap the post that I was going to upload and, instead, publish this document exactly as I wrote it back in 1999:
12 Guidelines for Rapid Product Development
Make Speed Your Mindset
Always be focused on moving the product forward. It’s easy to get caught up in the weeds. Software code, by its nature, is very much like weeds. Focus on the finish line and the next two steps at all times. Do a mini-release everyday, it will force you to develop something “useable” each day and you’ll get to the finish line much faster.
The #1 objective should always be to develop the product in such a way that user-facing functionality is built first. Then proceed with building the backend to support the front-end functionality. This will allow you to solicit feedback and will make your backend development efforts much more efficient.
The #1 challenge that engineers face is their own natural sense of perfection. Over-engineering will slow down product releases.
Start from the Middle: Well-Balanced Engineering
Start from the middle of your product and build out from there, keeping the front-end and the back-end in balance at all times. For every back-end function developed, there should be a front-end function built before moving on to the next piece of back-end functionality in the system.
Reduce, Re-Use, Recycle
Create re-useable code and functionality, this will reduce the amount of engineering needed later try to recycle existing code into new functions. Don’t get in the habit of “re-writing” code (a natural tendency of engineers), it’s dangerous.
Keep It Simple
Software is intended to simplify an end-users tasks by using technology to assist them. Every step of the way, you should remind yourself that end-user simplicity is the #1 goal of the projects outcome.
Keep it Ready
Your application should be presentation ready at all times, this includes:
- Demo Applications
- Demo Data
- Test/QA Applications
- Test/QA Data
Don’t build technology in a bubble. Show it to people as often as possible throughout the developing process, get their feedback and adapt as necessary.
90% Baked Rule
Build 90% of the finished product then let the customer define what the remaining 10%
should look like. This will accelerate the development process and set a development discipline to create products that are molded by the market.
Build for Tomorrow, Engineer for Today
Always keep the immediate needs in mind and engineer to meet those needs as quickly
as possible. Keep in mind that technology can and will change later. Your product requirements will change and new (faster, better, richer, cheaper) software and hardware development infrastructure technologies are being created every day.
Don’t get too hung up on performance. Hardware is less expensive than people. People get more expensive while hardware becomes cheaper and faster every day. Good people are hard to find, good hardware is a commodity. Leverage hardware whenever possible to scale the performance of your application and don’t spend too much time “fine-tuning” code, at some point it becomes diminishing returns.
As the company grows and products grow, the engineering team and objectives become
much more complex. It is important to maintain consistency in development, speed and administration to efficiently grow the company and the products. Get in the habit of developing quickly, but maintaining a high level of quality. Go fast, but don’t hurry.