Greenfield Dreams
In 2006, as I was starting my journey in software development things were different. Frameworks wore easier to use, languages were more straightforward, and applications just came out from under my fingers one by one. Was I way more productive or my memory is playing tricks with me?
A decade ago we didn’t have cloud computing, the vast variety of courses for any level, and even things we take for granted now like StackOverflow. With so many enabling factors for making your next tech startup why I feel that my programming is becoming slower and slower over time.
Reality against perception
One of the most significant shifts I have noticed in the last decade is how frequently new tech is becoming part of our awareness. As we more and more become connected to the global knowledge network(aka internet) every new tech becomes part of our world within hours after release. Moreover, with every new programming framework, language, or a library we hear the same slogan in different variations — faster, easier, better.
So as new versions come out, it excites our imagination. All the tech demos where things work without glitches makes us want to be just like that — the superhuman who can code without a single mistake. In those dreams we start all over again and THIS TIME we build it right — we use the best tech, follow all the best practices, and make it fast, easy and better than ever before.
Next day we wake up and go to our work, to find ourselves paralyzed by legacy applications and not working code instead.
Frameworks don’t work as expected, demos which worked so perfectly in a video now fail on our machine when we try to replicate them. Then we look at our project, and we realize what the problem is:
This is the shitty angular app if only we have used React
There are no tests in this application that is why the quality is shit
The design of this app is crap as previous developers were stupid
Those are the exact thoughts which popped up in my head at every project I worked.
I thought it was just me until I witness every single student I teach go through the same phases of their project. Even so, their capstone projects go for only 3–4 weeks, somewhere halfway through the project it hits them. The project turns from the source of excitement and inspiration to a source of shame and chore. It gets more and more complicated, new features are getting harder and harder to add and old features stop working for no reason. They, start dreaming about finishing the project and starting the new one, where they can “do things right, this time.”
I tried to help them by giving them tools like functional programming, unit testing, and design principles. However, none of them seem to help to elevate the mid-project stress. That’s when I started to question myself and look more in-depth.
In my opinion, the problem lies in our brain, with our perception and difference of our perception from expectation.
Reality check
Things in reality are complicated not because something is wrong about ourselves — it’s just the nature systems to become more and more complicated over time. Complexity of a system increases doesn’t matter how hard we try to keep it at bay as system grows, the more things our system handles, the harder it become for us to comprehend. And things start to slip — we hack one function, miss a test here, copy/paste some code from the internet just to make it work somehow. We want to make it work somehow, not only for the final result but also as it starts to defines us, we become so associated with a project that every delay feels deeply personal.
When I would tell my client:
I can do this in two days
A week later I’m still struggling to make an API work; I feel that my self-worth goes down very quickly. As we spend more and more hours every day thinking about the system, over time inevitably our brains start developer attachment to it. With this attachment we start to play the blame game:
if not I can use framework X
If only I can avoid library Y
Our imagination had this perfect system in mind and again somehow we ended up with this monstrosity. Then our brain naturally reacts to pain by disconnecting us from it and starting to create dreams of some other place, and we good deep diving into the new tech with a hope that NEXT TIME things will be way better.
The Stories We Tell Ourselves
Remember, in those fairy tales that we tell our kids things always end up good at the end(expect Grim Brothers stories). As we grow up we start to see how those stories are far away from reality and we think that we let go of them. Though, what are those stories we see on TV, at conferences, in tutorials? Are we just feeding ourselves the same fairy tales “perfect technology to build my dream”, “perfect car for a road trip”, “perfect phone to stay connected with everyone, like never before”.
Like never before
This phrase drives our desire, watch Tim Cook using it dozen of times during the WWDC 2018 Keynote. The desire to do things better, easier, faster which all compare to current reality is just so way better. Reality which is not what we have imagined, reality which is “not perfect”, ordinary and grey compare to fairy tale that we have been sold.
So we run to buy a new phone, use a new library, buy a new car — do anything to make current reality better. It does, for a couple of days, and the cycle starts all over again. Though, with everything in our life things are never perfect and in search for perfection we can quickly lose ourselves.
By buying into perfection as the essential component of our life, we buy into the fairy tales that we tell ourselves. The fairy tales of the future which exists only inside our head.
Perception change
One thing that we still have the most control over is our perception of things. The view that tells us that our existing project is shit, that the next one is going to be better. It might be an old legacy java project, and you are not working on the latest sexy tech, and let’s look at the other side of that.
There is a reason why the old legacy java project still exists — the value that it gives to its users. Remember, the first days of building a project you keep dreaming about how your it is going to change peoples lives, what if it does already? That old legacy java project is giving lots of value to many people, and we refuse to see it because it’s not sexy enough. Because, it’s not new, not exciting and not significant for our career.
When I ask my student “why do you want to learn to code”? I hear they desire to create things to change not only their life but the life of other people. That is what you already do if you are working on a legacy project.
It’s easy to forget it while watching another sexy demo of a new version of React on YouTube that our original focus was not to “use React,” it was to bring value. What if we can see our systems from the perspective of value that we bring to ourselves or other people,