Skip to the content
- How big technology changes happen at slack: Explore, expand, migrate. They’ve chosen a practice that involves 3 distinct phases where anyone (or nearly anyone?) can advocate for a new technology, but they must convince their peers of its value and do that by getting other people in the org to use it.
- Most experiments fail fast which is something they like. The ones that do achieve widespread adoption make it to the migration phase where the company actively roles it out across all things.
- It sounds great, but my question would be how do you stop a proliferation of technologies from being put to use in different spots. The maintainability of a system in such a state seems monstrous. If you bake something new that no one else uses deeply into a service, you have to learn that new thing in order to properly support and enhance that service. Does every service have 1 or 3 things like this uniquely theirs at Slack? How does this shake out? How do experiments work?
- There has to be some friction to get to phase 1. (Along with a bunch of communication across the immediate team) You always start with a real problem you need to solve. Can you find more than 1 of a few other people who are also concerned about your problem and talk through it with them?
- The majestic monolith: A post from DHH about monoliths and microservices that resonates with me quite a bit. Side effects of complexity in a system I’m thinking of now are failures, emergent behaviour, dev + operator cognitive load, trickier production support, … Many many applications don’t need the extra complexity now and never will
- Humble objects: Making a class easier to test by factoring out smaller bits into easily tested ones. I’ve heard the term “sprouting” recently referring to the same concept