Stuff to get it right early for a startup
I'll make this a short post. It takes less time to set this up initially and get all of your projects conform to it than trying to retro-fit it later. And the effort spent on this will pay for itself in saved time from increased productivity ten times over.
- A source control repository
- Separate binary file assets (like lots of images, videos etc) from text file assets (like source code into separate repositories.
- Use a distributed version control repository, like git.
- Integrated Code review tool, like gerrit.
- Integrated Bug database, like bugzilla (it's very customizable and fast) or jira (newer versions are pretty good).
- Integrated code browser, like opengrok.
- Every project should be buildable, preferably using autotools.
- Even if it's 3rdparty code, never just keep the binary. Always keep the source in good building shape.
- Also, save the web url or location from where it was downloaded. There maybe a bugfix or a update you may want to pick up later.
- Ensure build is fast. Use distcc and ccache to make it faster.
- Split the overall code into independent layered one-way dependency projects.
- Continuous build and deploy and smoke-test setup
- This is extremely important for a project that's in active development.
- Ensure smoke test is up-to-date and extensive.
- Build system itself should be version-controlled. Treat build systems as sacrosanct. Don't install or upgrade packages randomly on this system.
- Don't be stingy about the hardware for these systems.
- Backup everything.
For a startup, hiring a build-automation engineer who can do all this stuff correctly and efficiently is probably money well-spent because it will save tons of effort on behalf of your costlier engineers, architects etc.
If you are building an Internet application, then there are more things to pay attention to - like ensuring your build system can publish to software distribution system, upgradable builds with build ids and version numbers and automatic dependency management etc. Maybe another quick post on it sometime later.