DEV Community

Aaron L Marks
Aaron L Marks

Posted on

Professional Development Plans - A Guide to Hierarchical Decomposition

Recently, I had a conversation with someone about building their professional development plan at work. It was during this discussion that I realized that I should share my method for building out a professional development plan that has worked well for me over the years.

If your current job is in the general industry you want to be in (tech), grab a copy of your current job description. While you are at it, find your dream job and grab the job description for that as well. Go ahead. I'll wait.

Dream Job Goals

Start by reviewing the technical requirements for your dream job. This might be called "requirements" or "required skills". That will be the high-level outline for your professional development plan. My professional development plan was built using the required skills section of a job listing for Sr. Software Engineer at Red Hat. (Please hire me, Red Hat!) It boiled down to 6 different areas for me to work on:

  • Golang
  • Containerization technologies
  • Redux
  • Cloud providers
  • Web standards and best practices
  • Front-end testing tools

Current Job Goals

(If you are not currently working in the tech industry, you can feel free to skip this particular section as you won't really need to worry about where your dream job's requirements intersect with your current job's requirements.)

From my own job description (Sr. Software Engineer) and my on-the-job experience, I was able to compile a list of things I could learn that will help my employer:

  • C# 9 / .NET 5
  • Containerization technologies - specifically, Docker.
  • Cloud providers - specifically, Azure.
  • Web standards and best practices.
  • Front-end testing tools.

When my boss asks for my goals for the coming year, my goals are found at the intersection of my dream job's requirements and my current job's needs. This year's goals include:

  • Learn Docker.
  • Improve documentation.

Learning Docker and really digging in will help me meet one of my dream job goals thereby killing two birds with one stone.

Now what?

From your dream job's requirements, you have a series of big things to learn but what do you do from there? This is where "hierarchical decomposition" comes in to play. I use that term for a reason but that's a story for another day. Ultimately, it means to break things down in to smaller chunks. Break down the big goals in to smaller achievements that can be measured somehow. Each achievement will give you a sense of satisfaction that will push you to keep going.

At the risk of this article going on for hours, I'll limit my example here to a single goal - learning containerization technologies (which is relevant to my current job). So Docker, where do we start? Thanks to the folks over at Pluralsight, breaking this down was easy. I just had to follow the Managing Containers with Docker path. To date, I have completed the following courses on this path:

  • Docker and Kubernetes: The Big Picture
  • Getting Started with Docker
  • Getting Started with Docker Swarm Mode
  • Securing the Docker Platform

No Easy Paths

In some cases, there aren't going to be easy paths to learning. This is where you have to build your own path. Here's how I approach learning a new programming language:

  • Start with the basics. Do the "Hello, World!" tutorial.
  • Learn basic programming concepts in the target language: conditionals, loops, math. For object-oriented languages, this would also include things like classes, structs, interfaces, inheritance, etc.
  • Next, find something you already know how to do and try to do it in this new language.
  • Add new functionality to your existing application.
  • Rinse and repeat.

The vast majority of my experience in programming is building web applications using C# and Angular so my first instinct is to build a web application. If I am learning a programming language used on the server-side, like Python or Go, I would use Angular on the front-end but use Python or Go to implement the APIs. If I am learning a front-end framework, like React, then I would write the APIs using C#. In this way, I use my existing knowledge as a tether so that I can limit what I have to learn to just that one new subject I am focusing on. This eliminates a lot of the confusion that comes from learning multiple technologies/languages/frameworks at once.

Remember Your "Why"

As you are working through your goals, remember why you are doing all this learning. Why do you want to work at your dream job? Do they pay a lot of money? Will they allow you to travel or move to another place? Whatever attracts you to this dream job is your why. Give yourself reminders of that "why". My desktop background is a picture of Pike's Peak because my motivation for learning all this is to get a job that pays me enough to move to Colorado. Do what works for you but always remember why you are working so hard.

Be Gentle With Yourself

Nobody wakes up one morning and, having never studied a subject before, becomes an expert. These things take time. Be gentle with yourself as you learn. You will fail. This is to be expected. Try again. Ask for help. This is how you learn. Be patient with yourself. Learning should be fun and shouldn't involve punishment for failed experiments.

Part of being gentle with yourself is setting reasonable expectations. Don't bog yourself down with a mile-long list of things you must learn in a short time. That's awful. Give yourself time to prioritize self-care.

If you have been plugging away at code for a while, ask yourself "is this fun for me?" If not, step away for a bit. Come back tomorrow. Admittedly, learning a new thing won't always be fun and you may have to push through it in hopes of getting to a small victory that you can celebrate.

Closing Thoughts

I cannot say this enough - prioritize self-care. Drink water. Take a nap. Sleep 8 hours. Step away from the computer. The best learning happens when you are hydrated and well-rested. There's only one of you so take care of yourself.

What do you think? Any questions? What could I have done better in this article? What does your process look like? Let me know in the comments.

Discussion (1)

yechielk profile image
Yechiel Kalmenson

This is great advice!

I've always struggled with how to balance proritizing what I need for my job now, and what I need for the job I want to get!