Assessing Core Skills
During the onboarding of a new employee, a buddy or team leader is called to assess the new entry's proficiency level with a set of technical skills that apply to all technical projects.
The required level of proficiency vary depending on the seniority and job position, but a minimum degree of literacy is required, as explained here.
To ease the process, the list of core skills, the related training resources and the following assessment suggestions, are all separated into modules (like Networking, Security, Docker and Docker Compose). Such modules are grouped in three main areas: Basics, Tools and DevOps.
The procedure is easy:
- Use the guidelines and checklists below to assess the necessary skill level.
- If the degree of confidence is low (most of the checklist elements are unknown or uncertain), the whole module is worth studying from scratch. If most of the topics are known and just a few ancillary are missing (e.g. the assessee never used
sed
andawk
but for the rest, she's confident with a Unix shell), then the module may be skipped. - Take a list of the modules that have to be studied.
- Head to the Plan the training on Core Skills section below to schedule the training.
Assess Core Skills proficiency
Follow this section, module by module.
Basics
Command line / Shell
Software Developers should have a basic understanding of:
- Files and folder management:
- Navigation:
ls
,cd
, glob patterns - Search:
find
,which
- File management:
cat
,less
/more
,head
/tail
,touch
- Permissions:
chmod
andchown
, permissions sets, file attributes
- Navigation:
- Shell configuration:
.profile
/.zprofile
,.bashrc
/.zshrc
, environment variables, path and command scope, etc - Redirection:
stdout
,stderr
, reading, writing, overwriting, appending to streams - Make/Makefile: targets, dependencies, recipes, rules
Senior Software Developers and Cloud Native Engineers should be confident with the above, plus have a decent understanding of:
- Scripting: Variables, arguments, cycles, conditions, functions, echoing
- Text processing:
grep
,sed
,awk
Security
Software Developers should have a basic understanding of:
- Asymmetric cryptography, SSH, authentication, signatures
- Best practices for secrets management in software repo (environment variables and
.env
files,.gitignore
,.dockerignore
) - Security monitoring tools: CVE, GitHub advisory database, Dependabot / Renovate
Senior Software Developers and Cloud Native Engineers should have a clear understanding about:
- GPG, the difference between authentication and authorization, OAuth framework, hashing
- Best practices for the development of secure software
Networking
Software Developers should have a basic understanding of:
- Interfaces and ports, what's
localhost
, how domain name resolution works, HTTP basics, how HTTPS works.
Senior Software Developers and Cloud Native Engineers should have a clear understanding about:
- How the network stack works, the different levels of protocols, DNS configuration basics (authoritative zone, record types, TTL, and propagation), local domains resolution.
Tools
YAML
Everyone should have a basic understanding of:
- Basic knowledge of the use cases and syntax
- Knowledge of features like comments or references
Git
Everyone should have a basic understanding of:
- Basic usage: status, staging, commit, tag, reset, history/log, branch, remotes, merge, rebase, cherry-picking, push, pull
- Concepts: what's a repository, the working tree, the
.gitignore
file, how to diff and move along the commit history - Workflow: different branching models (git-flow, GitHub or GitLab flow), pull/merge request, peer review, squashing commits, rebase and merge, merge commits, linear history
- Conventions: understand the relation between workflow-related conventions (commit granularity, versioning, commit messages format, branching model, etc.) and the working context (social contracts, environments, cadences, etc.)
GitHub Copilot
That's a "bonus track". Developers are the most impacted by the usage of Copilot, so just ask if they know what it is and if they ever tried it.
DevOps
Docker and docker-compose
Software Developers should have a basic understanding of:
- Concepts: Docker daemon and client, general anatomy of a Dockerfile, images, tags, digest, containers, volumes, container registries, and what is DockerHub
- Basic commands: pull, push, run, stop, ls, rm, ps, prune
- Docker-Compose:
- Understanding declarative approach
- Anatomy of the
docker-compose.yml
file (services, build, volumes, ports, environment variables interpolation, etc.) - Basic commands (up, down, logs) and detachment
Senior Software Developers and Cloud Native Engineers should be confident with the above, plus have a more specific understanding of:
- Dockerfiles: levels, caching, basic commands (FROM, COPY, ADD, RUN, ENTRYPOINT, CMD, ENV, ARG), multi-stage and multi-arch builds
- Docker-Compose:
- How networking and hostname resolution work between docker-composed containers
Kubernetes
Everyone should have a basic understanding of:
- Concepts: multi-services architectures, orchestration, telemetry and monitoring, 12-Factors applications
- Building blocks: clusters, nodes, deployments, pods, services, storage, networking
CI/CD
Everyone should have a basic understanding of:
- Concepts: what does integration and deployment mean, what does continuously integrating mean and why it's important, the relation between integration and tests
- Building blocks: Git, remotes, the different types of tests (unit, integration, functional, end-to-end), builds, deploys
- Common environments:
development
(integration),stage
, andproduction
- Delivery automation: GitLab Pipelines and GitHub Actions
Plan the training on Core Skills
Laying out contents
Depending on the findings of the assessment phase (described above), a maximum of 40 working hours will be allocated within the first two months for the new employee to learn the key concepts.
To lay out and schedule the plan, the Core Skills training resources section also lists the approximate time each module takes to be completed.
The whole set of training resources available for the Core Skills sums up to almost 90 hours of potential study and practice, with topics like the shell, Git, and Kubernetes taking the lion's share. Hands-on are often the more time-consuming, but they may be the most effective too. Pick the stuff that sounds more reasonable, or limit the hands-on to the parts that are most relevant to the project 1.
If the emerging plan adds up to more than 40 hours, consider the following priority lists, depending on the job position:
- Web developers: Command line / Shell, Git, Docker and Docker Compose, Security (excepted the hands-on), YAML, CI/CD (excepted the hands-on), Kubernetes (except the hands-on).
- Mobile developers: Command line / Shell, Git, YAML, CI/CD (excepted the hands-on), Security (excepted the hands-on), Docker and Docker Compose, Kubernetes (except the hands-on).
- Cloud Engineers: Command line / Shell, Git, CI/CD, Security, Docker and Docker Compose, YAML, Kubernetes.
Schedule the effort
There are several variables that can influence the schedule for study hours, like expertise, background, or learning speed of the new entry, project deadlines, needs, organization, customer-related constraints, etc.
Therefore, each team leader can decide how to plan the training with the new employee, as long as it's done within the first two months.
For example, imagining that the training path takes up all 40 hours, they can decide to spend 10 consecutive afternoons for the first 10 working days. Or they may want to seize some slack the project may grant for the first week to go all-in and spend it all learning the basics.
Or maybe they may decide to spend a couple of days on the most relevant knowledge gaps and postpone for a couple of weeks the refresh of already familiar concepts.
It's strongly suggested to:
- Plan the sessions on Float under the
HR Budget / Core Skills Training
project. The time spent will must be logged there anyway. - Assign a task on PeopleForce for each module, with the links to the training material, possibly numbered, so that the employee can check them out as complete. This will trigger a notification to whomever assigned the task allowing the team leader or buddy to see the progress.
When to assess, plan, communicate, and verify
This table summarizes the key moments to make sure the Core Skills have been properly acquired.
When | What | Who |
---|---|---|
From 2nd day of onboarding | ||
Assess required core skills and training needs | TL and new entry | |
Create a proposal to allocate training hours | TL | |
Planning review and approval | Ops and/or CTO | |
During first month | ||
Implement the training plan | New entry | |
During second month | ||
During planned 1-on-1, gets feedback about the progress | HR | |
Continuous evaluation and process updates | HR, TL, new entry | |
End of second month | ||
Review and evaluate training results | HR, TL, new entry |
1: Of course, the resources are always there in case someone has spare time or wants to skill up in their personal time.