I recently wrote an email to an Irish Entrepreneur about the challenges of using Kubernetes and Kafka. I think both technologies are awesome, but I’ve seen in the past companies trying to integrate them without thinking about the managed services that exist out there.
Pick Serverless and Managed services if possible.
My philosophy now is more and more see if you can use a more expensive but more managed service from Amazon or Google. They’re changing all the time, there’s new products out all the time. And even starting with one of them would be a great start as it’ll probably reduce the load on your developer team.
For example for the podcast app I’ve worked on we specifically as the technical directors picked managed services, we picked https://aws-amplify.github.io/
for a lot of the mobile app backend stuff, we use a bunch of APIs for a lot of stuff and we use a load of AWS Lambdas for serverless type stuff (for example resizing mp3s automatically, or adding users to databases), now some of that is actually hard as a developer emotionally.
For the podcast app we picked https://aws.amazon.com/cognito/
for our sign in experience/ identity management. The good part of that is that it worked out of the box, the bad part is that when we deviated from what Amazon wanted us to do, we ran into problems. There’s a cost to the inflexibility of managed services, but often it’s worth thinking what can be used for that. Or how you use as little back-end code as possible. Especially for greenfield projects where developer velocity is super important and code is a liability.
I naturally want ‘new shiny things’ and left to my own devices will ‘write something in a new fancy language to prove how smart I am’. It satisfies some ‘endorphin rush’ (as mentioned in the boring technology talk/essay) but long term it becomes a pain to manage and maintain, and that’s the biggest cost of software. So it’s a challenge, and I’m still learning it.
Joe Emison has talked a lot about this (he’s cited below). His equation is below.
2 WeeksResearch + 1 DayDevelopment → NLinesofCodetoMaintain
1 DayResearch + 2 WeeksDevelopment → 10 ⋅ NLinesofCodetoMaintain
On average, ten times more lines of code is ten times more technical debt, which means increasingly slower and less predictable future development velocity, and systems that cannot be well maintained by the average developer.
I’m still fleshing out this thought. So I’ll probably revisit this in the future. However I think there’s a lot of overlaps between ‘choose boring technology’ and ‘choose serverless’
I think the overlaps are from the ‘innovation tokens‘ idea in Dan McKinleys talk. You only have three innovation tokens, what do you want to spend them on.
For some apps it may be ‘spend it on your recommendation engine technology’ or ‘spend it on building the best e-commerce UX experience for selling kittens online’ (I made that last one up), but it probably isn’t ‘produce the worlds most scalable database’ unless you of course work for an enterprise Data Warehouse company. Attention is precious. So choose wisely. Don’t think your job as a developer is to deal with scalability – your job as a developer is to make things people want, and make things people love.
Some other links
I hope that helps 🙂