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 🙇

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.

Relax, it’ll be alright

Photo by https://www.flickr.com/photos/39877441@N05/6247115482/

Photo by https://www.flickr.com/photos/39877441@N05/6247115482/

I was incredibly fed up waiting for the chance to make a living writing code. Since I was very young, I’d wanted to program computers for a living. The years it took me to get there felt like an endless wait of learning things I didn’t care for. Looking back though, the learning I didn’t care for was perhaps the most valuable. Anyways….
When I finally was given a job as a programmer I was living the dream, my dream. I was the guitarist who got a hit record with his band, the soccer player who signed his first professional contract, etc. In other words: it felt pretty damn good!

As a person starting a career in programming it is easy to feel you’re coming up short. Especially these days when news, ideas and The Next Thing is only a social media post away from you. We measure our own lives and achievements against those portrayed in the media. Needless to say, almost everyone of us falls short in such a match-up. It’s not because we lack dedication or passion.

Why aren’t you making the next killer app?

I get this question every now and then. People who aren’t deeply involved in our industry ask me this. A perfectly reasonable question in their mind. However it’s kind of like asking the janitor at a hospital why he’s not curing cancer. After all he works in the health industry. OK, I’m exaggerating just a tad here. But, it’s questions like these many end up measuring themselves against. Why aren’t I a multi-billionaire? Why didn’t any of my startup adventures work out with me sitting on Caribbean island drinking from a coconut? Why haven’t I written The Framework which the Web relies on and everyone loves? Having never been even close to accomplishing any of these things, does that mean I am a failure?

You should redefine success

I have made a living being a programmer since I was in my early twenties. Fortune has it that I’ve started a family during these years. I live in a nice place where many of my neighbors are now my friends. It is close to the forest and the outdoors, which are both important to me. At work I can be who I am and it has many interesting challenges. I have two healthy children and an amazing wife. Is this success? For me, this is the most success I can hope for. I’m not going to create any killer apps or businesses that generate gazillions of cash. Success to me is to do what I love and be happy with what I have right now.

Being average is being normal

I’m never going to be a superstar coder who’s renown for my brilliant libraries, framework or thoughts about programming theory. My coding skills are average and I try to make up for that by having stamina and determination to never give up. You know what? Most in this industry are average just like me. It’s perfectly fine to be average, mediocre and one of the herd. You don’t have to be the Next Big Thing before you’re twenty five. Settle into a stride which suits you, take your time and enjoy your work. Don’t freak out because “everyone else is being amazing and I’m not”. The idols and stars we worship are exceptions, not the rule.

I am not “Silicon Valley material”

These days I don’t make it a priority to attend meet-up’s, I do however attend my kids soccer practice no matter what. This year I won’t attend a single conference, but I try to be at all school gatherings. I don’t think I’ve read more than a handful of programming related posts this year. If it hadn’t been for the fact I update a website on Github, my punch card would probably be empty. Does this make me a bad programmer? Surely I wouldn’t stand a chance in what is seen as the Mecca of software development, Silicon Valley. I don’t stop doing some of these things because it’s impossible for me to do it all, I just choose not to. If you’re able to all of this, great! If not, that’s also great. It means you’re being conscious about how you spend your time.

“Kill” your idols

In our industry we don’t worship people who live my kind of life. Our ideals are framed, still, by the idea of meritocracy. You should live, breath and shit coding every living second on this planet. Any spare time should be spent learning a new language, or better, write a new language. Not only that, but you should give talks and do a video blog. At a minimum you should host a meet-up, but better is to put on a conference.
Needless to say, very few of us measure up to these high expectations of what a good developer is. If you do all these things, you are amazing! If you don’t, you’re still amazing!

OK, listen up

If you’re starting out as a programmer, please don’t rate yourself according to the rules of meritocracy. You are so much more than the green squares on your Github punch card. The number of talks on speakerdeck.com. Success can be very different for you than what is portrayed in the media. Make it a priority to define what success is for you in your own context, it will help you find your own path.

Most importantly, just relax. Breath and take it easy. You don’t have to do all the things at once your first years in the industry. It’s perfectly fine to take things in your own pace. You’re a valuable programmer even though you aren’t running yourself to the ground. Everything doesn’t have to materialize itself within your first ten years of working. Everyone is different, we all learn and grow in our own pace. Don’t beat yourself up if you don’t measure up to the idols and ninja-super-rock-star-people. Those idols don’t actually exists, it’s mythical stories told bye people who need to exploit passionate people. Having a slick online presence and a killer rep in the business are superficial and very temporary.

Remeber, breath and relax

Focus on things that matter in the long run, and slow things down. It’ll be fine in the end, I hope. These things I’ve talked about are really existential questions more intelligent people have discussed at length before I wrote this. Finding happiness in the moment right her and now can be a hard. I struggle with it constantly and need to remind myself of what matters to me the most.

To read and learn more about many of these things I find reading The Book of Life website really interesting and it triggers me to think and evaluate my own perspectives.

Remember, breath and relax.

Thanks to Alexandra Leisse for input and inspiration.
Originaly posted on Medium.

Cross roads

Photo by https://www.flickr.com/photos/greenmanyyz/

Photo by https://www.flickr.com/photos/greenmanyyz/

I am fast approaching 40 years old which is pretty fucking scary in general, but even more so when you work in software. No more am I allegeable for jobs, as I’m no longer in a place where I am viewed as something for the future. These amazing and brilliant young people coming through are just so much better than I ever was. It’s a young people’s game, programming.

I have many friends who are of similar age and we share a common scare. We’re only half way through what our rulers hope is our professional career. This is a pretty scary thing, I’ve had one type of job since 1998: programming stuff for the web. Is that what I’m doing for the next forty something too if I were to have the fortune of living that long? We’ll have to work until we die as the Norwegian public pensions will be all gone. Is a move into the management tier the only option?

Full circle

Already we’ve come full circle on so many things. Everything with cloud computing is just a repeat of ideas coming out of time sharing and similar concepts from the 60-ies. The Web vs Native war is just another iteration on Web vs Desktop which raged during the start of this millennium. Listening and reading the discussions held by the new generation of thought leaders you realize that everything they see as new and amazing really just are iterations or increments of things done a while ago. The dilemma is this: how can you keep being interested and stoked about new technology when everything is just an iteration of what you’ve seen before?

What next?

Most people seek refuge in management, either as middle managers for teams or higher up. Programming is by many viewed as a young persons game, where you’re expected to work insane hours and use every breathing minute learning new things. Luckily this notion is beginning to fade and people realize that burning out all programmers and scaring them into management is a bad thing. I think the only way for programming as an industry to evolve is by making sure at every level we have a mix of newbies and veterans. Companies with more age diversity have the opportunity to actually learn from past mistakes, but also add the spirit of youth to push things forward. I hope..

Luckily I have worked at a company with a little bit of diversity when it comes to age. Seeing how some of my elder colleges are passionate as twenty year olds fills me with hope that you can actually keep doing what you love for an entire career.

So aging, funny thing. Amirite?

Gallery

On work

The first record of me interacting with a computer was a picture of me when I was three years old playing the game Pyton on a Tiki 100. I have always known what I wanted to do in life, I wanted to be a programmer and create things using computers. School was just an endless wait before I finally got to do what I wanted at the age of 19. That was when I finally got to Molde College where I could learn to program.

I am very much blessed to be able to make a living doing something I would do as a hobby if it wasn’t my job. I love what I do. However that doesn’t translate into loving my job. My job is the thing at a point in time that pays the bills and enables me to provide for my family. It is a business relationship where both parties benefit. My love is for what I do, which is being a programmer. 

The creator of the Solid Snake game, Hideo Kojima, said something I can relate to which was something like “I dislike all the work needed to create something” (not an exact quote and I can not find the original post as it was some ten+ years ago). That is exactly how I feel, that sometimes there is an enormous amount of work required just to get to create something :)

Original: http://www.flickr.com/photos/truthtodare/6916904929/