Photo by Clark Van Der Beken on Unsplash

There is a short post that I cherish called: Complexity Has To Live Somewhere. Sometimes engineers need to be reminded that if everything was simple, clean, and easy, we wouldn’t be getting paid. It is our job to create the interfaces, the abstractions, and the patterns that place the complexity where it belongs.

The truly insidious part about complexity is accidental complexity. To use a metaphor it is: “the cost of doing business.” Accidental complexity is all the other crap that you have to do before you can do what you need to do. …


Photo by Justin Little on Unsplash

There is a unique failure mode that I have experienced: trying too hard. I never saw this one coming, and I never expected it. “Trying too hard” means that you have a tight grip over each aspect of every project. The biggest symptom I have experienced from this failure mode: The Bystander Effect.

“Bystander effects” are when folks on the team wait for someone to tell them what to do or to make a decision. It is a lack of initiative. The team expects the leader to do all that. And this leader doesn’t have to be a manager or…


Photo by Olav Ahrens Røtne on Unsplash

Most of our engineering decisions these days are about choosing which problems you want to have. For me, this realization came off the back of the popularization of the CAP theorem. Learning that the natural constraints of a distributed system force you to pick availability or eventual consistency, means you have to choose what problem you want to have. Would you rather your system have slower responses, or even be down? Or, would you rather have data “look… off” for a while, and write rules to manage conflicts, or heaven forbid, manage some manually. While the big players are building…


This is my “Hot Take” for the front-end world. I truly think modals are bad. Bad for the end user, and a crutch that too many developers and UX folk rely on.

Let’s start with the users because they matter most. We have implemented modals to take over the whole screen, to be an interruption, and to hide all content behind it. My challenge for the experience is: replace every modal you have in your application with a browser dialog() call. …


I have not found a better distillation of the gordian knot that is modern software development. There was a time when one person could, effectively, have the entire computer in their mind and produce good software. That time is long since past. Due to the technical and economic choices we have made, and are living with, we are forced to work together. Michael Feathers is, I think, holding up mob programming as a solution to the problem. I absolutely think it is one possible solution. I think there is at least one other possible solution. …


Photo by Pankaj Patel on Unsplash

I’ve always been far more of a programmer than a designer. I don’t think I’ve ever personally liked anything I’ve designed on the web. It’s been good enough, sometimes, and other times not so much. But I find myself squarely on the side of the designers on this one.

First off, CSS is a programming language. Full stop. If you don’t think so, you’re part of the problem. What designers have been able to do with this declarative programming on the front-end is nothing short of amazing. I’ve written CSS files with hundreds, and even a thousand, lines, that does…


Photo by Joseph Chan on Unsplash

I’m fond of saying that code has no value until it is running in production. I still believe that is a correct and important statement. But I want to qualify that statement to say that code has no performative value until it is running in production. No one’s job is complete, its not “done” until its running in prod.

But there is another value in written code: communication. There comes a time when you have written the one pagers. You’ve written more detailed documentation and plans on what you’re going to do. And you’ve had the meetings to discuss all…


Photo by Harley-Davidson on Unsplash

I think the speed of a team is the result of a function, it is the symptom of a working environment. It doesn’t happen by simply standing up and demanding that people work faster. Engineering teams deliver quickly when they have confidence. I don’t mean individual self-confidence, or a level on Maslow’s hierarchy of needs. And I certainly don’t mean the overconfidence of someone’s ego. That function is transferable experience of production systems, that results in engineering speed. A working environment is one that produces this transferable experience in engineers.

This is what my experience as a Technical Lead has…


Photo by Noah Buscher on Unsplash

I’m nearing the six month mark in my $latestGig, and my role has turned into a product and people management role. I was hoping this would happen, but not before I got to fully build something myself. Such is life, ruining a well formulated plan.

I’ve done the customer-facing part of Product Management before as a consultant. But this time around I have learned that Product management is as much about getting alignment and agreement within your org about what to build as it is with users. There is less convincing required, but more prodding for the answer to: “And…


Photo by Pim Chu on Unsplash

I just finished Ben Horowitz’s “What You Do Is Who You Are”. I want to focus on the biggest lesson I took from the book about creating your own culture. I sum it up in this way; there is a specific belief or outlook you have, that others do not, which will determine the level of success of your endeavor.

It made me ask the question of myself. First off, my general “endeavor” has always been a well-functioning Engineering department, especially regarding “the Product” and Product Management. …

John Obelenus

Solving Problems & Saving Time through Software and Crushing Entropy. Twitter: @EngineerJohnO

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store