Choose Boring Technology
notes date: 2017-11-09
source date: 2015-07-23
- Mature Engineering practices spoil you
- How do you choose technolgoy?
- How do you make developers happy?
- “chase shiny objects […] is not really the [answer] at the highest levels of fulfillment. They don’t talk about nodejs in heaven.”
- As a dev, Dan is now more interested in ‘the business track’
- this is less about getting old and cranky, and more about moving up Maslow’s hierarchy of needs
- the “innovation tokens” model
- each company gets a more or less fixed number of innovation tokens early on in its life
- you can spend them on any of your complicated, gigantic problems
- do you want to spend these on your company’s core mission, core values, or on its technologies?
- “There are known unknowns, and there are unknown unknowns”
- there are classes of problems you can expect in a domain almost always
- there are also consequences of your technologies' implementations that might shock you
- http://www.evanjones.ca/jvm-mmap-pause-finding.html
- heavy IO can cause long GC pauses, because GC stats are written to an mmap’d file
- Boring tech has fewer known unknowns and fewer unknown unknowns than new shiny tech
- The failure modes of boring tech are well known
- Optimize the total span and volume covered by your tech choices
- “beating the polyglot programmer drums”
- “using the best tool for the job”
- implicitly, this is saying “the short-term benefits of using a new database exceed the long-term costs of operating it” in perpetuity.
- Model problems and technology as a bipartite graph
- every edge is solving a problem with some technology
- every edge is a choice that carries benefit (having solved that problem)
- every edge also carries cost or benefit (degree to which that tech is fit-to-purpose for that problem)
- every technology node which is on an edge contributes cost (operating cost)
- but you only pay it once regardless of how many edges
- you want to minimize this: total cost = Sum(tech cost) - Sum(velocity benefit)
- if the cost per tech is cheap, you can choose many; if it’s high, choose a few
- In reality, tech choices are expensive
- “Polyglot programming is not the kind of freedom we are looking for”
- “It’s handing developers the chains so that they’re free to imprison themselves with operaitonal toil, forever.”
- Example: activity feeds at etsy
- built using suboptimal tools from the common stack (memcached)
- memcached presented more upfront developer cost than if they’d adopted redis
- however, over a few years the feature’s usage grew by 20x
- because memcache is on the common stack
- it probably would have been scaled anyway
- it already had knowledgeable people on staff who would do this
- the tech you depend on is neither abandonware nor “the thing you introduced that makes someone hate you forever”
- The techs your company uses have broad importance: talk to each other
- ask how you would solve the problem without adding anything new
- if solving a problem with existing techs requires resorting to unnatural acts, write down those unnatural acts
- if you try a new tech, find low-risk ways to get started
- commit to removing the old, redundant system
- every piece of software has a curve of “time since you started using it” vs “kinks you haven’t worked out yet”
- there’s a natural tendency to abandon tech early in the curve, before mastery/stabilization