The success of any company lives and dies because of engineers' strength and ability to remove blocks. In addition, it is important to increase the team's effectiveness by developing knowledge and skills.

Knowing about the team skills gaps will help you determine the right learning path for your employees. Employees create and maintain knowledge bases and become more efficient, profitable, and competitive.

Who benefits from this skill matrix? It will be helpful for everyone.

  • Recruiters can easily check the skills required for a position and quickly describe the jobs and competencies needed. 
  • Developers will always be aware of their skill level and will be able to determine growth areas and development paths independently.
  • For managers, it is a valuable framework and starting point for determining how to manage employee performance and assisting in the rational distribution of project specialists.

We have prepared a technical competency matrix that lists the skills and areas needed to hire, evaluate, and develop excellent technical staff, and to test your own level.

Please, do not take this skill matrix as a grading system. The division of skills in it is very conditional, and all sections are approximate areas of expertise. A good specialists are distinguished by the totality of their knowledge in several areas. After all, they may know something better and something worse. And it all depends on what the specialists do and in what technical areas they work.

Required skills

This group of skills includes basic programming skills, such as those taught in computer science courses, as well as basic tools and necessary techniques. If you want to become a specialist, all these skills need to be strengthened and developed.

Application lifecycle Data structures and algorithm Simplify code technics
  • Start-stop;
  • Memory management;
  • Short-term processes;
  • Long-term processes.
  • Array (data structure);
  • Lists;
  • Inverted index;
  • Heaps, stacks, deque;
  • Graphs;
  • Search tree;
  • Hash tables;
  • Search;
  • Sorting;
  • Algorithms complexity.
  • KISS;
  • DRY;
  • YAGNI;
  • Occam's razor;
  • Functional decomposition;
  • Object decomposition;
  • Nesting reduction;
  • Early return.
Version control Testing Programming tools
  • Git;
  • Github Flow;
  • Trunk-based model;
  • Merge / rebase;
  • SVN;
  • Mercurial.
  • Test-driven development (TDD);
  • Behavior-driven development (BDD);
  • Contract testing;
  • Unit testing;
  • Integration testing;
  • Smoke test;
  • Mocks / stubs:
  • Stub
  • Mock
  • Difference between mocks and stubs
  • Similarity between mocks and stubs
  • Snapshots;
  • Fixtures.
  • Integrated development environment (IDE);
  • Linters;
  • DB management tools;
  • VCS tools;
  • Debuggers;
  • Profilers;
  • Code coverage tracking tools.

How to develop the required skills?

First, you can buy or find free online computer science courses to get started and build a base on which you can make new knowledge.

Read about the stages of software development, from its design to development and implementation. It will be helpful to understand the models and the basic principles and methodologies of software development.

It should be understood that after writing the code itself, there is a stage of testing and acceptance by the customer. First, when working with code, you can adhere to the KISS ("Keep it simple, stupid")  principle, which is to try not to overcomplicate a product or project. The more complex the functionality, the more reasons for it to break. Systems based on simplicity tend to be more reliable.

Also, you can adhere to the DRY ("Don't repeat yourself"). Accordingly, each piece of knowledge must have a unique, consistent, and authoritative representation within the system.

To avoid unused and complex functionality, invest the extra effort following the YAGNI principle ("You're not gonna need it").  This principle implies the refusal to add functionality that is not required and the need to adhere to an iterative approach to development. This approach will save your time on the project. 

You must be responsible for the health and quality of the code. To fulfill this obligation, you can combine DRY, KISS, and YAGNI principles to make your code workable, readable, structured, simple, and efficient.

Try to improve the individual quality of the code. To do this, you can pay attention to the tools used, especially the main one—the development environment. Consider that a convenient tool is half of your success.

Participate in open-source projects to learn about new approaches to solving non-trivial problems. Also, you will work with a team on someone else's code, allowing you to learn different development ways and approaches.

The fewer errors in your code, the higher its quality. By conducting thorough testing, you filter out critical errors and ensure that the code will work without flaws. When it comes to improving code quality, it's essential to stick to a testing strategy. Try to use several types of testing, such as integration or regression testing.

It is impossible to avoid errors and shortcomings in the code altogether, but you can reduce them to a minimum and learn not to repeat them. Try to write working and understandable code without bringing cleanliness to fanaticism.

Image.

Engineering skills

This group of skills covers extensive areas where programs, components, and modules begin to interact actively among themselves. It is not enough to be able to write a program. Understanding how different parts of the system or product will communicate with each other is necessary.

It is also essential to expand your horizons, which is formed when the developer is looking at their tools and other approaches to software development, studying new protocols and tools.

Operating systems CI/CD Programming styles
  • Memory allocation;
  • Containerizationand virtualization;
  • File system;
  • Network stack;
  • Basic Linux commands;
  • Shell scripting.
  • Continuous sevelopment;
  • Continuous integration;
  • Continuous Delivery/Deployment;
  • Continuous testing;
  • Continuous monitoring;
  • Observability.
  • Logic programming;
  • Imperative programming;
  • Declarative style;
  • Procedural programming;
  • Structured programming;
  • Functional programming;
  • Object-oriented programming (OOP).
Concepts and Approaches Performance Models
  • SOLID;
  • Inversion of control (IoC);
  • Dependency injection (DI);
  • Service locator (SL);
  • Behavioral patterns;
  • Creational patterns;
  • Structural patterns;
  • Code refactoring.
  • Event loop;
  • Concurrency;
  • Multi-threading;
  • Race conditions;
  • Spinlock;
  • Semaphore;
  • Mutex;
  • Sync/Async;
  • Run loop.
Protocols and models of intersystem data exchange Protocols Data formats
  • Message queues;
  • GraphQL;
  • WebSockets;
  • Simple object access protocol (SOAP);
  • Remote procedure call (RPC);
  • Representational state transfer (REST);
  • Remote procedure calls (gRPC).
  • TCP/IP;
  • TCP;
  • Network socket;
  • UDP;
  • DNS;
  • OSI model;
  • Network topology;
  • SSH;
  • VPN.
  • ProtoBuf;
  • XML;
  • JSON;
  • YAML;
  • Hessian;
  • HTML;
  • Data format meta schemas.
Syntactic parsing Data storage Systems
  • Backus–Naur form (BNF);
  • Abstract syntax tree (AST);
  • Semantic check;
  • Type check;
  • Left recursion in parsers;
  • Operator precedence;
  • Source modification;
  • Language Server Protocol;
  • Error-tolerant parsing.
  • Relational database, SQL;
  • Database normalization;
  • Database denormalization;
  • Object–relational database;
  • NoSQL;
  • Document-oriented database;
  • Graph database;
  • Column-oriented database;
  • Full-text search;
  • MapReduce;
  • Sharding;
  • Replication;
  • Caching systems.

How to develop engineering skills?

As a starting point, you can pay attention to Continuous Integration (CI) and Continuous Delivery (CD), which are important principles that allow developers to deploy software changes frequently and reliably. Since your goal is to develop quality software, you should take into account that CI/CD needs continuous testing that refers to mandatory skills.  

To expand your knowledge of operating systems (OS), we suggest reading "Modern Operating Systems" by Andrew Tanenbaum and Bos Herbert. This book is a bestseller that includes new developments in OS technology. The 4th edition introduced a large section on the Android operating system, updated material on Unix and Linux, and RAID systems.

We also advise you to pay attention to the "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin, which the author calls "Clean Code Teacher School." This book contains real-life examples that will allow you to look at code from different angles. In addition, you will train your "watchfulness" and be able to distinguish good code from bad easily. You will also learn how to improve your coding skills to make your code more reliable and maintainable.

You can read "Introduction to Database Systems" by C.J. Date to learn more about databases. This book is a great resource for learning SQL from scratch. It is written in a simple to complex format, making it easy to understand.

In addition, we advise you to pay attention to "Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement" by Jim R. Wilson and Eric Redmond. This book can be called an introduction to the database and its ideology. It describes seven open-source databases: PostgreSQL, Redis, Riak, CouchDB, MongoDB, HBase, and Neo4J. The book will help you understand the architecture and purpose of each.

If you want to improve your knowledge about TCP/IP, then turn your attention to "TCP/IP. Architecture, Protocols, Implementation" by Sidney Feith. In this book, the author considers all the most important models, services, standards, and protocols necessary for using TCP/IP. And to consolidate the material read at the end of each chapter, there are test questions and practical tasks that will help you gain experience in installing, configuring, and managing TCP/IP.

Image.

Highly specialized skills

The skills of this group demonstrate how deep the knowledge and expertise in nuances or specific areas you have are. If you want to grow from a middle to an expert, we recommend paying attention to data skills.

Candidates with advanced knowledge are more likely to be preferred because they are able to work at a higher level of abstraction. They are also willing to write code, design systems from scratch and pay attention to certain aspects without spending a lot of time on research.

Designing information systems Web security Cryptography
  • Message queues;
  • GraphQL;
  • WebSockets;
  • Simple object access protocol (SOAP);
  • Remote procedure call (RPC);
  • Representational state transfer (REST);
  • Remote procedure calls (gRPC).
  • CSRF;
  • JWT;
  • HTTPS/SSL;
  • XSS;
  • MITM;
  • SQL injections;
  • Same origin policy;
  • CORS.
  • Hash function;
  • Encryption;
  • Random number generation (RNG);
  • Hash function collision.

How to develop highly specialized skills?

Books on the design of information systems can be conventionally divided into special-educational literature, summarizing books, books describing specific practices and approaches, and general ideas. We recommend reading "Software Engineering: Modern Approaches" by Eric Browde. The book is considered a classic software development technology guide that examines the main stages of the software product development process, including its description, design, actual development, integration, and testing parts, testing the program as a whole, and support.

In addition, read "Managing Software Requirements: A Unified Approach" by Dean Leffingwell and Don Widrig. The authors tried to answer questions related to the formation of requirements and work with them to develop complex software systems. In addition, the authors propose well-established methods for identifying, documenting, implementing, and testing requirements, using precedents and more traditional approaches to describe them. 

New book about security, "Cybersecurity Career Master Plan: Proven techniques and effective tips to help you advance in your cybersecurity career" by Dr. Gerald Auger, Jaclyn «Jax» Scott, Jonathan Helmus, Kim Nguyen. Perfect for those who want to start a career in cybersecurity. You will learn more about critical areas in information security (IS). Read the description of the main certifications in the field of IS and key features of the cybersecurity labor market. 

The book "Cybersecurity For Dummies" by Joseph Steinberg is suitable for beginners. It reveals the basics of both personal security and company security. The author tried to write a helpful book for inexperienced professionals and those who want to systematize the existing knowledge.

For those who want to learn more about cryptography, please pay attention to "Cracking Codes with Python: An Introduction to Building and Breaking Ciphers" by Al Sweigart. This is more of a practical guide for programmers who choose their main language—Python. For readers with nothing to do with programming will not be very interesting. But this edition can be a great desktop book for those who learn to work with secret ciphers in Python. 

Image.

Summary

Whether you are a new business or an established company looking to enter the digital race, the competency matrix will help your employees self-test their skills and provide them with guidance for continuous improvement. In this way, you will be able to track the structure of your company and the skill level of employees, providing them with reliable support from the HR department, thereby increasing the efficiency and accuracy of such a complex process as recruitment. More importantly, the skill matrix clarifies which skills need to be replenished immediately and makes it easy to calculate how much it will cost.

If you are an engineer and want to stand out among the candidates during the interview and move to the next level, then developing, expanding your horizons, and practicing are important. Not standing still but constantly improving and learning how things work under the hood should be your goal. Then it will be easier for you to answer questions during the interview, like "what does this function do?". Although it seems ridiculous to you, such questions help check your experience with a particular programming language and determine the base's level of knowledge.

Latest articles here

Organizational Resilience in BANI World

Organizational Resilience in BANI World

Organizational resilience is an indispensable aspect of the contemporary world, where the notions of volatility, uncertainty, complexity, and...

Soft skills matrix by Mad Devs.

Soft Skills Matrix by Mad Devs

It goes without saying that when you work in the IT field, you must establish yourself as an expert. In the era of ever-increasing globalization in...

Managing Underperformance: A S.C.O.R.E. Model Approach.

Managing Underperformance: A S.C.O.R.E. Model Approach

Do you have low performers on your team? It happens to the best of us—sometimes team members struggle to meet expectations. While letting someone go...

Go to blog