Describing Technical Competency 
Tags: python, learning, career
Published: 2019-07-25 15:52:11

---
title: Describing Technical Competency 
published: true
description: How well do you know what you know?
tags: python, learning, career
---

My manager asked me a relatively simple question: How are you at Python?

My unnecessarily convoluted answer was this: 7/10? I did a lot at $client1/$client2 but I didn't do it before this so it's not the language I answer questions in if that makes sense ...which is weird because it's the language all my demos are in come to think of it. So confident user I guess?

So how do you know you know a language? How well do you know it? How can you explain it in a way that doesn't make it obvious that you haven't had your coffee yet?

*Why wasn't I good at it?*

I've written production workloads Python. I've written clean, easily understood modules. I've written demos and tutorials in Python. But, I couldn't bring myself to say that I was good at it off the bat (thanks, Imposter Syndrome).

*What does good even mean?*

Good in the context of this question was, 'Could I service a client with minimal ramp time?' Obviously, yes. I could do that. But that's not the question I answered. I wasn't good compared to the whole of the Active Python Community. But good is also relative and full of ~~feelings~~ implied judgement. Let's stick with competency.

## Levels of Competency

### Beginner
**Knowledge:** Beginner is easy to know. Not all engineers may become Experts, but all Engineers have to admit to having been beginners. You come into an ecosystem with zero knowledge. You have heard of the language but you still don't understand what it does and doesn't do well. 
**Practical Application:** You don't feel confident enough to deliver on your own and are better suited to enhancing existing code than building out your own work from scratch.
**Community Involvement:** You have watched Webinars and technical talks, but don't have enough background to be able to answer follow up questions on any technical topic. 

### ~~Intermediate~~ Power User
Personally, I don't like the phrase 'Intermediate' as it implies a transient state between Beginner and Expert. A lot of people spend much of their professional lives in the Intermediate space. I called it 'Confident User', but you can just as well call it a Power User or Professional Level of Competency.
**Knowledge:** You've survived at least a year in the weeds and haven't been broken (much). You already have an understanding of software/infrastructure/etc. best practices and you either know or are looking to apply it to a specific technical topic. We're past 'how do we do this?' and into 'How do we do this well?'
**Practical Application:** You know where your answers live whether it's which StackOverflow User is the right one or which set of documentation is actually better than the official documentation. You can parse Google results and know how to ask an Appropriate Question. When working with a client, you feel confident enough to deliver on your own or offer guidance when working on a team.
**Community Involvement:** You're active in user groups and look to offer help and mentoring for other engineers. People ask you questions. If you don't know the answer, you know where to get them.

### Expert 
**Knowledge:** You've been doing this at least a couple of years. At least, it feels like you've been doing it forever. People ask you questions and your answers get put on blog posts. You know the best practices, how people break stuff, and how to fix it after they break stuff off the top of your head. You're also willing to admit basic things elude you, and happen to keep a link in your bookmarks bar to a documentation page on how to exit/unzip/etc. Hypothetically. How is what Documentation is for. Why is what you're for.
**Practical Application:** You're the Lead. The Architect. You're the one they call when they don't know what they want but they do know you can give it to them. You're now always delivering as a Team Lead as Solo Projects are too small. You're also probably Certified in something. 
**Community Involvement:** Peers want your input. They want you to go out and explain what you know. Even if you've never given talks, you've guided coworkers or meetup groups and helped people understand nuances in whatever they're learning. You've delivered detailed technical explanations either in the form of long e-mails, Slack messages, Forum Posts, or Technical Talks. You're a leader and a mentor.

### Master
**Knowledge:** You know everything because you made everything. You've written papers, posts, and delivered talks. You literally wrote the answer that gets cited on StackOverflow. You have contributed directly to your technology if not having created it.
**Practical Application:** You're an Architect and an Evangelist. You have built libraries and tutorials that got Experts to where they want to be. 
**Community Involvement:** You're the one whenever they want a talk about whatever Topic. If someone else is talking about it, your name is the one name-dropped.
 

All levels of competency have some mix of Knowledge, Experience, and Community Involvement. Obviously, study and doing is important. Community involvement is also vital. Good engineers admit they don't live in a vacuum. No code gets deployed without someone reading documentation or a tutorial. No good code goes without reaching out for human help. And no one who hoards knowledge to themselves can call themselves an Expert.

It's also important to know who's asking. Client's only want to know if you can do a job. Interviewers want a self-assessment against other candidates. And you should know how you rate against the rest of the community.

As far as Python goes, I can do the job. I know where to find answers. The User Groups are beyond my skill set. That makes me a Power User. Does that make me good? Maybe good enough.