Despite modern opinions, thinking that having no plan and merely living by the day is equivalent to freedom is a dangerous fallacy to hold on to. Freer is the man who chooses to walk from east to west than the man who happens to. Freer is the developer who takes the lead on their own journey than the one who is carried around like a bottle in the ocean.
I am a big fan of the philosophical topic “Positive vs Negative Freedom”. The Stanford Encyclopedia of Philosophy describes it as:
Negative liberty is the absence of obstacles, barriers or constraints. One has the negative freedom to the extent that actions are available to one in this negative sense. Positive liberty is the possibility of acting — or the fact of acting — in such a way as to take control of one’s life and realise one’s fundamental purposes.
Put in other words, being a free developer is not about finding the perfect job and have no difficulties to face whatsoever. It is, instead, about developing such a character that allows one to set and pursue a path while dealing with and getting enriched by external obstacles.
The question is fair: why should I set and pursue such a path? Why not just follow whatever pops as interesting?
In case you don’t care much about your career, you probably think it’s pointless to keep reading. I’d say this is especially important for you.
1. Track progress
Imagine a sprint without a goal, or even without any overall set of essential tasks to be done in the next two or three weeks. How can one judge the progress and success of such sprint? One can’t.
By having a set of concrete milestones you want to pass through, you will be able to look back at your year and judge how far you got.
You can also see it from another angle. Having such a plan will allow you to identify periods of regression or of flat failure.
Being able to track your failures or regressions is not a minor thing. You will start to see which roads are dead-ends or bottlenecks for you and you will learn incredible amounts about yourself and your limitations. It opens the door for improvement, for polishing yourself or maybe even your plan, something that would hardly happen if you have no set path at all.
When you define your path, a set of values and interests will emerge, either implicitly or explicitly. These are the backbone of how you see and want to look at yourself progressing through the years as a professional.
By committing to them, you will be equipped with a sort of moral compass that will guide you through times of distraction and temptation. For instance, once you define the goal of becoming a Haskell developer, then those Linkedin messages offering you a job using the latest new shiny JS flavour or working with the same old Java for more money are nothing more than distractions of a superfluous nature.
You will be able to say no because you now know what it is that you want and value and what is not. Moreover, when you find yourself in a dead end, you will have the capacity to judge alternative paths that you have predicated without losing it all and sell your soul.
Something I never understood was seeing developers willing being assets of recruiting companies. Literally, you are a like a rentable hammer used where, when and by whom it happens to be. You go where they tell you to go. You sell your soul and make yourself deprived of control over the journey you take.
Lack of control is agreed to be one of the most significant causes of stress in one life and career. Being complacent about it is giving away not just your job but potentially your health as well.
I don’t mean to sound judgy, and I definitely don’t think that’s my position. In many other industries, complying with such a structure of recruitment companies is almost necessary if you want to at least have a job that provides with enough money to pay for your rent. That is not the case in our industry, though.
Having a plan will grant you a purposeful attitude and view about yourself and your journey ahead, which will make you respect and value yourself and the decisions you have to make. Having someone else (or the mere chance) doing it for you becomes naturally unacceptable.
Setting a path
When I was at university, I knew there were a couple of things I absolutely wanted to work on. It was something like the following list:
- Develop a mobile app
- Develop a web app
- Work on distributed systems
- Have an active role in the design of the software I’d be building
- Find a meaningful job
- Seek a healthy work-life balance
You see that this simple plan was somewhat broad, but it set boundaries and implied some principles and values:
- I wanted to try different sectors of software development
- I didn’t want to be stuck in one place and within one technology
- Find a good environment and meaningful projects was more important than finding the most ~boring~ well paying job
- I would not work for companies with a vision and mission I didn’t identify myself with
- I wanted to learn more about the high-level side of software developing and have space to have influence
- Meaningful work was vital to me. Just sit in front of a screen from 9 to 5 wouldn’t do it.
By the time I set this path, I had been doing web design for a while as a side job. I knew I wanted and needed more.
When I became an actual professional software developer, I quickly started ticking my list.
My very first professional project in The Netherlands was the Nieuwspoort app, followed by several web applications. After a few years of working on web development - using several technologies but mostly Java - I had to revise my path. I would either dive in to either React/Angular/you name it or follow what seemed to be a much better long-term investment. Learn functional programming in Haskell. Also, I knew that soon enough I wanted to stop doing Java cold-turkey for at least a year.
When I committed to start learning Haskell, I remember explaining to my wife that it was not about finding a job using it but about pushing me out of a comfortable zone and expand my brain.
During that period I received several job offers that promised a much shorter term and big reward. Having set a path was fundamental to not let myself fall into that trap.
One year and a half later I was becoming a happy Haskell developer.
I define and tune the path I set for myself based on what I find to be fundamentally interesting, challenging and aligned with my values. Sometimes I learn that I was wrong about some of those conclusions, but that as well is an advantage of this approach.
A final tip I leave is to not share your path with many people. Doing so will give you the wrong feeling that you had taken concrete steps to achieve it when you actually didn’t. Watch Why You Shouldn’t Tell People About Your Goals for more on this topic.
Take control, endure through tricky times, don’t be afraid of asking, and enjoy your journey!