Lessons Learned From 10 Years of Programming

My journey as a web developer started back in 2000 right at the age of 21 and I can clearly remember a certain characteristic of those days in terms of how they made me feel. The best term I could find to describe that feeling is… joy.

I didn’t worry about things like time, deadlines or priorities or even productivity. The one thing I was concerned with was learning, as much and as fast as I could.

I was in a hurry not because of deadlines or anything like that, it was simply because it made me feel good, it was fun. I was excited about learning how to build things, about discovering a brand new world.

Fast forward a few years, probably around 2006, I got serious. I started working professionally as web developer. Now, you probably think I’ve ruined all the fun by doing that and I wouldn’t blame you for it. It was certainly a different experience.

Looking back, my journey as a professional web developer was not bad at all but of course it wasn’t always rainbows and butterflies. For many of us work can and will get in the way of life, it will stop being fun if you let it.

I’m going to share few of the things I’ve picked up along the way that will improve your work/life balance and help you make work a lot more fun.

The stack is irrelevant

It’s ok to love the tools you use every day, especially if you’ve done it for a very long time. It’s natural to always be reaching for the things you’re most comfortable with. But the truth is the stack you’re using right now is not as important as you might think it is and I’m going to tell you why.

Most new programming tools are built to solve specific problems that their predecessors failed at. It’s obvious that with time, the problems we are trying to solve are changing and thus the tools ecosystem is very likely to change also, like an ever evolving organism trying to accommodate to the new landscape.

I must admit I too am guilty of ignoring the hype and going back to the comfort of my battle tested tools. I too tend to think that it’s more time efficient to let others spend their time struggling through all the pains of jumping in a little to soon into the new technology and then, sometime/maybe in the future and if that new technology has proven to be any good, I might take a quick stab at it.

While that reasoning is perfectly understandable, I’m here to tell you it’s foolish. In fact that is the opposite of what you should do.

I encourage you to spend that time, jump at the new and shiny language, framework, pattern, whatever because that is how you will grow. That is how you will expand your knowledge. That is what makes the work you do enjoyable.

So the one very important thing that you should stick to instead, is learning. Challenge yourself to explore because that is what makes life and thus work, fun.

Embrace being uncomfortable

You’re probably already uncomfortable just by thinking at the massive amount of work you’ll have to go through just to keep up with everything that’s out there. But the thing is, it shouldn’t be like that.

Reaching out of your comfort zone and venturing head first into unknown territory is by far the best way to learn. Sticking to your old guns will not teach you much of what you don’t already know.

You will be forced to think differently, you will be forced to solve different problems with different tools, you will be forced to expand your knowledge and you will enjoy every minute of it. Trust me.

Avoid stress at all cost

There is a side effect to being uncomfortable like that and trying to keep up with the speed at which our industry is moving simply because there’s such a massive amount of new information coming in each day. You often get the feeling there’s not enough time in the day to do everything you want to do. And you’re totally right, there isn’t.

But the truth is, there are just a handful of things that you get passionate about at any given time and if you can focus your attention on those things, then all of the sudden you get a much more manageable scope.

I’ll share with you my scope management system. It’s a system based on the GTD (Getting Things Done) methodology and daily goals setting.

Long term goals

The main unit of measurement I use is the long term goal which represents goals that I want to achieve in a fairly short amount of time, ranging from a few days to a few weeks.

An example of a long term goal would be “Read the Javascript Patterns book” or “Build the subscription system for UtmTag.com”. These are long term because obviously it’s impossible to do them in one sitting.

A very important aspect of how I define, or phrase, those long term goals is the fact that they give me a sense of progress. What I mean by that is that each long term goal has an end date that I can easily see.

So a long term goal is not “I want to get rich” because there’s no obvious way to measure progress on that (I highly recommend the Getting Things Done book by David Allen, if you want to read more about how to actually define goals).

In the previous example, I can easily say “ok, I’m half way through the book so I’ve made X amount of progress” or “I can see this being done in a week or two”.

Making progress on a long term goal is an essential motivation factor. If you can’t measure progress you’re a lot more likely to quit.

Daily goals

Those long term goals are fine for having a big picture view of how I’m doing but the magic lies somewhere else. The most important trick to stay on course is to have enough motivation each day to make progress on the long term goal. And that’s why I also use daily goals together with my long term goals.

Daily goals are much smaller, just like the name says, their scope is the day. So anything that takes more than a day is definitely not a daily goal but they need to be a lot smaller than that.

How you define daily goals is even more important than how you define long term goals. You need to be realistic about the amount of work you can get done each day accounting for things you can’t control, like errands and other obligations.

I would suggest to start very small (like 2h/day) and see if you can increase that without feeling overwhelmed.

An example of a daily goal would be “Spend 2h coding on UtmTag.com”, which given the longer goal of “Build the subscription system for UtmTag.com” will help me sit down and make some progress each day.

These daily goals might seem like nothing when you look at the long term goal but I assure you they will add up and by the time you realise it, you’re already half way through your long term goal.

Have fun

There have been times when I wanted the weekend to last forever so that I would avoid going back to work. There have also been times when I couldn’t wait for the holiday to be over so I can get back to work.

Let’s step back for a moment and see what’s different about those two opposing feelings. The first one feels like you have to do something you don’t enjoy while the second one excites you so much that you can’t think of anything else.

It’s obvious that the later is how most of us want to feel about work, so what can we do about that? I found a few characteristics about the feeling of excitement which I try to incorporate into every one of my work days from now on.

What makes work fun?

Before you think about incorporating fun into your daily routine, you must define what fun looks like for you.

For me, fun means achieving some kind of an enlightenment through accomplishing things that I previously thought were impossible due to their perceived complexity.

So by challenging myself to explore and learn new things, I can enjoy my work a lot more than working on tasks that don’t bring anything new to the table.

This makes it very clear to me that I should do less work that doesn’t have that characteristic and do more work that does.

Examples of work that I enjoy

Of course this is different for everyone but I thought I’d share some of the things that make me a happy bee so that you can maybe steal some ideas and make your own list.

  • Work on my own projects/ideas
  • Work on projects that force me to learn
  • Contribute to open source
  • Discover new programming techniques
  • Explore a new programming language
  • Sharpen my editing skills
  • Tinker with my editor config

Conclusion

Remember that the work you do is actually how you choose to spend your life and the way you feel while doing it is completely up to you. So if you want to enjoy your life, you might as well enjoy your work.

I hope you’ve learned something new today and I’d love to hear about what you do to improve your work/life balance.