How we do, what we do

The 37signals Dev blog is brought to you by the people who build Basecamp and HEY ✌️❤️

De-cloud and de-k8s — bringing our apps back home

For the Operations team at 37signals, the biggest effort in 2023 is removing our dependencies on the cloud and migrating our application stacks back into the data center onto our own hardware. We’ve already made amazing progress in a fairly short time — let’s get into some details!

Pending tests

I rarely write my tests first or use them to help design my code.

Bringing Card Table to the small screen

A close look at the process we used to make our version of Kanban nice and useful on mobile devices.

Our cloud spend in 2022

Since we published why we’re leaving the cloud, we’ve received a lot of questions about our actual spending. We’re happy to share, both where we currently are and where we’re going.

Active Record, nice and blended

Active Record restates the traditional question of how to separate persistence from domain logic: what if you don’t have to?

Compared to what?

When discussing software design techniques, actual code should be a mandatory ingredient.

Better navigation in HEY

Some of the best releases are ones that people never notice at all.

The 10x development environment

My hunch is that if anything can make you 10 times more productive, it’s the environment not the programmer.

A week in the life of a product designer

An inside look at the work we do (during cooldown).

Making export jobs more reliable

Long-running jobs can create maintenance and support nightmares as they run up against resource and time constraints. What if we could break them up—automatically—into smaller chunks of work?

Vanilla Rails is plenty

A common critique of Rails is that it encourages a poor separation of concerns. That when things get serious, you need an alternative that brings the missing pieces. We disagree.

Faster pagination in HEY

Recently we focused on improving the performance of HEY. Fixing slow database queries for some of the HEY pages was a challenge, so I thought it would be worth writing up a technique we used.

Good concerns

We love concerns and have been using them for years in large codebases. Here we share some of the design principles we use.

Fractal journeys

Good code is a fractal: you observe the same qualities repeated at different levels of abstraction.

Domain driven boldness

How to create a good domain model is the subject of many books, but here’s a lesson I learned at 37signals: don’t be aseptic, double down on boldness.