[Oldletter #11] Software complexity, How to teach code and You Probably Are Gonna Need It

Every Friday, I’m sharing a short list of evergreen articles/resources broadly related to software engineering that wouldn’t typically get shared in most tech newsletters or social media feeds.

My backlog is running low again, so please send me any new recommendations you have.


  • Extracts from “A Philosophy of Software Design” (2020) reviewed by Florian Sauter. Software design is all about dealing with complexity either by avoidance or encapsulation. Complexity has 3 symptoms: Change Amplification, Cognitive Load and Unknown Unknowns. Thanks to reader Juan Tomas Garcia for this recommendation.
  • How to teach code (2020) by Ali Spittel. If you’ve ever thought about teaching code either internally or publicly, this article has a lot of great tips. Ali discusses selecting the right lesson formats to keep people engaged, pitching content at the right level and being ok with not having all the answers.
  • Preemptive Pluralization is (Probably) Not Evil (2021) by Shawn Swyx Wang. I’m a huge YAGNI proponent, but there are occasionally exceptions to this where you make a call to build in some feature early for which there is no immediate requirement, particularly when the following 2 statements are true: there’s a non-negligible probability that you may need it in the future, and if you do, it would involve significantly more effort to do at later stage than to do it now. Shawn gives a good example of this here around designing 1:1 relations between entities as 1:many.

    Before you write any code — ask if you could ever possibly want multiple kinds of the thing you are coding. If yes, just do it. Now, not later.

    If you view “code that doesn’t blow up in my face a year from now” as your job, then it is not (premature).


Submitting your recommendations

If you’d like to share an evergreen article/book which has significantly influenced your thinking or practice around software delivery, please email it through to me and I’ll add it to my backlog for sharing in future editions.

Have a great weekend!

— Paul

Join daily email list

I publish short emails like this on building software with serverless on a daily-ish basis. They’re casual, easy to digest, and sometimes thought-provoking. If daily is too much, you can also join my less frequent newsletter to get updates on new longer-form articles.

    View Emails Archive

    ☎️ Serverless Clarity Call

    Need quick guidance on a specific issue on your AWS serverless project? Or just wondering where to start with serverless?

    Book a call and ask me anything.

    Learn more >>

    🛫 Serverless Launchpad

    Ready to start building your new AWS serverless project but need help with getting everything setup?

    The Serverless Launchpad is a done-for-you DevOps service installed in under a week. You get a leading-practice multi-account AWS environment, a scaffolded codebase and architecture including the common AWS serverless services, isolated cloud environments for individual developers, automated delivery pipelines right through to production and much more. Everything is IaC, extensively documented and handed over to your developers.

    Learn more >>