“Which technology stack is going to keep me employed?”
“What about ______ (Virtual Reality / AI / Machine Learning / Big Data / etc…)?”
As a developer, I love learning new technologies, but I only have a limited amount of time. I want to be effective at my job, pursue things that interest me, and have time left to lift weights, hang out with my wife, and take my kid fishing. I’m always asking myself how I can make the best use of my limited educational bandwidth.
Over the years I’ve learned that making my users happy is way more fulfilling than using the latest technology to do it. Watching the people who are going to use your software light up when they realize their jobs are going to be a little easier is a magical feeling.
These concerns sound boring. They don’t have the appeal of that new fancy thing you just heard about on the Internet. They don’t have cool sounding code names. However, doing the right stuff the right way is what’s going to have the most impact.
Additionally, by focusing on some boring, yet key skills, you can side step the technology treadmill. You can still learn shiny new things, but you don’t have to feel obligated to keep up with everything.
In this post, you’re going to learn how to be more conscious about how to spend your educational time. You’ll learn how to plan your education and how to pick what skills to work on. Afterwards, you will be able to maximize your impact and still have enough time left to go fishing.
After over a decade of building software, I’ve learned the key to good software is getting the boring stuff right.
Start Here: Take Responsibility
The most important thing to do is take responsibility for your own education. Too many developers think it’s the job of their employer to keep their skills up to date. That’s a good way to end up stuck in a job you don’t like. I’m not saying that companies shouldn’t pay for training, but that shouldn’t be the only investment you make in your skills.
Additionally, you should be thinking about what skills you need for the career you want. Your employer may be willing to support training that will enhance your current role, but that may not be where you want to eventually end up. While working for a company that values education is good, it’s your career and you need to manage it.
Take responsibility for your own destiny.
Adopt a Growth Mindset
The second important thing is to adopt a growth mindset. There’s a myth in our industry about something we call “the 10x developer”. These magical unicorns outclass us mere mortals with their godlike powers. While there can be vast differences in skills between developers, no one is born a genius-level software developer. We can all get better.
A growth mindset means that you accept that you don’t know everything. You are a continuous work in progress. This is different from someone who has a fixed mindset, who believes that ability is fixed. These are the people who say things like “you can’t teach height” when talking about developer skills. A fixed mindset makes you weak in the long run. If you need to maintain your fragile self-image of being a guru, you aren’t going to challenge yourself and you aren’t going to improve. The key to a long and happy career in software development is continuous improvement.
Research by psychologist Carol Dweck has shown that people who believe that their ability can grow are more resilient to adversity and generally outclass their fixed mindset peers. Focus on growth and you’ll continuously get better.
Make a Plan
If you want to make the best use of your time, make a plan. Even if you don’t follow your plan to the letter, making one will increase your effectiveness. We all live busy lives. If we don’t make the time, then it won’t happen.
The first step in making your plan is to figure out what’s important to you as a developer. Figure out what you want from your career and what skills it’s going to take to get there. Once you understand why you’re in your career, you can use that information to focus your education. Keeping your goal in mind helps you prioritize. Ask yourself questions like the following:
- What kind of career do I want?
- Do I care more about money, stability, or interesting work?
- What level of work-life balance do I want?
- What kind of companies do I want to work for?
- What types of technologies do I find fun or interesting?
- Where do I want my career to go?
- Do I want to move into management or start a business someday?
- Do I want to specialize or be more of a generalist?
Once you understand what kind of career you want to have, you can suss out what kinds of skills you need to get there. For example, if you value having a stable paycheck with good benefits over interesting work, then finding a job in a medium sized enterprise is for you. These types of companies tend to use older, more established tech stacks. Generally, you want to have a good understanding of their business. In that case, you can avoid anything that’s bleeding edge and wait for things to become more established.
On the other hand, if you don’t care about work life balance and love being a generalist, try working in a smaller startup company. Small startups tend to be more cutting edge, often employing cloud technologies so they can scale quickly. You’ll also need to wear more hats because there won’t be enough developers for everyone to specialize. In this case, focus on technologies that allow high productivity on small teams, combined with a broad overview of what’s available in the market.
If you like to go deep into a specific technology, then working for a large company might be your best bet. Larger companies can support more specialized developer roles.
Take some time to think about what kind of career you want and the types of companies that support that kind of career. With a little research, you should be able to figure out what kinds of companies you want to work for and what skill you’ll need to succeed within them.
The next thing you need to do is make time to learn. Find a few hours a week that you can devote to learning new things. It’s better to learn in small chunks, so 30–60 minutes a few days a week is a good place to start. Even if you’re busy, you can usually dig up thirty minutes. Small chunks of time add up. 30 minutes times five days a week equals 130 hours a year. You can work through a lot of books or courses in 130 hours.
Personally, I find that early morning is the best time to work on personal learning. While I am not a morning person, I find that it’s easiest to knock out mentally demanding learning before my workday. I focus on family and fitness after work.
Your mileage may vary. You may prefer to work out in the morning and learn in the evening. Figure out what works with your energy levels and schedule the time.
Also, re-purpose other blocks of time for learning. I “read” over 50 books a year on Audible while I’m in my car, cleaning my house, and doing yard work. It’s a good way to make that time more useful. I also removed all of the social media apps on my phone in favor of my RSS feed reader and Instapaper apps. By offloading some my less intensive learning tasks to useless filler time, I can use my dedicated learning time to focus.
Once you have your block of time, allocate accordingly. If you’re like me, your list of things to learn vastly exceeds your available time. Instead of trying to hit all those things at once, pick one thing at a time and work on it. Define an ending goal and work until you reach it. A good example would be working your way through a course or reading a textbook and then writing a detailed summary. Other excellent goals would be creating a presentation or blog post on your findings (this is what I do), building a small side project, or offering to teach your coworkers. The key is to produce something that makes use of your knowledge. Prioritize your learning so you’re working on the most important topics first.
Also, think about how you want to allocate your time between evergreen skills and new technologies. Your allocation should be based on your career priorities, it’s more useful to focus on evergreen skills. While looking at new stuff is fun, ultimately, evergreen skills are going help you deliver better software.
Think of your skills as an investment portfolio. Most portfolios are balanced between risky, yet potentially high paying, investments and more safe investments. In the tech world, your evergreen skills are your safe investments. Investing in your evergreen skills always pays off. Learning shiny new technologies is a more risky investment. You might win, but you may also end up with a useless tech skill. Just like a portfolio, lean towards more safe investments. I’d recommend a 75/25 split in favor of evergreen skills.
Picking Skills to Learn
Now that you have a plan and some time, you need to figure out what to pursue. There’s new technologies coming out all of the time, but we can only pick a few things to learn or we risk spreading ourselves too thin. There are a few things you can to do to help winnow down your choices.
The next thing you can do is to build your own technology radar. This idea is adapted from the Thoughtworks tech radar. On a regular basis, Thoughtworks employees get together and make recommendations on which technologies and practices to keep an eye on or adopt. They publish this list for the broader community. By enumerating the trends currently impacting their enterprise, you can get a picture of the technology landscape, figure out what works, and make better choices about what to use. This is a great exercise to do in your own company.
While the Thoughtworks radar has categories related to adopting a technology, your personal radar should have categories related to your own learning. Feel free to include things you want to work on in your own radar that aren’t hot new trends. My personal technology radar has morphed over time into more of an “intellectual radar” where I include soft skills and evergreen skills alongside new technologies.
I use the following categories:
These are core career skills that I want to improve upon. For these skills, I’m willing to take courses, build side projects, write blog posts, and generally spend lots of time working on these skills. This can include new skills I want to learn or practices I want to improve. This is a demanding category, so make sure there aren’t too many skills here.
My “Go Deep” list: Public Speaking, Writing, Cloud architecture, React, ASP.NET Performance and Security
These are technologies that are interesting, but I’m not willing to make a huge investment in yet. I’ll read blog posts or go to conference talks on these topics, but I’m not spending a ton of time on them. These topics might be things that I’ll pursue more later or topics that interest me, but aren’t useful for my current goals. This is also the category for things that I have focuses on the in the past, but now I just want to keep tabs on them while I focus on other skills.
My “Follow” list: Angular, Design, Node.js, Data Analytics, XR, 3d printing, psychology
These are technologies that I’m actively avoiding. This doesn’t mean these are bad technologies. Someone else’s “go deep” can easily be my “avoid”. This category is for things that are interesting, but don’t fit in with my overall career goals. Warren Buffet has an exercise where you list your top 25 career goals, pick the top 5, and then actively avoid the rest of them. This is the same thing, but for technology.
My “Avoid” list: Native Mobile Development, IOT
While building your tech radar, think about your career goals, what skills will help you achieve those goals, and prioritize accordingly. I’ll often list my priorities at the top of my radar. Understanding your priorities helps you winnow down your choices. Once you have your radar, you can use it to inform your personal development time.
Things to think about while picking technologies for your radar:
Is this a popular technology and is it going to stay that way?
Can you learn enough about a particular skill to make an impact in the market?
Can you jump from what you’re doing to this new skill?
Is this something I’m learning for fun or for my career?
Commit to refreshing your tech radar every month or every quarter. Don’t copy over the previous radar either. If you didn’t find the time to research everything in your “Go Deep” list, don’t feel obligated to carry over old topics. The goal is to prioritize and then do what you can with your time block. If you didn’t work through your whole list, make a smaller list for next time.
While evaluating new technologies is fun, you should always make room on your education plan for evergreen skills. There are dozens of things you can work on, but here’s a few suggestions that were derived from my experiences as a developer over the past ten years.
Basic Design and UX
In my experience, most enterprise projects lack dedicated UX folks. By learning some basic UX principles, you can vastly improve the quality of the software you build. Design isn’t just about making software “look pretty”. Well-designed software is easier for users to learn and makes them more efficient. It also makes you seem more competent and credible.
For the artistic portion of the design, I recommend cheating. Pick a framework like Bootstrap and customize the color scheme using colors from the company’s logo. Make sure you have enough contrast between your text and your background and you’re 90% of the way there. I’m not much of an artist, but it’s not hard to get to a “good enough” visual design.
Next, focus on the workflow in your application. How can the user get from one task to another? Does the application guide the user with good messages when they make a mistake? Does the application properly inform the user when something is broken? Learn how to write good error messages and build a responsive workflow.
Beyond that, learn how to make good forms. Most web applications make heavy use of forms and knowing how to make good ones will pay dividends. If you’d like to learn more, I recommend the following.
Putting the Fun in Fundamentals
Another fundamental concern is understanding how to performance tune your chosen stack. Know what tools you can use to log performance and the general tips and tricks on how to avoid trouble. Understand how the data flows through your application and the common places for bottlenecks to occur.
As software becomes a deeper part of our lives, security becomes increasingly important. Learn the basics of secure coding and how to prevent the most common security issues for your stack. Learn how to build a threat model to examine your applications data flows and avoid security holes. Know how and what to encrypt to minimize data leakage.
The final fundamental skill is to learn how to build testable code. Contrary to popular belief, automated testing actually speeds up coding. Not only do you get later benefits, you experience immediate benefits from writing tests. Learn how to write automated tests in the various layers of your stack.
Some people like to hate on the term “soft skills”, as if “soft” is a synonym for “bad”. When I think of soft, I think of martial arts. In martial arts, soft and hard techniques are used in different situations. Similarly, in software development, soft and hard skills are both important. There are two big reasons you want to spend a significant amount of time working on soft skills. The first is that soft skills never go out of style. The human brain has been roughly the same configuration for over 50,000 years. While technology and culture change, basic human nature does not. The second reason is that what separates you from some inexpensive basement coder is the ability to work with various stakeholders and handle both the technical and non-technical sides of software development. If you want to be a leader, either in the managerial or the technical sense, you need to be able to deal with people.
Here’s a few soft skills you should work on.
Software is a communication process. Not only do you communicate with machines, but you also need to communicate with people. Learning how to speak and write clearly is an important skill to have on any team. Learning how to listen and ask good questions will help you get to the bottom of technical issues. Additionally, good questioning skills will help you isolate technical problems as well.
Besides conveying yourself clearly, the world would be a better place if everyone learned non-violent communication and conflict resolution skills. Even the most chill developers (myself included) can get caught up in disputes that can be easily solved with a conversation. While there’s a whole book related to non-violent communication, the biggest take away is to avoid labeling yourself and others. Instead of “you screwed up because you’re a __________”, reform your critique to something more like “You did _________ and it made me feel _______. Would it be possible for you to ________?” If you avoid using labels and judgments, your discussions are going to be much more productive.
Critical Thinking is Critical
The human brain was not meant to perceive truth. It was meant to keep us alive. That doesn’t mean the truth is unimportant, but it does mean we have all sorts of cognitive distortions that kept us alive at the cost of truth. Psychologists split our thinking into two different processes. The first is the rational process that weighs all of the options and makes unbiased choices. The second is a much larger emotional and automatic processing part of the brain. This is the part of our brain that makes most of our choices throughout the day. While we can’t live without either half of our brain, we need to realize our blind spots and seek people who think differently to help overcome them.
By learning to think more critically, we can weigh arguments and arrive at the truth much faster than relying on our emotional processing and luck to eventually stumble across the truth.
If you’d like to learn more about human fallibility, check out Thinking Fast and Slow
Get Some Zen
Software development can be a very stressful career, especially during crunch time. Learn how to relieve stress in productive ways. Meditation, philosophies that emphasize resilience like Stoicism and Buddhism, and managing your own ego can greatly reduce you pain. The key is to be able to separate your emotions from your actions. Notice when you’re going off the rails and correct yourself.
Learning how to Learn
In addition to spending time learning, spend time improving your learning process. With the pace of change, we constantly have to learn new things. Let’s make sure we spend our time as efficiently as possible by managing our learning process.
There are lots of available resources on how to learn more effectively. A good one to begin with would be Make It Stick.
Take Responsibility, Prioritize, and Focus
Technology is ever changing and it’s up to you to take responsibility for your own education.
Begin by figuring our what kind of career you want to have and what skills you need to achieve that career. If you need advice or information, there are lots of people in the technical community who are willing to help. Feel to hit up the That Conference Slack channel or your local user group.
Once you know what you want, dedicate a block of time to your leaning. Make a plan and prioritize your learning based on your goals. Focus on high value evergreen skills. Don’t ignore new technologies, but be conscious about how they fit into your career plan.
Don’t get caught trying to find the perfect planning tool. You don’t need anything fancy to implement this practice. I use a OneNote notebook, but you can do this with a few sheets of paper.
Block off some time today. By taking control of your education and focusing on the right skills, you can sidestep the infinite treadmill of new technologies.