Give Your Career a Boost with the Developer Capability Matrix
Knowing where you are -- and where you want to go -- are the keys to using the matrix.
The question led me to wonder further about the skills and capabilities of a .NET developer, and how we as developers can catalog and evaluate those capabilities in a meaningful way. The pace of new technologies has been breathtaking. I chose software development as my career path as a high school junior because I wanted to work in a field that would never become stale -- one that would allow me to continue to learn and experience new things throughout my career. Let me describe for a moment what the computer industry was like at the time.
The year was 1978 and I was riding the initial swell of a technological tsunami that would change the world. At that time, a computer meant a teletype with a keyboard (with no screen, and reams of fanfold paper) connected to a remote host. I had to drive an hour to find a bookstore that actually sold a computer magazine. Indexed sequential (ISAM) flat files were the database of choice; the set-based logic of SQL didn't appear until almost 10 years later. While a sophomore in the recently created computer science program at Michigan State University in 1982, I took a student programmer position so that I could use their CRT terminal after hours rather than punch cards for my class programming assignments.
For many of you, this will sound like ancient history, much as Sputnik 1 seems to me (though it's very real for those just slightly older than myself). My point is that the amount of change the computer industry has experienced since my first developer job 30 years ago is simply amazing, and every time I thought it couldn't change any faster, it has continued to accelerate. That leads to the main question of this article: There's so much to know, so how can you keep track of it all -- let alone become proficient -- and communicate that proficiency in a meaningful way?
One strategy might be to watch the trends with blog posts, conference topics, and magazine article topics, and then focus on learning the new technology as quickly and fully as possible. Another strategy may be to determine your core coding skills that deliver the most commonly needed application skills, and then just be aware of the other technologies, ready to learn them once the need arises. Sadly, there's also the "strategy" of focusing on daily tasks and ignoring all other technologies and techniques.
Create Your Developer Capability Matrix
I recommend creating your own Developer Capability Matrix (DCM). List the technologies and techniques that are part of your developer experience in a grid format. For each detail line of the list, rate your understanding and current skills from 0 to 4 (and be brutally honest for your own benefit):0 = Unknown. No experience and little understanding of the topic.1 = Aware. General awareness of the concepts and how they can be applied.2 = Beginner. Some experimentation and coding, plus a few successful programs.3 = Intermediate. Productive with the assistance of online resources.4 = Advanced. Quick and confident with solid architectural structure.
In addition to rating yourself on each skill, rate the desirability of that skill for your career goals. Note any contacts you have who are more advanced in that skill and whom you may feel comfortable approaching with questions. Include another area where you can list resources to learn more about the skill, such as articles, tutorials, video training, books and so on.
The download accompanying this article is an Excel spreadsheet set up as a sample DCM with more than 100 skills listed to get you started. It is by no means comprehensive -- a complete DCM will be many times larger. I've included skills in areas such as .NET, Architecture, Career, Cloud, Coding, Communication, Computer Science, Database, Design, Desktop, Methodology, Mobile, Networking, Project Management, Scripting, Security, Source Control, Testing and Web Development.
The Value of a DCM
You'll have a better understanding of the developer ecosystem by organizing all the things you know or want to know into categories and skills. It may be difficult in some cases to find a concise name for a skill or determine its correct category, but there is benefit in going through that thought process. Your DCM will be a great reference as you work on projects and applications, and will often serve as a checklist to consider as you work (when designing a new system, review the Architecture and Design categories, and so on).
Having your DCM readily at hand will help make it easier for you to ensure your limited training time is targeted at the areas of greatest benefit -- those with higher desirability and lower current-skill ratings.
Sharing Your DCM
Having a well-defined DCM can help justify expenditures for training and conferences to your employer. Presenting a clearly organized inventory of your skills can demonstrate how the desired training will strengthen weaker areas and show that you've put serious thought and effort into managing your skill set, which will almost certainly be looked upon favorably.
You may want to consider including your DCM as an attachment to your resume. A high-quality prospective employer will appreciate your ability to clearly see your own strengths and weaknesses, and will respect your honesty and organization.
Encourage other developers to create DCMs, and collectively compare your categories and skills lists (minus scores). You may find skills on lists that you hadn't heard of but will be glad you discovered. The discussions around why certain skills were listed in certain categories by your peers will be both interesting and educational.
Can There Be an Industry-Standard DCM?
I'd love to see an industry-standard DCM become available, but the mechanics of creating and maintaining such a list aren't clear. If it's to be useful to most developers, it would have to encompass many languages and technologies -- far beyond the level that any one person could understand and manage. It would have to be organized around a distributed administration model, much like Internet domains are now, with an expert leading each functional category. There would need to be some way to privately map the shared category and skills list to my private desirability and skills ratings, such that updates to the shared list would not break the links to my ratings.
It would seem that the advantages of a single, shared vocabulary on developer skills would be substantial. Employee performance evaluations would be more meaningful both within and across organizations. Job listings could accurately reflect the skills truly needed. Conferences, presentations and training classes could more accurately indicate the skills covered. Training plans could easily indicate learning paths by specific skills in a clear order. Publications and articles could be indexed by the related standard skills discussed.
What's Your DCM?
I'm interested in what you have to say about the DCM concept. Do you agree that a DCM is a good way to manage the challenge of rapid change that you face to stay current with your skills? Do you see any alternatives? Have you ever attempted to create a DCM or something similar? How would you use a DCM? What kind of software application could be helpful? Do you support the concept of an industry-standard DCM? Could it be managed as an open source project? How would you recommend administering it?
I invite you to e-mail me or post your comments here to join the discussion of what I feel is a very important topic.
Joe Kunk is a Microsoft MVP in Visual Basic, three-time president of the Greater Lansing User Group for .NET, and developer for Dart Container Corporation of Mason, Michigan. He's been developing software for over 30 years and has worked in the education, government, financial and manufacturing industries. Kunk's co-authored the book "Professional DevExpress ASP.NET Controls" (Wrox Programmer to Programmer, 2009). He can be reached via email at email@example.com.