A flock of sheep in a green grass field. The sheep are a bit dirty, but all looking at you.

Do engineers dream of endless complexity and problems in their sleep?

Yes, it is a “funny” word play on the legendary sci-fi novel Do Androids Dream of Electric Sheep? The title of this article is something I have had in the back of my mind since very early on in my career and it has stuck with me.

Note! If you are offended by swearing, bad language and grammar you will have a blast reading this article as it contains a lot of it 😂

🌟Green field projects

The bare mention of the word makes people have a certain glow in their eyes and can almost see their pulses rise. It’s that mythical thing that you have heard about while making your way through an endless maze of legacy code written by what has to be some programming illiterate that came before you.

It is you chance to Make Things The Right Way. You have dreamt of this moment for so long and now finally you are to be part of such a project.

The architecture diagram is a blank canvas. You have heard the phrase “we will use the best tool for the job on this one” uttered by managers. Deep inside you know this will be great.

Let’s gooooo! 🏎

There is a project kick-off and everyone is super excited. Everyone has been reading up on what is The Latest thing to be using. The room (virtual or physical, it doesn’t matter) is buzzing and spirits run high.

Designers, product manager and programmers alike have all arrived at the promised land together and it just feels amazing. This time, we know We Will Get It Right.

Fast forward, the project might be in an ok or it is in deep 💩.  The outcome is not what I will be talking about here, it is rather the completely irrational way in which we go about setting up Something New.

Three steps for f**ng things up when starting something new

  1. Pick technology based on what looks good on your resume and your personal preferences
  2. Make sure you are ready for scale from the first moment
  3. Focus on ensuring the programmers are enjoying themselves

CV Driven Development vs “WE ARE SO F**KED” Driven Development

CV Drive Development (CVDD) is a thing, heck I’ve practiced it for years early on in my career. Why wouldn’t you? If you work on dead-end technology, that means you career is heading in the same direction. Naturally we have a tendency to gravitate towards what makes us look good.

In a green field project, you absolutely have to have a grinch onboard. Someone to ensure that the team are not going completely ape-shit in the candy store just because they can.

A green field project should be treated as a startup, meaning you have zero money. It should’ve been done yesterday and investors are on your case to shut you down. That makes for a _great_ climate to make technology decisions. Why you say? Because it means you have to be honest and focused. No more CDD or reading blog posts about The Latest Thing. It’s about shipping value so you’re not shut down tomorrow. Most people would then choose Boring Technology. You choose something that you know, something that will give you velocity from day one and that is simple to work with.

Google Scale Baby 🚀

A project manager or some stakeholder early on in the projects would usually layout the possible future. How this project will be a game change and that it will be critical for the business ability to grow in the future. It is intended to inspire and rally the troops.

Again, this is where you need a Project Grinch on hand. We all pretend we know about premature optimization, but let’s be honest we mostly use that as an excuse to skip things like testing, performance and security considerations 🤷🏼‍♂️ In reality, since this is a Green Field Project, we secretly are already at Google Scale.

We choose tools, frameworks and technology platforms which are often times months if not years in the future. Let’s face it you don’t need to setup a Kubernetes Cluster and create your own Development Platform from day one. In fact what you could do is to host the damn app on an iPhone 8. Because: YOU HAVE NO USERS!

Our Inner Engineer just can’t be silenced. We so desperatley want to do “what the big boys are doing” that we just can’t wait to get there. Which is why, especially on green field projects, we just go all out over doing everything. Be it the git repo structure & the pull request regime or the runtime platform you choose.

Green Field projects very quickly become the new legacy because we are not thinking about the context we are in. We are not considering what are the things required for the things right in front of us.

Developer Experience

The phrase has been abused by so many people with such a variety of agendas that I feel the meaning of the word is gone years ago. It is also a term hailed by Propper Engineers as the ultimate goal of any software development organization. If this is not your #1 priority, you are doomed. DOOOMED! As the art of typing instructions for the computer to run is The Most Important Thing. In reality it is never the most important thing, as it is always the business which is important. If that is not on track an amazing developer experience don’t get you anywhere but a new job for the engineers.

The Project Grinch would say: “Oh really?”. In order to ship value there has to be an effective way to get things in front of customers / users. I am not debating this fact. What I am sure of is that this should not be the ultimate goal to have ready from month one. I would say it doesn’t need to be there for years 1 or 2 either.  Again, in a Green Field project, we have a tendency to just loose it on this point. Because FINALLY we can set it up just right. We can have the quick builds, with the automated tests. End-to-end tests and integration tests. Feature environments for all branches. Database migrations with rollback. EVERY DAMN THING!

The task of writing the code is so precious and whatever small obstacle preventing us from doing this has to be eliminated. Preferably with something shiny and nice. Whatever the actual cost and whatever the increase in complexity, it needs to be done. Let’s do a mono-repo and then when that starts to hurt we will just add more technology on top of it. Something like NX (in the JS eco system) which sounds brilliant. We throw all the shiny tools in to remove ANY hints of friction to the sacred art of writing code (completely ignoring the added complexity that goes with removing said friction both short and long term).

Don’t get me wrong, having all this in place already _could_ be useful. However all these things also come at a cost which you might not want in an early stage project. Let’s say you have a feature environment setup ready, so why not Just Use It? Well, it might be that this setup requires you to do feature branches. Which effectively makes everything related to continuously delivering value to users harder (yes, I know you _can_ do CI/CD with feature branches too. What I am saying is that you probably should not).

A different approach would be to say: “scrap that, let’s do trunk based development“. You reduce the complexity in getting things shipped and you a healthy mindset of getting things out.

How to not fuck up

  • Ensure you always have someone who has no stake in having shiny technology on their resume
  • Ensure you have someone who knows that any projects success hinges on the business side of things first and foremost
  • Ensure you have someone on the project to tell the Engineers to “stop f**ing about”

You are welcome 🙇

A dark forrest during sunset with some light shining through

On being open to grow

All my “On..” posts are things I write from beginning to end without any editing or thinking about structure (so it’s like all other posts?). They are just dumps of thoughts I’ve had which I deem that maybe they’re useful for something or someone, so I’ll just dump it here where nobody actually sees them.

A friend of mine told me his friends reaction when he said he was starting to learn how to play the flute. They said: “why do you want to learn that now?”. What they meant was why are you, a grown man, starting to learn to play an instrument? As if that’s an outrageous idea and that it’s not something grown up people do!

It’s a really sad outlook if we’re not supposed to learn anything new in what in most cases will be half our life time! We learn a ton of stuff and then suddenly because we’ve gained responsibilities and have obligations we are to stop learning? This is a preposterous idea. Learning and changing is the most natural thing we do, so why stop?
I know some people think it’s too late to change and things like that. What I think is the case is that we gradually neglect and pay attention to our own willingness and openness to change. That’s why we stop, because our minds are closed.

You stop growing and evolving. One example is often see is music. You can choose to stop exploring and being open to new impulses, which means you enjoy the same music as when you where in your twenties. There is another option, which is to continue being curious and open to the idea that just maybe there is the odd chance of someone being capable of creating music you might enjoy even after you’ve surpassed the age of 35 🤷🏼‍♂️ It requires a mindset of being open to new impulses and challenge what you belive is good music. Engaging and making an effort to understand something new.

Many new parents find themselves in the same position, having suddenly to deal with the fact that their lives are forever changed with the arrival of the infant. You can choose to constantly look at what you are missing out and the life you used to have, constantly looking for opportunities to get a tast for “the old life”. I believe this will only make you miserable as that life will never return. Instead one could choose to be open to the new things that your life now offers you. This huge change is a great opportunity to grow as a person. Learn new things about yourself and also be open to all the learnings your child will give you. If you pay attention, you will notice that the child is learning you just as often as you are learning it things.

Person with long hair in a dark room looking through a window with light coming through it.
Photo by Mario Azzi on Unsplash

What’s the key difference between someone “stuck” and one that evolves? It is, I think, a willingness to seek out new impulses and to be open to the fact that you might be wrong in your current assumptions. In order to grow and learn you have to be open to receive new impulses. It means you must reflect on your view points, you must and should dare to change your position on things.When someone comes to you and say that you perhaps could have solved something in a different way. It’s natural to go in defensive mode and try to explain why, that you didn’t intend it that what and you explain all the reasons why you did what you did. I’ve learned that this is not how you receive feedback. First step towards learning from feedback and input is to listen, like actually listening. Take in and focus on understanding exactly what the person said, without judgement and without trying to defend yourself. In order to achieve this, I think it’s vita to be open to the fact that you might have to change or adapt how you do things.

An office space with a long table with chairs next to it.
Photo by Jose Losada on Unsplash

Starting out in the IT industry you work on the ground floor and all you have to do is to show you know the craft. Gradually you’ll be expected to take into account things outside the realm of just the one thing you know. The progression from junior to senior is not about years, it’s about widening your perspective and to evolve you understanding of what it is that you do. Often a good senior will get offered the opportunity to lead.
This is often done without any real formal training or coaching mechanisms in place. A good crafts person is somehow automatically a leader.

This fallacy leads to many dysfunctional teams and some times destroyed careers.When accepting the challenge to lead you must be open to change. Everything you do is different when you are a leader and you have to be able to adjust your thinking and behavior. You have to put in the work to understand the power dynamics between leader and worker. In order to help your workers grow you have to learn how to activist listen to them and to turn  that input into actions. It is an entirely new job, it’s like going from a car mechanic to becoming a nurse. The requirements of you as an individual have completely changed and you have to change. You have to be open to the fact that this will change you as a person and you’ll be a different one on the other side of your new position as a leader.

This isn’t only about the classic worker-to-leader scenario where openness to change is essential. During the Covid pandemic a lot of people have had to suddenly work from home. This is a great opportunity to learn new things about yourself, if you are open to change. One option is to dig your heals in and try to mimic  “the good old office vibe” in a remote setting. We’ve all seen that it does not work and people just become really tired of the endless video calls. A different approach is to look at working remote as an opportunity to learn something. All trends point towards the new workplace being much more duos and flexible, so instead of fighting against it you should embrace it as a learning opportunity.

On being a –insert title here–

The last five years I have had the privilege of having jobs with awesome titles like “Front end architect” and I was even at one point a CTO. Being in such positions enables you to have the impact to see ideas materialize. You also have impact on how others do their job.

About two years ago I became the leader of the front-end core team at Finn.no after having been the front-end architect (the company decided to remove the architect role). It was perhaps “a step down” in terms of status and things, but it was several steps up in terms of fun and learning. I got to feel a lot of the pains I had seen as an architect. I thought that I had a pretty good idea of how things worked while being The Architect. I was wrong.

Having spent two years in The Trenches I see the ever widening gap between those doing tasks and those who lead through middle managers I’m all company that continued to grow. I know you need to have a different perspective as you move upwards in an organization. However the problem comes when the people in these positions try to “do what’s best” for those doing the job.
If you haven’t spent time on a team doing actual work for more than two years. You should be disqualified from making decisions on how they should work. You should realize you’re no longer qualified. This is what I have learned these years being a team leader.

I see this most clearly when we reorganize or have some initiative come from the managers. They will structure efforts according to their world view. Which is no longer in touch with reality of how teams work. They will follow corporate matrixes that make no sense at the bottom level. Create boundaries and silos which only exist in the organization charts. At the team level there is no us vs them. There’s only “how the fuck do we survive this shit”. Teams need to collaborate relentlessly with whoever has the information, skills or decision making power to get a task done. Teams don’t have the luxury of leaning on corporate structures, they just need to get stuff done to provide end user value.

I urge everyone leading through middle managers to step down for a month or two. Spend time doing actual work at a team level. You will learn to see things from a different perspective. You will learn what you thought was.tru to be untrue. You will also be a much better leader after doing this.

I wish I knew this back when I was in high places. I will try not to make this mistake again. I apologize to all those I have wrongfully micro managed or forced to do stupid things.

Space & Time

This is not about aerospace or getting people on Mars (that stuff is easy). It is about how to create an environment where people help each other out. If you maximize utilization. Set absolute deadlines. You set up your team to be self centered, stressed out and in a mode of self preservation.

If you are in an organization were teams are expected to collaborate and share extensively, you shouldn’t do any of the things above. If you want sharing and collaboration, that is something you have to take into account when planning. You can not have your cake and eat it.

By giving your team time and space, you are more likely to have a team that aggressively shares and collaborates. It is no silver bullet, but without time and space the team is not in a position to fulfill the objectives you set out.

You can not blame teams for not sharing or collaborating if you create and environment where it is not possible. That is tittel on you as a leader. You are the one

This is not about aerospace or getting people on Mars (that stuff is easy). It is about how to create an environment where people help each other out. If you maximize utilization. Set absolute deadlines. You set up your team to be self centered, stressed out and in a mode of self preservation.

If you are in an organization were teams are expected to collaborate and share extensively, you shouldn’t do any of the things above. If you want sharing and collaboration, that is something you have to take into account when planning. You can not have your cake and eat it.

By giving your team time and space, you are more likely to have a team that aggressively shares and collaborates. It is no silver bullet, but without time and space the team is not in a position to fulfill the objectives you set out.

You can not blame teams for not sharing or collaborating if you create and environment where it is not possible. That is tittel on you ad a leader. You can create an atmosphere were the team can fulfill what’s expected of them. You can’t blame them, when the environment they operate in is toxic.

An ear to the ground

I I’m have interviewed for higher management positions during my career. One question which pops up in all of them is this: “do you have experience in leading through middle managers”.
A fair question one would think given that as a higher position manager you’ll have some other managers below you. However, there is one thing I’ve seen many places which too many higher level managers miss. That’s the ability to keep in touch with what’s happening on the lowest level. To me that should be the number one question interviewing for higher level manager positions: “how do you know what’s going on in the lowest level?”

The answer to this question should, in my opinion, be what determines if you’re qualified. A false answer would be “through my lower level managers”. I have seen so many people disappear into the fog of upper management. The air up there is thinner and the details blurry. Humans become numbers in columns. The product becomes an abstraction consisting of stats and fiscal figures.

Shoes like under cover boss clearly highlight that people who run stuff don’t really have a clue what’s going on. Their reality is like your Facebook stream: curated, delayed and filtered. As a higher level manager you need to have “an ear to the ground”. Weather you’re the CTO, Chief of HR or a upper middle manager that is the most important thing. Otherwise you’ll have no way of being proactive and noticing issues before they become huge problems. You’ll also gradually loose the respect you once had from those who used to be your peers as you’ll be disconnected from their reality.

I am a team lead and this is the thing I’m trying to focus on as much as possible. To not drift into that place where it’s all abstract and the big picture. I need to see individuals and stay in touch with their work. Be engaged and proactive to try and help out before things become too complicated.
I say I try, because I would not say I’m succeeding 100% with this today. As a leader I have tons of areas of improvement, but at least my goal is to have an ear to the ground like Lucky Luke in the comics. Too hear if there’s a train or a buffalo herd coming.