Planning is Guessing

Last year I read through all of the 37 Signals books on working better. If you’re not familiar, 37 Signals are the creators of the amazing project management software Basecamp and released the Ruby on Rails framework developed for that product.

One of the lessons that really stuck with me from the book Rework was the idea that planning is guessing. The authors emphasize the further out you go, the less accurate your predictions will be. Even going out more than a few weeks you pretty much lose all ability to accurately predict anything, especially in software engineering.

This leads into the engineering process they have spent the last couple decades working out and have kindly shared with the world. It’s known as Shape-Up and breaks your “planning” into six week chunks, where the product folks will scope out a feature and assign it an “appetite”, or how long they would like to spend on the feature.

The biggest thing I love about their idea of scoping? Fat marker diagramming. Basically, this means you define a feature just enough to get the main idea and what the outcome should be without prescribing the manner in which you do it. A quick diagram being drawn with a fat marker gives you just enough information to do the feature without allowing the engineer and designer to get hung up on some idea that wasn’t actually important anyway.

After doing all the scope work and listing out what they want out of the feature, this is picked up by a pair of engineers (usually a designer and software engineer) and they start work on the feature. As they progress, if they encounter issues they can pare down features in order to make the feature within the “appetite.” If the feature is unable to be completed within the six week cycle, the feature is dropped and cannot be picked up again until it is rescoped; no sooner than the cycle after next. This prevents sinking effort into projects that can slowly grow in scope while never being released.

The big feature I like about this is that it removes the need for those “daily standups” and other constant status checking that so many middle managers and project management folks feel is necessary. By clearly stating the outcome desired and trusting the engineers to make good choices on a feature, you free the creativity and increase the satisfaction of those doing the work. Because, at the end of the day, software engineering is more of a creative pursuit than a pure science, especially when it comes to the products we sell.

If you’re looking for more information on what I’ve talked about, there are a couple links below. The first one is to the books site for 37 Signals, list all of the books that they have published over the years. The second is a direct link to the Shape-Up book that describes in much more detail the processes I just mentioned.

37Signals Books: https://37signals.com/books/
Shape-Up: https://basecamp.com/shapeup

Cloudflare Workers - Routing Made Easy

Hi, just wanted to share something cool I found while working on a side project using Cloudflare Workers. It’s called itty-router-openapi and it’s from Cloudflare themselves.

I’ve been working on a globally distributed server provisioning platform using Cloudflare’s compute (Workers) and storage (KV, R2, Durable Objects.) As part of the API portion of this work, I first rolled my own naive implementation of endpoint routing to get things off the ground. After building up the service further it, was becoming apparent that I would need a proper routing framework.

I first started working on my own framework but that quickly turned into something I really didn’t want to dig into and I (correctly) assumed that this had been solved somewhere else first. The first thing I landed on was itty-router. It’s a micro routing framework that works with Javascript and TypeScript that seemed to fit the bill perfectly for what I needed.

I started rewriting my endpoints using this framework. As I was running into issues, I started searching around for additional documentation or sites when I stumbled upon itty-router-openapi. Seeing that it was intended for use with Workers, been used in production for Cloudflare Radar and had the added support for OpenAPI, I was instantly sold.

I’ve only now started the third re-write using this new library. So far it has been going pretty good but I will try to update soon on how things are going and if I’m still using the framework.