There’s no shortage of lectures and blogposts on “Hexagonal Architecture” these days, but many of them give a much broader view of Hexagonal Architecture than it was originally presented by its author Alistar Cockburn. This can make you feel overwhelmed, so let’s re-visit Alistar's original idea and remove some of the confusion.

We’ll start the same way Alistar did, by looking at traditional Layered Architecture first.

Layered Architecture

To help ourselves deal with the complexity of software systems we can divide them into separate layers (based on their levels of abstraction). There’s no limit to the number of layers but authors usually…


For those of you lucky enough not to know, Jira is a project management tool, and it doesn’t look bad at first sight:

Troubles start when you need to use it and the other day I had to do a simple thing — open a ticket and put it on the project board. It took me ten minutes to do so I had to ask a colleague for help. True story.

A scroll through a job board these days shows I’m not the only one having problems using Jira. It is so complex that some companies are hiring people whose…


Since its birth in 2005 git has become massively popular especially in the open-source world but many of us use it on our job posts also. It is a great VCS tool and has many advantages, but being easy to learn is just not one of them. Which can make us frustrated since we use it so often. In my opinion, the only way to get comfortable with using git and maybe even start loving it is to learn about how it works internally. …


Your app broke, and you have no idea why? Even worse, you don’t even know what commit is causing it to fail? Don’t worry — it happens.

It is important to keep calm and track that first commit that is causing the failure, and git can help you out. Let’s see how…

Finding the (first) bad apple

You start with what you know for sure — the last (present) commit is bad:


Humanity has undergone tremendous changes from the times we were living in caves but one thing stayed the same: we are still very much a storytelling animal. While our ancestors told stories crammed around the fire in their caves, we tell them in bars, at the gym, and at work. They are a powerful vehicle to convey meaning.

So why not use this tool that is so deeply rooted in our evolution when it comes to tackling the old problem of bridging the gap of misunderstanding between the domain experts and the technical people? …


Every time a popular book is turned into a movie, an outcry of disappointed book lovers follows. While some adaptations really are terrible, what often happens is many of those book lovers fall into the trap of expecting the movie to give them the same experience as the book. Movies and books are different art forms and if you’re approaching the movie as a substitute for a book then you’re bound to be disappointed.

Going remote

With COVID-19 pandemic forcing many companies to transition to remote work, there has been a surge in advice on remote work. Veteran remote workers are handing…


The first time I saw the abbreviation BDD I thought it was a miss-print of TDD (Test Driven Development), but it’s not. It stands for Behaviour Driven Development and it is a technique derived from TDD. The difference between the two is a bit nuanced and best felt when you start using some BDD tools. One such tool is PHPSpec. It will help you write better code and have fun in the process. Sounds good? Let’s give it a try!

There is a dog

Dogs are fun so let’s build a Dog game:

In PHPSpec you start by creating the specification first. …


“There is nothing either good or bad, but thinking makes it so”

A timeless comment on the human condition by Shakespeare’s Hamlet. It came to my mind as I was attending GOTO Online Bookclub featuring Kevlin Hanney.

The topic of the day was Udi Dahan’s Beware the share essay from the 97 things every programmer should know book. In it, Udi shares a story of his first job. Coming fresh from college, eager to prove himself, he looked for every opportunity to improve the codebase by pulling out shared code into libraries, only to find out during code review, that…


Creating branches in git is blazingly fast and having a bunch of them is pretty cheap. This means we get to merge them quite often. But how is a branch represented internally and what does it mean to merge them? Understanding how this works internally will help you understand why merge conflicts occur. Let’s dispel the magic.

Branches as pointers

If we visualize git’s commit history, each commit is represented as a node on a graph. Each commit has a connection to its parent; we can only travel from a commit to its parent(s) when traversing the graph:

We know in reality git…


What if I told you Morpheus never said: “What if I told you?” I know you saw that meme a thousand times but have you actually heard him say it in the movie? You didn’t, because it didn’t happen. Darth Vader also never said “Luke, I am your father” and Captain Kirk never said, “Beam me up, Scotty”. People keep repeating these “quotes” so we assume they are true.

Cargo Cult

This phenomenon is not limited to spoken word — it afflicts human behaviors also. Since software is developed by humans (for now), we come across it in software development. …

Zvonimir Spajic

Software Developer, @konrad_126

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