DEV Community

Cover image for Boxes
Bartek Ciszkowski
Bartek Ciszkowski

Posted on

Boxes

We're all far too familiar with the black box. It is the system which claims the sky is blue but as you bang your head against the wall, all you see are clouds.

Our black box usually looks like this:

A typical black box with input and output

Over time, we learn more about that black box. Through discovery of relevant documentation, conversations with owners of said box, and in many cases, the perusing of Stack overflow. A mental model for what the black box is doing begins to form and soon, input can more easily translate into expected output, consistently. We'll rarely have access to its internals but we gain confidence through consistency. Consistency is nice.

But it doesn't end here! Our input is usually derived from many other boxes:

More boxes that provide input to our black box

These boxes usually sit within our teams, organization, or publicly as open source. They vary in initial clarity and over time we become more clear in their inner workings. Many will stay opaque until a specific incident or task necessitates our learning. These are your databases, queuing systems, libraries, tooling, etc. These boxes are shared by teams and include some sort of upkeep where documentation and other forms of technical debt are managed in an effort to keep the box intact. Finally, we usually have access to the source code in one way or another (private company repositories, open source)

It's expected over time we get familiar with these and we'll feel comfortable to mentor others in their workings and even add a line to our resume highlighting our competence!

Though our confidence in the mechanics of these boxes increases, so does our humility.

What's a previously mentioned word that's important for software engineers? Consistency! In a perfect, magical world where no one would likely have a job because everything is perfect, every box would output beautifully consistent streams of data towards our input. Rather, we're usually dealing with a level of messy-ness in the hopes of consistent output to our other boxes.

Data streams which are messy

Our confidence in our aforementioned boxes becomes elastic as we introduce data. Data is consistent, until it isn't. It surprises us and the messy-ness is not through the fault of any particular individual or system, but usually the layering of historical choices, trade-offs, and decisions made explicitly due to the nature of the organization, relating systems, etc.

We're going to spend the lifetime of our careers learning how to wrangle with these boxes but let's remind ourselves how they came to be.

So where the heck am I going with this?

Humans and boxes

Adjoining these boxes are humans. Humans who have put effort into shaping these boxes, who maintain and support them, and who help craft new ideas through their community leadership.

The humans who lend a hand, provide clarity, who ask questions and play rubber duck, who closes tickets and write documentation. The humans who pair program, fight a fire, and share their status update in standup, proudly proclaiming they solved that pesky bug (throw them a high-five right now!)

They are coworkers, open source maintainers, community managers, hobbyists, conference speakers.

exhales Humans are pretty rad, aren't they?

You may be just starting off or ten years into this, but every day you interact with one of these boxes you are also provided the opportunity to take note of a fellow human. You're probably already doing great at being an awesome human but I hope this was an enjoyable reminder! And if you feel like you've slipped lately, I hope you're doing OK. Remember there's always someone to lend a hand if you need it.

And of course, you'll figure lots of things out yourself. Just remember to leave notes for everyone else.

Top comments (0)