A Startup Development Plan
- Continuous Integration, use it.
- All code must have tests. Lower coverage == CI fail
- Tests must run fast. Slower average test speed == CI fail
- Code quality regression == CI fail.
- Vagrant and Chef for your development environment. A new dev machine is a “git clone” and “vagrant up” away. (this means good seed data!)
- Any and All strings that a user could ever see must be internationalized, resource file in {native language} first, of course.
- Github is the hub: pull requests for code review. One other person signs off on code before it goes to staging
- Deployment, Rollback, and Scaling are all one command away.
- Build for horizontal scaling. Start with multiple instances of every server/database/application/service type. Plan on your servers/apps/services being fungible, unreliable, and innumerable. Discovery over configuration. (etcd, zookeeper, ironfan, doozerd)
- Faster response to the user is always better. Anything that doesn’t need an immediate response, queue it up and do it in the background. Cache and pre-compute as much as possible.
- If someone else has made a library that does most of what you want, use it. (Submit patches so it does all of what you want)
- If you can abstract the solution out of the app into a standalone library, do so and make it open source. Open source is the great code review in the sky. More eyes means better code.
- A service is better than a solution. A solution is better than a hack. A hack is better than nothing at all.
- Done is the engine of more.
- Perfect is the enemy of the good.
Related