I’ve been meaning to write something about why I’ll likely never go back to an in-office role, and why hybrid working is unworkable, but I’ve been struggling to find the right angle. A company approached me recently and while checking the role description—just out of curiosity, not because I had any real interest—I saw wording along the lines of “we like spending as much time with our colleagues as possible so we want you to commit to at least three days a week in the office” and there’s the angle, because I don’t want to spend as much time with my colleagues as possible.
Over the last couple of decades I’ve spent a lot of time building monoliths, followed shortly after by leading the effort to move away from those monoliths. That might lead you to believe I don’t like monoliths, but I do: The monolith rules! Sadly the reality is the practices used to build the monoliths meant they tended to reach a state where they could no longer be reasonably maintained or evolved, and it’s often safer and more efficient to rebuild externally and migrate than to rebuild in-place.
How much time have you spent arguing whether you should build something or not, while you’ve been sitting there thinking “I could have built it in the time we’ve spent arguing about this”? Probably more than you’d like to admit. I know I have. The problem is you’re having the wrong argument. The question isn’t whether you should build it; it’s whether you should ship it.
I’ve spent a lot of the last two-plus decades integrating systems, whether that was the goal of the project itself, or just a necessary part of a larger project. Integrations always take longer than you think, even when you take into account Hofstadter’s Law. However, in this time I’ve observed the amount of additional time they take is surprisingly predictable, leading to Beech’s Law:
on Software engineering, Deployment, Testing, Velocity
It’s received wisdom in the startup world that you need to have a staging environment to test things out before going to production. In some cases, maybe even multiple staging environments with different names like preproduction or demo or QA, with different rules about how mature code has to be to go on there. However, I don’t believe staging environments are worth the time, effort, and cost to keep running, so let’s talk about why you should just deploy straight to production.