Issue #6

I have to say that one of the great pleasures I have is getting to meetups and talking to other technical folks in person. I do love talking shop and being able to chat with other developers face to face with no particular agenda is really nice.

Welcome to the four new subscribers that have joined us since our September newsletter! I hope you find this newsletter worthwhile reading and, again, to everyone—I would love your feedback!

Other than that I hope this newsletter finds you well. We’ve got a few articles which I hope you’ll find interesting and useful and another puzzle to give your grey matter a bit of a workout!

If this newsletter has been forwarded to you and you like what you see and you’d like to see more please subscribe at https://impractical-engineer.beehiiv.com/subscribe. It’s free and it’s very simple to unsubscribe should you decide it’s not for you. And if you subscribe please drop me a note. I always love to talk to other software developers!

Reviews Dept.

A Review Of:

The Big Ball Of Mud Pattern by Brian Foote and Joseph Yoder

I consider it one of the most interesting questions in the realm of software development. Why is it that in spite of our best efforts we so often end up with code bases that most of us would consider travesties of proper software engineering? Surely everyone who’s got a stake in the creation of software wants the highest quality code possible. So why do we still end up with dumpster fires?

This paper is an attempt to analyze the forces that contribute to this outcome and what we might do to counteract those forces.

The first thing the authors do is to define what they mean by “Big Ball of Mud.” (BBOM) There was a cartoon I saw (wish I could find it again) that illustrated the idea very nicely. The first panel showed a developer with a clear field saying “at last I can build things right!” Then the second panel showed a monstrosity of carpentry—pillars in the wrong place, a dented roof etc.—with the caption of “how things always end up”. This is the essence of the BBOM. Our good intentions and our “this time we’re going to build it right!” never seem to change the outcome. Why?

While I discuss BBOM as if it were a single pattern in fact the paper presents seven related but distinct patterns that one needs to consider when one is thinking about why software projects so often go off the rails and how we might fight this tendency toward entropy.

Reading this paper again I find myself nodding in agreement at several of the things they identify. They identify a set of forces which lead to shanty town architectures and discuss how we can counter these forces.

One of the most interesting observations is the fact that software (like other tangible artifacts of group effort) obeys Conway’s Law. That is, like it or not, our software reflects the communication within the group that creates it. In some cases this is rather obvious—some in-house systems demonstrate this fact via wildly differing user interfaces. This tells you that the developers working on the UI’s were not exactly communicating well. In some cases it’s far more subtle. API’s can reflect the communication structures of an organization—when you see multiple API calls doing much the same thing you can bet that the org’s architects weren’t talking as much as they should have been.

I think one of the more interesting observations in this paper is the fact that while we all despise these “bailing wire and lots of prayer” software artifacts they keep coming up. Hence, despise them or not, they’re filling a need. Rather than curse the fact that they keep happening it’s worth our while to identify why they happen and try to address the forces that cause this sort of thing to happen with such depressing frequency.

4 out of 5 stars.

Puzzle Dept.

Solution For September’s Puzzle:

Consider that if I have two dots on a page I may draw a line to connect them. Like this:

One Line

Further consider that if I have three dots on a page, I may have one line, two lines or three lines like this:

One, two, or three lines.

What is the minimum number of dots which I need if I wish to draw four lines?

Special shoutout to my brilliant pal Hillel Wayne who, as far as I know, was the first person to solve the puzzle (at least he’s the first one who sent me the correct solution).

The answer is zero. At no point in the puzzle did I say “the lines must pass through dots”. I said “may draw” and “may have”. Hence there’s nothing preventing anyone from simply drawing four lines on the page with no dots whatever. I don’t know if there’s a name for this sort of puzzle but I know I have seen its type before. The implied constraint makes the problem seem trickier than it really is.

October’s Puzzle:

It happened a while ago that a census taker was proceeding along a street gathering census information. He finished with number 19 and moved on to the next highest address number on the same side of the street. A lady responded to his knock.

“Good afternoon Ma’am. I’m gathering information for the census. Can you please tell me the occupations of yourself and your spouse?"

She responded: “He is a postman. I am a professor of mathematics.”

“Oh, I have some background in math!” said the census taker. “Do you have children?”

“Yes we do!”

“How many?”

“If you factor our house number, the larger factor is the number of males in our home and the smaller factor is the number of females (including me) in our home!”

“Excellent! Thank you so much for your time ma’am!” He jotted down both the number of males and females in the math professor’s home and, whistling a happy tune, he continued on to the next house.

How many daughters do the professor and her husband have?

What’s Happening Dept.

Selected Conferences and Event Calendar

Date/Time

Event

Location

RSVP/Details

4 - 5 October 2025

(fifteenth RacketCon)

UMass Boston

Boston, MA

8 October 2025

Detroit Tech Watch - Dr. Nathaniel Borenstein: “AI, the Internet, and a Future Worth Hoping For”

Clarity Voice

Southfield, MI

12 October 2025

SEMCO (Southeastern Michigan Computer Organization)

Rochester Hills Public Library

Rochester, MI

15 October 2025

Detroit Software Developers

1555 Broadway

Detroit, MI

18 October 2025

Code and Coffee

Cahoots

Ann Arbor, MI

12-14 November 2025

Clojure/Conj

Charlotte Convention Center

Charlotte, NC

10 - 13 November 2025

KubeCon + CloudNativeCon North America 2025

Atlanta, GA

22 November 2025

Michigan Dev Fest

Motor City Casino

Detroit, MI

12-16 January 2026

CodeMash

Kalahari Resort

Sandusky, OH

I know there are a lot more interesting events in the world and if you have more events you’d care to add please send them to the editor.

Get A Job Dept.

Rivet is looking for a lead QA engineer and two senior software engineers. You can find more details at Rivet’s Careers page.

By the way if you know of companies looking to hire please feel free to share them with me! I’m happy to try to help companies find good employees and people find good places to work!

Learn Software Engineering Dept.

State

One of the most important but seemingly least understood concepts for software engineers is the idea of “state.” Like monads it seems to be one of those concepts that’s actually pretty simple but not well understood. I’m going to see if I can help the readers of this newsletter to understand the idea of state better.

According to Merriam-Webster, state is a noun meaning: “a mode or condition of being”. That word—mode—should set off some alarm bells for people who’ve used modal applications. A modal application (just to ensure we’re all speaking the same language) is an application where actions will be enabled or disabled depending on prior actions. Probably the most famous modal app is the vi editor. In the vi editor one can be in the editing mode—where what you type goes into the editor buffer or one can be in the command mode—what you type is interpreted as a command. The problem is that it’s very easy to get into one mode or the other and not realize it. You can be in a productive flow, typing away at some brilliant algorithm, accidentally hit the key that transitions from edit to command mode, and suddenly you’re getting all sorts of strange behavior. If you’ve never heard it, one of the tastier bon mots I’ve seen is that people trying to figure out how to exit vi accidentally create some terrific passwords.

Mode and state are practically synonymous in this context. State is the set of all variables at a given point in time in an application that either allows for some action to occur or prevents some action from occurring. To, I hope, make the idea of state clearer, let’s consider an example. We’re writing a banking app and one thing we need to support is transactions. One behavior we need is that if there’s a pending transaction we prevent new transactions from being created. Hence if we’re in a “pending transaction” state the “create new transaction” action is not allowed to occur. We would need some way of keeping a flag in memory or some other sort of mechanism to indicate that a transaction is pending. Also a pending transaction state may allow us to either commit the transaction or roll it back. But if we’re not in a pending transaction state then neither committing nor rolling back actions are allowed.

One interesting thing to note; the original implementation of the World Wide Web was “stateless.” That is, you’d send a request to a website and it would return a page to you and no state was created at all. The website had absolutely no way to tell if you’d requested a page 1 time or 1000 times. Adding state to the web required some rather interesting engineering. Initially the state was added on the back end via databases and other mechanisms. CGI (Common Gateway Interface) was one of these backend mechanisms—CGI gave the web page a means to communicate to a database.

Later state was added on the browser side with cookies. You’ll note that both of these mechanisms (databases and/or cookies) are non-volatile. That is they maintain state across the machine being disconnected and reconnected to a website.

Another term that often arises in computer science is a finite state machine. A finite state machine is a model of a process as a set of states which the process can go through. I cannot treat finite state machines with any depth so I’ll end the discussion here.

Want to know more about the idea of state? Drop me a note and let me know!

Humor (We Hope) Dept.

Most of us scoff at the idea that the position of the constellations in the sky on the day we were born determines anything about us. And justifiably so—can you imagine 1/12th of the population all having the same things happen to them every day? This seems the sort of thing that the more credulous members of our population fall for (and I sure won’t fall for it anymore, I’ll tell you!). That said, we needed something to poke fun at this month and so we proudly(?) present:

The Impractical Engineer’s

Guide To Developers’ Astrological Signs

(In Verse No Less!)

Aries:

Don’t ram your thoughts

Ahead in meetings

Or very soon

In meetings you’ll get no seatings

Taurus:

You think you're a bull

Muscular power–so full of it

But we have a request

We’re tired of your bull . . . -ish behavior.

Gemini:

With you we get

Two in one

We're thinking that's why

You take twice as long to get done

Cancer:

Stop being so crabby

Don’t take it so seriously

Rapidly changing requirements

Just mean you work more furiously

Leo:

Convinced are you 

You’re the king of all tech

But we think your tech

Just makes us wretch

Virgo:

We’ve heard that you no longer

Rack up high scores on games

But still you’re not dating

We checked with the dames

Libra:

We marvel at your ability

To balance obscurity and confusion

But we still have to deal

With your competence delusion

Scorpio:

Your interfaces are sublime

And quite hard to unravel

You think you’re a genius

We think it’s all babble

Sagittarius:

You think your wit

Is a dart aimed so true

We consider your wit

Something we suffer through

(Author’s Note: I’m A Taurus)

Capricorn:

You were born under

The sign of the goat

And we can sure tell

With your laptop you should be smote

Aquarius:

Like dirty water

Your code gets where it shouldn’t oughta

We’ll clean it up

As soon as we invent a code rooter-rata!

Pisces:

Your requirements like two fishes

Squaring off head to head

Stop doing that to us

You annoying saphead.

Halloween Dept.

Halloween’s not till the end of the month but we felt compelled to supply some scary stuff to keep you up at night till then. Here’s some things that keep us up at night:

  • When is my next turn to carry the pager?

  • What problems will the other developers find when they review my code?

  • I just spent five minutes reading lame poetry. Am I wasting my life?

Feedback Dept.

If you’d care to share:

  • feedback

  • suggestions

  • events

  • questions

or anything else, please contact me, Onorio Catenacci, editor of the Impractical Engineer at my email.

If this newsletter has been forwarded to you and you like what you see and you’d like to see more please subscribe at https://impractical-engineer.beehiiv.com/subscribe. It’s free and it’s very simple to unsubscribe should you decide it’s not for you.

And if you’re a subscriber and you’d like to do a small favor for the editor, please share this with your developer friends!

Keep Reading

No posts found