To get a better programming job, explain your problem-solving skills
When you’re looking for a new programming job, how do you explain your value? The usual approach is a long list of technologies, but this leaves out a critical skill: your ability to solve problems.
If you can convey your level of skill at problem solving, you can get:
- More job offers.
- Jobs with technologies you don’t know.
- A higher salary by getting slotted into a higher pay grade.
Often just a few extra words can make a big difference in demonstrating your skills. Let’s see how you can do it.
Three levels of problem solving skills
As I discussed elsewhere in more detail, problem solving comes in three stages, each approximately corresponding to a particular career stage (these names are due to Randall Koutnik):
- Staff or principal software engineers are Finders: they find new problems.
- Senior software engineers are Solvers: they solve already-identified problems.
- Junior software engineers are Implementers: they implement already-identified solutions.
The earlier you are in the problem-solving process, the more productive you are, and therefore the more valuable as an employee.
As a result, you need to communicate how advanced your skill is across these three levels to demonstrate your productivity. Everything from your resume to the stories you tell in interviews should communicate your level of skill.
Explaining your skill level
Explaining your skill level involves telling stories that use the correct words and sufficient information to demonstrate your skill. I’m going to use resumes as an example here, but you should ensure you do this in interviews as well—if you’re practicing with a friend, make sure they’re checking for this, it’s easy to leave the information out.
Consider the following entry from a resume:
Moved deployment from manually-managed hosts to a new Kubernetes cluster.
This experience entry uses an implementation-level verb: “moved”. Similarly, “coded”, “tested”, “wrote”, “fixed”, “optimized”—these are all about implementation. And maybe it’s implementation was tricky and difficult, and it’s good to convey that, but if you also solved the problem or identified the problem it’s impossible to tell from this phrasing.
Any task you write about in your resume and talk about in interviews was the result of someone identifying a problem, and someone coming up with the solution. If it was you, make sure you say that.
Let’s say in our example above you were the one tasked with figuring out an alternative to manually-managed hosts. If so, you need to add additional context and verbs that convey that:
Investigated alternatives to manually-managed hosts, decided on Kubernetes, and moved the deployment to a new cluster.
Now we can clearly see you solved the problem.
If you were the one who identified the problem, again you need to make sure you explicitly call that out:
Identified manually-managed hosts as an operational problem, and got management buy-in to change to a better system. Subsequently investigated alternatives, decided on Kubernetes, and moved the deployment to a new cluster.
Now we can see all the value you provided.
If you only identified a problem, that’s fine too, just say so:
Noticed a critical customer-facing bug that was impacting many users; after the team responsible for that area fixed it, they reported a $300,000 increase in revenue as a result.
Communicating value at different career stages
Now that you’ve seen how to phrase your skill level, let’s see how this works at different career stages.
Implementers
When you’re at the start of your career you will mostly be implementing other people’s solutions. However, in one or two cases you might be starting to solve problems, or even find problems. Make sure your resume highlights those instances, however small.
Sometimes this will happen in non-programming contexts. For example, I knew one early stage software engineer who made very insightful suggestions about hiring. Mention it anyway.
If you had another career before switching to programming, you’ll likely have plenty of examples. Make sure to highlight those even if they’re unrelated to coding; those problem-finding and solving skills will at least partially transfer.
Solvers
If you can solve problems on your own, you want to both:
- Communicate this fact.
- Highlight the places where you did identify problems, even if it’s happened in only a few cases.
Review your resume and make sure all the relevant entries explicitly talk about the ways in which you came up with the solution. If you already have a suitable job title, like senior software engineer, then getting the phrasing right isn’t quite as important—but it’s still worth doing.
If you still have a junior job title but your skills have progressed, it’s doubly important to ensure you’re highlighting your problems solving skills.
Once you’ve done that, try to expand on any places where you were involved in identifying problems.
Finders
Your goal as a Finder is to ensure you’re not confused with a Solver. It’s very easy to phrase things in a way that doesn’t make clear you identified the problem—after all, identifying the problem may only have a taken a few minutes.
But those initial few minutes where you noticed something needs to be done are quite often the most value parts of the whole process, so make sure you explicitly talk about finding the problem. This is even more important if your current job title doesn’t reflect your actual level of skill.
What to do next
Even if submitting resumes isn’t the best way to find a job, you still need one, and writing it is a good way to rehearse for an interview.
So get your resume out, and for each experience entry make sure it’s clear whether you implemented the solution, solved the problem, and/or found the problem. This will take you an hour, no more, and at the end of this process you’ll have a much easier time communicating some of your most valuable non-technological skills.
And if you’d like to learn some more of those skills, check out my new book, The Secret Skills of Productive Programmers.