In the way, way, way early days of our company, even though there were only two of us working on the product (including myself), we agreed to a few things. We would:
- Do upfront design through specs
- Adhere to test-driven development (TDD)
- Commit to awesome uptime
Now, in the early days, we didn’t necessarily need to do these things. We had, give-or-take, about zero customers, and as a result, if our system went down, I’m pretty sure exactly nobody would have noticed. Well, not nobody. We would have noticed.
When you’re just starting out, if there’s a way of doing things that’s important to you, just start doing it even if you don’t need to. For me, I had worked on software projects in the past which contained legacy code that wasn’t well-documented, was buggy, and which crashed — and I hated those things. They drove me nuts.
And so we figured, since we were starting from scratch, we’d design and document everything upfront, write unit tests to keep our bug count low, and put monitoring tools into place from the start to ensure we almost never went down. We knew we needed to do these things eventually, so we just figured we would do all those things from the start. Worst case, we figured things would be more fun since we could spend more time working on features and less time fixing bugs.
Years later, we still do all these things. We have a brand-new developer who is part-way through developing a new feature. The feature started with a detailed 23-page spec, has 139 unit tests written so far, and will be monitored on a 24/7 basis from the first moment it’s pushed to production. What’s interesting is that we didn’t even really talk about any of that. Rather, we’re doing things this way mostly because “that’s just the way we’ve usually done it.”
Inertia is an amazingly powerful force in software development projects. If you’re building a product or engineering team, I think the key isn’t to fight that force, but to leverage it — the earlier, the better. Put a process in-place that you would like, for yourself, and make it so that “that’s just the way it’s always been done” is how you think it should be done.
