How much will you be worth in five years? Your Personal Technology Roadmap
on
It's quite common for software companies to have a technology roadmap. Such a roadmap will dictate the direction of product strategy and technology stack going forward. Examples might be, moving towards a cloud base infrastructure, entering into new marketplaces or introducing key product features. Turn this principle inwards and imagine the product is you? What changes would you make to increase the value of your product? As developers, trying to stay afloat in a fast-moving tide of technology it is essential for us to invest in our own personal technology roadmap to keep current.
What do you need to do to stay ahead in the next 5 years?
I recently read the book Beyond the Obvious and a question from the book jumped out at me. The question was: What's the worst case scenario for your business? This question was from a chapter of the book that discussed the concept of contingency planning for some unlikely event, a "jolt" that if were to happen would spell disaster. In my case, if .Net skills were to swiftly drop in demand I would be in serious trouble. So what does this mean? Do I scramble to extend my skills in C++ and Java? What if they fall out of fashion too. If I focus my efforts on these technologies and .Net grows even stronger then I may struggle to remain current in that domain if I am taking time out of my learning pot and allocating it to these non .Net concepts.
Learning about learning
A key element of the solution to this conundrum is to never stop learning. And seeing as there is a lot of learning ahead, we need to be sure that we are the best learners we can possibly be.
A fantastic asset for the toolbox is the book: Pragmatic Thinking and Learning: Refactor Your Wetware.
I also wrote a blog post that documents effective learning for developers.
Don't forget the timeless skills
This classic blog post from Steve Yegg titled Practicing Programming has a great practise drill, which is literally a timeless classic:
Write your resume. List all your relevant skills, then note the ones that will still be needed in 100 years. Give yourself a 1-10 rating in each skill.
On this point Steve concludes that:
What I think you'll likely find is that math, computer science, writing, and people skills are for the most part timeless, universal skills. Most specific technologies, languages and protocols eventually expire, to be replaced by better alternatives.
Getting started with a roadmap
I broke my roadmap down into three sections. I picked one thing for each of the below points that:
- I could do in my day job that will improve something
- I could learn for the future that will increase my value
- I just find interesting as a curious individual
1. Pick something you can do in your day job that will make improvements
Pick something that could be changed or implemented within your current day job that would help you gain experience in a technology that is either not currently being used or not used correctly. For example, is there a messy JavaScript code base in need of design patterns to make it more structured and maintainable? Is it lacking Unit Tests? Is the build process automated?
It's easy to put together a simple hello world example in technology x, but I often find that I run into obstacles whenever I try to implement some new technology in a real world project. There will always be some slight difference or some unique constraint that will push the boundaries of hello world examples. This is how we earn our battle scars and helps me to really understand a new concept which is why I suggest this point.
Try to keep things realistic, proposing to rewrite a VB.Net application in node.js because it will satisfy our personal learning requirements is probably a little unrealistic. Proposing to apply better structure to the existing JavaScript code base and introducing unit tests is pretty realistic. The proposed change has to benefit the company otherwise you could be wasting your time and theirs. Think Win/Win. The introduction of better coding standards and unit tests to a JavaScript code base will make changes easier and improve stability, if this is demonstrable and provable then it's highly likely that you'll get the nod of approval to proceed with this change.
2. Pick something you could learn for the future that will increase your value
Pick something that you can't do in your day job that could either help you remain current or pursue other opportunities. This isn't necessarily about trying to quit your job or dramatically changing what technology you use on a day-to-day basis, rather it's about being commercially aware and ensuring that we're not missing out on any new or key technologies that are emerging.
Some examples are the emergence of HTML5 and JavaScript. Work on the Microsoft stack? Windows 8 and its new concept of "Metro Style Apps" may finish off Silverlight and/or WPF - or it might not. Do we bet on iOS? Android? SQL or No SQL? Big Data? Machine Learning? It's not possible for us to know everything, so we need to choose wisely.
Before we go off and start learning, we need to ensure the there is currently or going to be a demand for these skills! This is very tricky unless you can see into the future or you have the developer's equivalent of the Grays Sports Almanac.
Some techniques I use to identify trends and emergence of new technologies:
- Use job sites to trend whats skills are in demand
- Use IT job statistics such as IT jobs watch (UK based) or TIOBE Programming Community Index
- Look at specific websites such as Stackoverflow which can give an indication of usage based on the volume of questions in a particular area
3. Pick something you just find interesting as a curious individual
Creating software to run on a Raspberry Pi probably isn't going to be a highly sought after skill. It will certainly help you become a better developer but if you were 100% commercially minded you may conclude that this time might be better spent on some other commercial project such as writing Android, iOS or Windows apps to sell in the respective app stores. But sometimes "just because" is as good a reason as any to pursue such a project, just for the love of doing it.
I would contest that the passion and motivation that is cultivated working on fun, but (potentially) commercially worthless applications like this can be injected back into your commercial work. It doesn't have to be technology based either, e.g. learn the play the piano or another language, but if you're a geek like me it probably will be!
What's your roadmap?
Once I decide on my three points, I follow them up using the below plan. This helps to prevent me from overloading myself with mental weight and giving myself impossible challenges:
- Create a weekly plan: try to do a small amount each week. Little and often is best.
- Create three small tasks under each section: small tasks that are less than a few hours in duration. This will help us not to overload ourselves.
- Give yourself permission to do nothing: sometimes we need a rest!
Finally, remember, this stuff is supposed to be fun!