How to keep motivated as a software engineer

A picture of the author

Alex Hagl

April 7, 2024

We all know it and have experienced it - free time is a valuable resource ⏳. I'm in the 6th semester of my computer science degree and have little to no time to work on my personal projects.

With as little of time that is left from the stressful day-to-day life, it is important to maximize not only what actually gets done, but most importantly to have as much fun as possible and to learn something in the progress. 🧠

Today I have compiled a small list of tips and tricks I use daily to keep my learning journey running and to stay motivated developing software. πŸš€

The deadline is coming!

16! I have 16 dead projects on my hard drive. And that is without the unfinished projects I have collected on GitHub πŸ’€ - Why is that?

When I compare my finished projects and most of my unfinished projects there is a clear difference between the two.

Most of my finished projects were planned through. I have set myself specific goals to reach in a specific time frame. 🏁

You may have heard of SMART goals.

SMART goals stand for goals that are specific, measurable, achievable, relevant and most importantly time-bound.

Whenever I start a new project, I try my best to keep notes on the most important features I want to implement, a rough roadmap of development and how long I am committing my time to this project. I try to first define what I want out of this project and how it integrates into my ecosystem.

With this I have automatic 'scheduling' for my projects, on which project I will work on and when I can start new projects.

And we both know working with a deadline is where most work gets done πŸ‘€

Collaborate with others

Building projects with others significantly boosts your experience and motivation by a lot. I work well when collaborating with others as I know that they depend on me getting my work done. This boosts the motivation to put work into the project. 🎈

Collaborating with others does not only mean contributing to open source here as many other people say you should do.

Collaborating with others means starting some projects with a few friends. You don't even have to search for developers better than you. The senior-junior developer and mentoring mindset does make sense, especially when starting out. But building a project, where you are the 'senior developer' does improve your engineering skills. What most people miss out on is learning how to properly start a project. When you 'lead' your project team, you learn a lot of different skills like architecture, design patterns and choosing the right tools. Plus you learn a lot about project management and leading a team.

Working on projects with other people helps me to stay motivated and not abandon another project to ✨the bottom of my GitHub repo list✨.

Learn something new

When I choose projects to develop, a big factor in the decision is building something, which I will learn a lot from πŸ’‘

I try to either explore and set my focus on a topic in software engineering or infrastructure that I want to improve in or to switch up my default tools and maybe use a different database or a different language. πŸ”€

That way, developing a web service for the thousandth time does not get boring but is another challenge in itself which results in a lot of motivation going to the project.

Keep a list

When I was in my 4th and 5th year of learning programming I had a phase where I had no more projects to work on. I ran out of ideas on what to develop - I had no need for any more software.

Nowadays, I have set myself the simple goal of building my own software ecosystem to use in my private homelab πŸ‘©β€πŸ’».

With such a goal, thousands of projects fall out:

  • How can I authenticate to each service -> Create an Identity Server πŸ”
  • How can I manage my logs -> Logging Software πŸ“
  • Oh no, I have too many passwords -> Password Manager πŸ”’
  • I want to sync my passwords ONLY in my local network -> Distributed Database Design πŸ’Ύ

...and so on. I keep all of these ideas I have for expanding my ecosystem in a big list. If I want to start a new project I have a lot of ideas lined up in the queue.

Working on a simple, defined and attractive goal of (in my example) hosting a private software ecosystem provided me with a lot of projects to build and a lot of lessons to learn.

Many would say "Don't reinvent the wheel", I say "Reinvent the wheel and learn something from it". You will make errors, but you can compare your solutions to how others have solved the problem and for me, that is a lot of fun! 😁

Gotta have them metrics

The final trick I use to stay motivated is to always track some kind of metric on how much I got done.

For me, this is my GitHub contribution chart.

I wouldn't say I'm a competitive person. 🐷
~ Technoblade

I like to look at my contribution chart and see "Oh cool, on this day I've gotten to 50 commits!". πŸš€ It fires up my inner gamer and motivates me to maximize productivity based on my contribution chart.

Of course, this is not the only metric you could use - in fact, it probably isn't the best either. You can use anything that keeps track of how much you have accomplished like completed tickets or something similar.

Last Words

Those were a few of my tips and tricks on how I stay motivated to develop software.

But always keep in mind: if something you do to force yourself to do more coding is too much for you and drains your motivation you can just try some other method.

The main focus should always be fun - Having fun coding and creating software is the most important thing as a software engineer. πŸ”₯