Back in 2012, I started a blog post series wherein I "check in" yearly with a list of things I've done and learned, and a list of things I want to do and learn the following year. And every year, it has provided an invaluable perspective on my pace of learning and accomplishments. This year was no different.
I used to feel pretty bummed out at the end of the year, feeling like I've barely learned anything and feeling like I didn't really have a direction to take the next year when it came to development. At first, when I started learning web development, I felt the constant flow of progress -- one day you're writing a small PHP script for retrieving a few blog posts and the next day you're writing a mail script complete with validation. One day you're writing some HTML, and the next day you've got a full-blown site on your hands.
As you chow down on basics, the pace of learning seems to slow down. There's less to learn apparently, and less necessary to learn as well. However, when I started writing my retrospectives, I've learned quite a lot about myself.
As you chow down on basics, the pace of learning seems to slow down.
The first incredulous thing was seeing year after year a list that was almost identical in length. I kept up a pretty good pace despite feeling like I haven't done much.
In 2012, I started developing sites in Laravel. I also learned LESS and Knockout.
In 2013, I tackled Vagrant, full-text search in Postgres, AngularJS and a few other things.
2014 was the year I really got into AngularJS, started coding in Node and wrote my first open-source code.
2015 was my year of SASS, some C#, and learning to use Babel. I did some React that year, too, if I recall correctly.
Every year has been pretty damned busy yet and until I wrote these things down, I felt like my year was inadequate. My own view of the year always improves as I write my check-ins.
If you ever feel bummed out like that, truly scrape at the bottom of the barrel and see what comes up. This year, I struggled to come up with a list as well but once again, I surprised myself.
Every year has been pretty damned busy.
Looking back is always important, just as important as looking forward. We learn from history -- we all know the quote about dooming to repeat past mistakes. The concept of retrospectives is very near and dear to the tech industry, going as far as being a part of SCRUM/Agile.
The important part of a yearly retrospective goes beyond "feeling good" about one's learning.
I think it's pretty cool to break down a retrospective into discussing the wins for the year (accomplished goals perhaps), unexpected progress (unplanned wins), and abandoned goals.
For all of those, it's important to figure out why. Why did things work out? Why did they fail? How come we strayed from goals?
For example, last year, I abandoned majority of my side projects. Why? I thought about it and realized that I spent a ton of time on my self-improvement rather than hobby development. I also realized that my side projects often fulfilled something I lacked at work and work this year has been spectacular.
This insight helps steer you where you want to be. I'm super happy with how I spent my year so for next year, I wrote down minimal goals rather than an ambitious list, at least for the tech side of things.
This goal setting and having a retrospective is great for personal life as well. A few years back, I started adding a
personal section to my tech retrospectives. These yearly check-ins are more for me than anything else. I don't really expect a random developer to drop in and give me a pat on the back or useful feedback.
I tend to write down not just my personal goals, my accomplishments, etc. I also write down fun things I'd like to remember about the year that I would normally forget and let wash away into the sands of time. So I've been writing down the music I listened to, the games I played, books I've read, and so on.
This is actually fun for me because I come back to my checkins every so often and I remember "Oh yeah, in 2017, I finished the original DOOM. That was a fun game" or I pull up my playlist from that year and reminisce.
Writing down goals for the next year is never a "write it and forget it" situation. I go back to those retrospectives every so often, especially when I feel a little lost, and read over them. I like to remember what it is that I set out to do and more importantly, why.
It's also pretty cool to see my previous years' issues and if I'm repeating those mistakes and what I did to counter those problems.
For example, one big issue I have is sticking to my goals. That used to bother me but now I'm actually okay with abandoning goals as long as I have a good reason.
Which brings me here. Don't assume that goals are set in stone and you can't do anything outside of them.
Just like with tech sprints, it's okay to abandon project that no longer make sense. You wouldn't complete a feature (or okay, maybe YOU would) that is no longer relevant just for the sake of completion.
Let me share a story from work. For years, I worked on this stupid bash script that would limit the number of hard backups on our backup server. Every so often, we'd get an alert from our VM that the drive was just about full, I'd SSH in, delete the backups and then I'd work a little on the script, dismayed by the fact that I just wasted 30 minutes looking up the server IP, trying to SSH in, trying to remember where the backups were, and so on. I ended up abandoning it because I couldn't get the script to work right.
A few months later, we switched to using S3 as our backup storage. Completing that script today would be completely useless. It was okay to abandon the project despite being near completion because it was no longer relevant. And I think I know of knew that would happen when I worked on that script in the first place -- it was solving a problem for a faulty solution that we were planning to fix anyways.
Most importantly, start in December! The new year is filled with energy and you'll find yourself excited to dive in, do your projects, spend all your time on your new goals.
And then burn out in February. Just check out your local gym.
Instead, do what I do, start on your goals in December. Why?
Because just as you hit that stage where you want to give up, it'll be the new year and you'll have that rush of new energy that'll get you over the quitting hump. If you go to the gym, you'll be part of the regulars by that point, getting annoyed at all the people who joined but will leave in a couple of weeks.
Support groups are GREAT. Community will help you stay on track. If you've ever done the National Novel Writing Month, you'll know that without the community, it's near impossible to do as a beginner.
Discord is teeming with them! Any interest whatsoever has a discord of its own from technology, to writing, photography, meditation, finance, and whatever else. Need a place to start? Let me drop a few links:
- Beginner Dev? Join my "DevsWhoDev" Discord - not a lot of people so far but that's okay.
- Beginner writer? Join my "DevsWhoWrite" Discord - it's been pretty busy and we covered NaNoWriMo. About a 100 members so far!
- Wanting to join productive people in general? Check out Knights of Academia. Their discord invite is on their site. They have busy channels covering: philosophy, cooking, money, meditation, gaming, stem, computer science, social science, and art. Phew.
Soft skills are as critical as technical skills for a software engineer. No one works in isolation. Each person has to deal with teammates, colleagues, managers, etc. Therefore team interpersonal skills are essential too. Soft skills include things like good communication, honesty, teamwork, integrity, organization, empathy, etc.