Continuous Learning

Book Reviews

I love learning.

Reading across genres — from distributed systems and functional programming to psychology and team culture — sharpens every dimension of software development. Here are reflections on books that have shaped my thinking.

Reading about distributed systems reveals how much of modern software engineering rests on understanding trade-offs between consistency, availability, and partition tolerance. Books that explore this territory often reshape how you think about database choices, service boundaries, and failure handling. The concepts feel abstract until you encounter a real outage or a performance bottleneck, and then the theory snaps into clear focus. Each chapter adds a new lens for debugging complex interactions between services. Over time, these readings build a mental library of architectural patterns that inform everyday decisions, from selecting message queues to designing retry logic. The knowledge becomes a quiet confidence when facing ambiguous technical challenges.

Functional programming books tend to challenge assumptions about how code should be structured and reasoned about. Concepts like immutability, referential transparency, and algebraic data types encourage a style where correctness becomes more naturally enforced by the compiler. Reading across languages that embrace these ideas — whether Scala, Haskell, or others on the JVM — reveals common principles beneath different syntax. The shift in thinking often improves how you approach concurrency and state management in any language. These books do not just teach syntax; they reshape problem-solving instincts. The result is cleaner, more predictable code that is easier to test and refactor over time.

Books on team culture and psychology offer a different but equally essential kind of learning. Software development is fundamentally a human activity, shaped by communication patterns, feedback loops, and shared mental models. Reading about cognitive biases, psychological safety, and collaborative decision-making helps explain why some teams thrive while others struggle despite having talented individuals. These insights translate directly into better code reviews, more effective retrospectives, and healthier conflict resolution. Understanding the human side of engineering complements technical depth, making you not just a better developer but a more empathetic colleague. The best teams balance both dimensions deliberately.

Lean and continuous delivery literature connects technical practices to business outcomes in ways that resonate deeply. Books in this space explain how reducing batch sizes, shortening feedback cycles, and measuring lead times create sustainable momentum. The principles apply whether you are building a startup product or maintaining a mature enterprise system. Reading about deployment pipelines, feature flags, and experiment-driven development shifts the focus from merely shipping code to delivering value incrementally. These ideas encourage a mindset where process improvements are treated with the same rigour as code improvements. The cumulative effect is a development culture that adapts faster, learns sooner, and wastes less effort on unvalidated assumptions.

A soft watercolour painting of stacked hardback books in muted browns, ochres, and cream tones, resting on a wooden desk beside a warm reading lamp.

Genres & Interests

A broad reading list that spans technical depth, delivery practices, and the human side of building software.

.NET & C#

APIs, ASP.NET, WPF, and the wider .NET ecosystem.

Agile & Lean

Kanban, continuous delivery, metrics, and iterative delivery.

Architecture

Design patterns, DDD, distributed systems, and systems thinking.

Functional Programming

Scala, Erlang, concurrency, and RESTful design.

Web & Front-end

Web design, JavaScript, HTTP, and infrastructure.

Soft Skills & Culture

Psychology, collaboration, public speaking, and team dynamics.

Data & Search

SQL, Lucene, Elasticsearch, and search-based applications.

Security & DevOps

Secure coding, infrastructure, and project management.

Recent Reflections

A selection of books that have left a lasting impression on how I approach code, teams, and products.

Domain-Driven Design

Architecture · Design Patterns

Tackling complexity at the heart of software. DDD remains a cornerstone for aligning code with business domains — essential reading for anyone building non-trivial systems.

Kanban: Successful Evolutionary Change for Your Technology Business

Agile · Lean · Kanban

David Anderson's work on visualising workflow and limiting work-in-progress has profoundly influenced how I think about delivery cadence and team throughput.

Continuous Delivery

DevOps · Infrastructure

The ThoughtWorks guide to reliable software releases. Paired with tools like GO and Docker, the principles here shaped my approach to build pipelines and deployment confidence.

Programming in Scala

Functional Programming · Scala

A comprehensive deep-dive into Scala's type system, concurrency primitives, and functional idioms — invaluable for building robust distributed systems with Akka.

The Phoenix Project

DevOps · Business · Collaboration

A novel about IT, but really a book about flow, feedback, and the business value of operational excellence. It reframes how developers should see their role in the wider organisation.

Read Something Worth Discussing?

I'm always keen to swap recommendations. Reach out on Twitter or drop me an email — I'd love to hear what's on your shelf.

Get in Touch