Bridge with a lot of fog on it

Fog Of War

Often times when working with developing software you get this urge to think “if it can do X, what about Y”. When thinking this you get this nice feeling inside and a sparkle in your eye. It’s the feeling of being A Proper Engineer. As the stereotype of one is that they are capable of future sight and gifted with the ability of crafting the most amazing designs up front by just Thinking Right.

We have this in us, most of us, I think. This longing to live up to this ideal. Even when I know it’s all a blatant lie and that Proper Engineers™ Stack Overflow just as much as the next person. Fighting this urge is very important, as it means your setting yourself up for iterating and leaving the door open for the shocking possibility that you might be working on The Wrong Thing 😱

Working in a team, you have some tasks in there here and now which are quite tangible. Then there are people taking about possible future enhancements and next steps. As a senior engineer you have the responsibility to ensure you stay on the here and now as often as possible. Pretend there is a Fog Of War around you as of in a computer game. Instead of constantly thinking about what could be in the fog. You should ensure the team is just gradually nudging forward uncovering small pieces at a time. Ensure the team has their focus on present and near future topics and then just keep an eye out on what’s lurking in the outskirts of the fog. This is what good engineers does and what seniors should help newcomers to embrace.

What I just talked about contradicts the urge mentioned in the beginning. Our longing for being Proper Engineers™. Embracing the fog of war and being comfortable with uncertainty is a far more important skill for a developer than The Future Sight of the Accomplished Engineer. Our surroundings change frequently and thinking too far ahead is both distracting and it often ends up being wasted time and money. As by the time you think you are about to embark on The Next Thing™, priorities change and you’ll never see the next thing.

Colorful wires going into a circuit board.

On reducing complexity

This is a common challenge once a company has built enough “stuff”. The burden of maintenance and the difficulties in refactoring makes one cry out for “Simplicity, now!’. A common perception of reducing complexity is to “dumb things down”, this is a reaction to the tension of it being difficult to untangle things. It’s often a good idea not to act on this tension, but look a bit further at the issue at hand.

Before even starting to consider doing anything, it is worth while to take a step back and analyse what exactly is complexity. People working together sometimes create established truths and create a shared understanding of how things are. Not based on research or analysis. There are multiple forces at play when a team starts talking about “too much complexity”. It can be a failure to deliver on their promises leading to a sense of failure and a need to place blame outside themselves. In companies with a hierarchy teams often create a lore of complexity as an explanation of why things are not going as planned. In the post The hidden meaning of complexity in the context of software development I talk about how the word complexity can mean something different entirely.

How to go about changing things?

One way to reduce complexity is to have to deal with less. Are there parts of the application which hardly ever changes? Would it make sense to split out isolated behavior from the main build? When doing this you can often get the counter argument of “we don’t want micro services!”. True, splitting out into separate might reduce some complexity and focused services that hardly gets deployed are great! However you can also isolate code which hardly change into libraries you compile in, reducing the number of things to build.

The misconception of thinking that reducing complexity always means removing or reducing things. You might actually reduce complexity by embracing new paradigms and undertake larger changes in your architecture. Doing this might require you to acquire new capabilities and learn new things, however this is not the same as adding complexity. Learning and evolving is always a key part of software development and should be just as natural to do when trying to reduce complexity.

Let’s say you have monolithic API which has grown out of control with long build times and a lack of efficient horizontal scaling, one way of reducing complexity could be to make drastic changes. Perhaps you need to insert a message queue and embrace an event based architecture? This might seem counter intuitive to reducing complexity , as setting this up is not that simple. However I would argue that often is this planned complexity preferable to the accidental complexity of a module which has grown out of control.

The means of production

When rescuing complexity an essential task is to look at the means of production, which is software is the delivery- and runtime infrastructure. Whatever path you choose in order to reduce complexity, it has to start here. If you continuous delivery system is fragile, or non existing, that is a place to start. If your infrastructure isn’t possible to replicate without manual procedures, that’s a thing to fix.

The reason for this is simple, no matter what you’re looking at doing it’ll be a nightmare if these things aren’t running smoothly. It will greatly reduce the types of things you can choose to do and it will also increase the time it will take to dig you out of the hole you are in.

Person standing in the entrance to a cave, with the light behind them. The lights is purple.

When opinions and theories are communicated as facts

This post contain learnings from over twenty years working as a programmer and close to half a century living on this planet.

I met my partner over a decade ago, not long into our relationship we had a conversation: “why do you say things as if you know them, when you don’t?” I would usually reply “Of course I don’t know these things. I’m obviously guessing, you should know this”. When I first was confronted by this I felt misunderstood and even a little attacked. Why would anyone assume I’d speak as if I know it all?  I do not feel like I know better than most people, I am just very good at having opinions. My partner said that the way I sometimes say things makes other feel silly or make them loose confidence on their own beliefs. It’s not a good feeling. Again I try to defend myself saying “why would you assume I’m that kind of person? I’m not a know it all besserwisser!”.

We’ve had this conversations many times since, as this is something which is hard to shake for me even if I try to. This thing of speaking with authority, even if you’re just guessing. I used to say it was “because of my days as a consultant, when this was a requirement”. This was a very convenient and comfortable story to tell. It was circumstances beyond me which made me behave this way, it was not my fault.

Years have passed since this first conversation. During that time I have taken the opportunity to learn from and talk to many people. I have learned about privilege, I have learned about empathy and many other subjects I’ve never encountered in school or college.
I have come to understand that it wasn’t the “consultant in me” which made me speak a certain way. It’s the legacy or centuries of white male privilege echoed by me. The way I can casually say any statement without having to think twice. Not having to think it will have consequences for my job. That it will make others think less of me, or that there will be repercussions.

I still revert to talking about things as fact which are hunches / ideas. It takes a long time  to correct this behaviour. Luckily I have people in my life who help correct me. I’m able to see when I do this and sometimes I manage to add “I think” at the end. However there is another thing which is also started to happen while leaning this, it’s  that I see so many of my peer do this as well.

The consequences

This way of behaving can have serious consequences, affecting peoples mental health. Especially in scenarios were there the balance of power is unequal. The person on the receiving end will moderate themselves or just not say anything. They start to doubt themselves or  simply accept what is said as truth without any further considerations. If this continues over time, the person with the power will slowly grind down others around then. Their belief in their abilities will deteriorate when in the presence of the person. They feel as if there’s  not enough “air in the room” for them to contribute. The person with the power seldom see  this and they start to feel that no one else can take their place because nobody speaks up, so they speak even louder. This is a self enforcing dynamic which slowly makes all collaboration and dialogue grind to a halt. As the person with the power gets more frustrated with “nobody says anything”, the situation ends up in a miserable deadlock.

Being on the receiving end of this behaviour over longer periods can cause serious problems that will take a long time to work out. The symptoms can be similar to that of people being bullied or having been in abusive relationships. Their personalities can change completely and it can lead to them not being able to work. How do I know? It happened to me and I’m still dealing with the aftermath, years after it happened.

The consequences for a company with individuals who has this behaviour can be severe. Important questions will not be asked and discussions will not be had. Because of the fear and dread of being belittled and made feel silly. These fears are the consequence caused by this behaviour. In the end people will end up leaving and there will be a bad atmosphere in the company until the matter is addressed or resolved in other ways. These sort of dynamics leads too many people leaving our industry through no will of their own, just to escape.

If you feel that this might be you. Or you maybe recognize some of the reactions from others, then here is what I suggest: work on yourself and find someone you trust who will give honest feedback to guide you. It will take you a long time to shed this behaviour, but it can be done. All it takes is for you to want to change. Add “I think”, “this is my opinion” or “I’m just guessing now” to certain statements.

It opens up the space for others, it shows vulnerability and empathy. In other words it make a world of difference just add these simple things to statements you make.

It’s takes some effort and introspection. It’s more hassle than just blurting things out. It might even be less efficient. However it is 100% the right thing to do towards your fellow humans.

Featured image by Luke Leung on Unsplash

Image of wishes worshippers write wishes on small wooden plaques, called Ema, and hang them for the spirits to receive.

On always assuming best intentions

The title of this post is a phrase often repeated in the onboarding process at my current company (and probably many others too). It sounds like a pretty straight forward thing doesn’t it? What kind of person would not automatically do this? I am afraid I’m one such person, and there is a reason why.

Once in my career I was bullied at work in a very subtle way for a long period of time. It was not obvious and I did not realize its effects on me until I was in pretty bad shape. The road to recovery was long and I think I won’t get completely over it. There are still times when my instincts kick in and I go into “protection mode” by some comment or a certain behavior. I have learned to recognize these feelings for what they are: ghosts from the past. However these things still affect me to this day.

What does my scars from bullying have to do with the initial quote: “always assume best intentions”. As I see it this statement comes from a place of privilege, by people who probably haven’t gone through similar things as I described earlier. My bully did not set out to bully me specifically (I think), having “no bad intentions” did not prevent this person from causing harm. 

The statement “assume best intentions” is a bit similar to “don’t be an asshole” when it comes to how to codes of conduct on how behave in certain spaces. The problem with this statement, is that it ignores the unintentional assholes which cause a lot of issues. The same thing happens when some people use the phrase “assume best intentions” as an excuse to blurb out whatever they like without really taking into consideration the recipients or the current context. You can only expect people to assume best intentions if you have put in the work to build the trust and that trust has been built up over time. 

I come prepared

Photo by Harry Grout on Unsplash

Even in a welcoming and friendly environment where I trust people, I can still have those flash backs to past experiences.I react to comments or feedback in a way I don’t like and I get those old feelings back. In order to cope with this, I try to be vigilant when I react to comments. I pause, step back and try to see if this is “that old feeling” from a bad period causing my reaction. If it is, I acknowledge it and move on. 

Certain things spark these feelings to occur more than others. Programming sessions with many people is a stressful event and does bring back those feelings of uncertainty. It used to feel like a battlefield or a test where I felt I was destined to fail. When I go into such sessions today I prepare myself mentally on the fact that I will have to deal with these emotions and know that I have to put to the side.

The road ahead

I am able to assume best intentions, but it’s only through working with these difficult feelings I can do it. It’s not always easy, but it’s part of me and I can use this knowledge to perhaps help others. Having had to deal with workplace bullying has broadened my horizon.

Being open and transparent about this is also important. By being open I can put words on feelings that others are experiencing, helping them realize they are not in a healthy work environment. This is the positive side of working through my own bullying experience: helping others.

Photo by DLKR on Unsplash

Blocks with letters on them spread out over a table.

On words

I had read the term many times on the Internet from people who’s been vocal on certain topics which for different reasons turn out to be controversial.

Gaslighting

https://en.wikipedia.org/wiki/Gaslighting

I encountered this term for the first time when I was being vocal about an IT conference in Norway which I thoughts had a highly inappropriate name (post in 🇳🇴 Den Norske Dataforening sitt manglende gangsyn) . During this action in trying to get them to change, I was exposed to this behavior for the first time.

When I say first time, that’s a guess, as before this happened I didn’t know there was a word for this. Luckily I had someone by my side who, sadly, had a lot of experience in these sort of things. She helped me develop a vocabulary for what was going on. I didn’t know what it was, just that the situation was very uncomfortable and I didn’t know what to do. Without the guidance and help from someone who had words to describe what was going on I would have been lost and probably made a lot of mistakes and failed to grasp the situation.


Having experienced the meaning of this word, gaslighting, I took it seriously and started reading and digging deeper on this topic of manipulation. Slowly developing a vocabulary and a frame of reference for which to interpret what had happened. This work has been very valuable when I have found myself in similar situations, lost without the words to help me describe what I was experiencing at the time. The technique of gaslighting is not just something which happens during discussions on the Internet. Once you become aware of it you will see it in public discourse and also in your own work place. Using your knowledge, on subjects such as this one, to help others better understand their situation becomes a natural thing. You want them to be empowered to find the best way for them to deal with their situations.

Improved communication with a larger vocabulary

The power of words also applies to the art of engineering. One of the things you will notice as you have spent years in this industry is that your vocabulary grows as you go along. You can choose to use this power for good, such as improve the quality of communication. However, there are also ways to use this newfound power to alienate and put up gates preventing others from participating. It is entirely up to you how you use the power of words.

I remember being introduced to the concept of refactoring early in my career. It was mind blowing at the time as up until that time I would just change things and make random improvements. Going about changing my code using a vocabulary others could relate to and understand helped improve the quality on conversations about code. The word refactoring has been deluded to mean “change random stuff”, however it was defined as this:

Its heart is a series of small behavior preserving transformations. Each transformation (called a “refactoring”) does little, but a sequence of these transformations can produce a significant restructuring. Since each refactoring is small, it’s less likely to go wrong. The system is kept fully working after each refactoring, reducing the chances that a system can get seriously broken during the restructuring.

https://refactoring.com/

By using the terms and words outlined it enables effective and clear communication to those who share this vocabulary. It means you can spend less time describing the intent and the objective outcome, as it is implicit in the name of the refactoring. A senior developer would use this language, but in the presence of less experienced people they would take the learning opportunity to help them learn the words and their meaning. To use the power of words as a tool for education rather than gatekeeping is essentially what separates a mature developer from someone who is in it for their own benefit only.

In closing

Words carry meaning, power and the ability for you to easier grasp your current situation. Establishing a vocabulary is an essential part towards learning more about something. This is the same in all walks of life. Acquiring the words to best describe things within a domain enables you to gain a broader and deeper understanding. It is the first step enabling you to learn more.