Design Pattern Evangelist Blog

Smart pointers about software design

Maintained by Jim Humelsine | Table of Contents | RSS Feed | Edit on GitHub

Table of Contents

Organizing various blog entries by common themes


Trinity College Library

Introduction

I began this blog in earnest as a retirement project in the fall of 2023. The blog’s home page lists the entries chronologically from newest to oldest. Blog entries are often part of a series focused upon a theme. The first blog entry of a series is usually an introduction to the series and acts as a landing page to the other blogs in the series. There are crossover reference links to other blog entries as well.

Beyond chronology and series structure, there is a deeper organizing principle at work. Just as a library organizes books to make this accessible, as seen in the Trinity College Library above, this meta-blog entry organizes the themes of my blog entries making them more accessible.

This page is a curated collection of essays, examples, and experiments on software design, testing, and architecture, written from the perspective of a retired software engineer with decades of industry experience.

The focus here is on durable ideas: design patterns, abstractions, tradeoffs, and mental models that hold up across languages, frameworks, and architectural fashions. Many entries are intentionally long and exploratory. They are meant to be read slowly, revisited, and occasionally argued with.

This is not a framework tutorial site, and it is not a stream of short-form commentary. Most articles aim to answer questions like Why does this pattern exist?, What problem is it actually solving?, and Where do people get confused when applying it in real systems?

Think of this site less as a blog and more as a living technical notebook—one that continues to evolve as ideas are tested, refined, and sometimes reconsidered.

NOTE: This page will be updated as new blog entries are added to existing themes and new themes are introduced.

How to Use This Page

This page serves as an index and entry point into the material on the site. You do not need to read it from top to bottom.

Ways to Navigate

Many articles are designed to support non-linear reading. If a post includes a table of contents or reader’s guide, it is intentional—use it.

What to Expect from Articles

This repetition is deliberate. Important ideas tend to reappear as systems grow more complex.

Interactive Notebooks

Some articles link to Interactive AI Notebooks that expand on the written material. These are optional, but they often explore edge cases, alternate implementations, or “what if?” scenarios that don’t fit cleanly into a static article.

A Note on Depth

Not every section will be relevant to every reader. Skipping ahead, skimming, or reading selectively is expected. The goal is not to finish pages, but to build understanding over time.

Table of Contents

Core Concepts

Software Engineering

A degree in Computer Science has been the initial exposure to software for many developers; however, Computer Science is not the same as Software Engineering.

SE Miscellaneous

Abstraction

Abstraction is a core software engineering concept, and it’s more challenging to describe abstraction concretely than I originally thought.

See: Abstraction Interactive Interactive AI Notebook

Design Pattern Foundations

Design Patterns changed how I approach software. This section argues that every Software Engineer would benefit from having some degree of competence and comfort with design patterns.

Design Patterns are not technically challenging, but they do require a slight paradigm shift in thinking. These blog entries lay some foundations toward that shift in thinking.

See: Design Pattern Foundations Interactive AI Notebook

Design Patterns and Architecture

Patterns are grouped in cohesive groups, often as a series where the next pattern builds upon the previous one. They are not grouped by a rigid taxonomy. Some patterns naturally belong in more than one category, since the cohesive groups don’t have strict boundaries, and there’s some degree of overlap.

Essential Design Patterns

The Seven Essential Design Patterns are the design patterns that will be used repeatedly in designs. They are the hammer and screwdriver of a software developers design pattern toolbox.

See: Essential Design Patterns Interactive AI Notebook

Creational Design Patterns

The Creational Design Patterns define techniques to acquire objects while encapsulating the object’s concrete class type. They also provide object management techniques when a new object is not always needed.

See: Creational Design Patterns Interactive AI Notebook

Composable Design Patterns

The Composable Design Patterns focus upon behavior emerging from the composition of objects and their interaction in a structured formation rather than implemented within an individual class.

See: Composable Design Patterns Interactive AI Notebook

Interpreter Design Pattern

The Interpreter required its own series. It moves from language theory to production through a single evolving example.

Interpreter allows software developers to design and implement their own Domain-Specific Languages (DSLs). Interpreter is not just the pinnacle of Composable Design Patterns, but it shares the top spot of all design patterns along with the Visitor Design Pattern.

Interpreter is not a difficult pattern to design or implement, but it’s a difficult pattern to comprehend. Interpreter required multiple blog entries to do it justice.

See: Interpreter Design Pattern Interactive AI Notebook

Hexagonal Architecture

The Hexagonal Architecture (AKA Ports and Adapters) is a design that all software developers should know. It showcases how different Essential Design Patterns can work as a cohesive design.

See: Hexagonal Architecture Interactive AI Notebook

Quality and Testing

Automated Testing

I didn’t appreciate automated testing until late in my career. My automated testing series begins with my Conversion from automated testing non-believer to almost a zealot. The series grew larger than I originally imagined. I ended up writing a short book on the topic.

Here is the complete Automated Test series:

See: Automated Testing Interactive AI Notebook

AI and Emerging Topics

Large Language Models and Generative AI

AI has become a major topic since late 2022 with the introduction of ChatGPT among others. I learn a bit more about how to use them almost daily.

See: Large Language Models and Generative Interactive AI Notebook

LLM/GenAI Introduction

LLM/GenAI Introduction - Like it or not, the AI Genie is out of the bottle

Prompt Engineering Patterns

Prompt Engineering Patterns are the key to getting the best results from Generative AI. These blogs present a few patterns I learned via online courses.

Interactive AI Notebooks (Google NotebookLM)

I have created interactive AI notebooks for several of my blog series. Each provides an AI interactive experience with some of my central themes. There are several artifacts including an AI generated two-host podcast formatted summary. You can also interact with the generated AI hosts to some degree.

NOTE: A Google account may be required to access Google NotebookLM.

Interactive AI Notebooks:

Experience and Reflection

True Stories

The following blog entries feature a few True Stories, or maybe they should be called: True Confessions. I try to include personal experiences where I can in my blog entries. Sometimes story is the entire blog entry. Sometimes it’s just a part of the blog entry.

I keep my previous employers and others anonymous. If I do mention someone by name, I only use their first name, and I get their permission, or I use a pseudonym.

Cautionary Tales and Principle of Least Astonishment

Cautionary Tales may help others avoid some poor choices I encountered, some of my own making. This section will also contain a few examples of violations of the Principle of Least Astonishment (POLA):

Miscellaneous

This is for blog entries that were one-offs, and weren’t part of series:

Reference

Complete Code Demos

Many blogs have complete code examples to demo the principles. They are in Java and collected into one file, even if the file contains many interfaces and classes. All examples are self contained within Java. There are not external dependencies to import.

Copy the demo into a Java environment and run it. If you don’t have Java, try this Online Java Environment.

Play with the implementation. Add tests. Refactor the demo. Copy the demo into Generative AI platform for analysis and comments.

NOTE: While developing this section, it became obvious to me that I had not provided as many complete code demos as I should have. I will slowly add them retroactively and provide references here when provided. I may also reorganize the list once it gets more content.

Statistics

This started as a retirement project. It quietly became something else.

Year Blogs Words Countries Reached Most Views Comments
2021 1 1,278 N/A What is UML and why you may want to care First prototype blog about UML to set up the environment on GitHub.
2022 0 0 N/A N/A Still employed; did not start blogging yet.
2023 21 38,229 46 Hexagonal Architecture – An Introduction Topics covered were Design Pattern Introduction, Essential Design Patterns and Hexagonal Architecture.
2024 35 109,944 73 Interpreter Design Pattern – Domain-Specific Languages Topics covered were Composable Design Patterns, Interpreter Design Pattern, Automated Testing, LLMs/GenAIs and Abstraction.
2025 21 71,033 98 Specification Design Pattern – Allow a Client to select or filter objects with specific attribute property values as specified by the Client. Specification is from early 2024, but it was by far the most viewed page. It's in first page results of a few search engines.
Totals 78 220,484