-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Updated Engineering Levels Guides * Updated Makefile to use Docker to create levels guides. * Cleaned up systems engineer levels guide. * Added fullstack levels guide. Co-authored-by: Zac Bergquist <[email protected]>
- Loading branch information
Showing
10 changed files
with
683 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
FROM ubuntu:22.04 | ||
|
||
RUN apt-get update && \ | ||
apt-get install -y --no-install-recommends cmake && \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
RUN apt-get update -y --fix-missing && \ | ||
apt-get -q -y upgrade && \ | ||
apt-get install -q -y --no-install-recommends \ | ||
texlive \ | ||
texlive-base | ||
|
||
WORKDIR /tmp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,12 @@ | ||
export TEXINPUTS := $(TEXINPUTS):$(abspath styles) | ||
|
||
TEX_SOURCES := $(shell find -name '*.tex') | ||
GENERATED_PDFS := $(TEX_SOURCES:.tex=.pdf) | ||
|
||
.PHONY: all | ||
all: $(GENERATED_PDFS) | ||
|
||
%.pdf: %.tex | ||
cd $(@D) && pdflatex $(abspath $<) | ||
|
||
.PHONY: install-ubuntu | ||
install-ubuntu: | ||
sudo add-apt-repository ppa:jonathonf/texlive-2019 | ||
sudo apt-get update | ||
sudo apt-get install texlive xzdec | ||
cd $(HOME) && tlmgr init-usertree | ||
tlmgr option repository ftp://tug.org/historic/systems/texlive/2017/tlnet-final | ||
tlmgr install listings csquotes | ||
all: | ||
docker build -t latexbox -f Dockerfile . | ||
docker run -v $$(pwd)/levels:/tmp -t latexbox pdflatex /tmp/systems.tex | ||
docker run -v $$(pwd)/levels:/tmp -t latexbox pdflatex /tmp/fullstack.tex | ||
$(MAKE) clean | ||
|
||
.PHONY: clean | ||
clean: | ||
rm -f $(GENERATED_PDFS) | ||
rm -f $$(pwd)/levels/*.aux | ||
rm -f $$(pwd)/levels/*.log | ||
rm -f $$(pwd)/levels/*.out |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,105 +1,16 @@ | ||
\documentclass{article} | ||
\usepackage{graphicx} | ||
\usepackage{listings} | ||
\lstset{language=C} | ||
\graphicspath{ {images/} } | ||
\usepackage{hyperref} | ||
\hypersetup{ | ||
colorlinks=true, | ||
linkcolor=blue, | ||
filecolor=magenta, | ||
urlcolor=cyan, | ||
} | ||
\lstset{basicstyle=\sffamily} | ||
\usepackage{array} | ||
\usepackage[table]{xcolor} | ||
\usepackage{geometry} | ||
\geometry{ | ||
a1paper, | ||
left=20mm, | ||
top=20mm, | ||
} | ||
|
||
\begin{document} | ||
\title{Engineering Levels} | ||
|
||
\section{Legend} | ||
% Don't show page numbers. | ||
\pagenumbering{gobble} | ||
|
||
The matrix below explains the requirements for engineering levels. Each level has to match at least one of the requirements for the level and the level before it. | ||
\usepackage{hyperref} | ||
|
||
Not all skills go to level 6. This is determined by the focus of Teleport. | ||
For example, security skills are more relevant, as we are a security oriented company, and we are interested in R\&D level 6 engineers, however OS/tooling is not the primary focus, so basic levels are satisfactory. | ||
As the level advances past 4, the focus shifts from technical skills to bringing products to market, as it's more relevant to Teleport as a for-profit startup. | ||
\begin{document} | ||
|
||
Skills are a mix of technical and communication abilities. Some references to security are based on the coding challenge. | ||
Teleport Levels Guides have moved to: | ||
|
||
\section{Skills} | ||
\bigbreak | ||
|
||
\begin{center} | ||
\rowcolors{2}{gray!80!gray!50}{gray!50!gray!20} | ||
\begin{tabular}{ | m{15em} | m{15em} | m{15em} | m{15em} | m{15em} | m{15em} | m{15em} | m{15em} |} | ||
\hline | ||
\rowcolor{blue!60!black!10} | ||
Level/Skill & Data structures/Algorithms & Product Output & Security & Communication/Writing & Networking & Systems Engineering & OS/Tooling \\ | ||
\hline | ||
1 & | ||
Demonstrates good understanding of basic data structures - hash tables, linked lists, trees. Can reason about algorithm complexity. | ||
Applies relevant data structures in day to day activity, can implement a production quality. It might be not the most efficient or secure, but correct. & | ||
Creates a design document based on well-defined scoped requirements and implements it. & | ||
Applies basic security principles to program design. For example, can set up HTTPS and password based auth. & | ||
Reports progress on a regular basis as required by the team's operational requirements. Actively solicits feedback.Participates on interview panels. & | ||
Understands and reasons about networking concepts. Understands and can write production quality web servers. Understands common networking issues and troubleshooting techniques. & | ||
Understands the usage of POSIX and other APIs for Linux systems. Understands synchronization primitives and their application, including reasoning about deadlocks and data races. | ||
Can write basic system-level code using the different types of memory and allocation. | ||
Understands inter process communication and can build systems leveraging it. | ||
Can implement data race and deadlock free code using basic production guidelines - using synchronization primitives and properly sharing state between components of the system.& | ||
Understands the usage of compilers, interpreters, build tools at the organization. \\ | ||
\hline | ||
2 & & & | ||
Applies industry best practices and security guidelines, like setting up strong TLS, can pick strong authentication and authorization mechanisms.& | ||
Provides constructive review on peers' code and design. Helps new team members during their first weeks. & | ||
Has more granular understanding of the networking design, for example can reason about using GRPC vs HTTPS-JSON and their networking and scalability trade-offs. | ||
Can do the same for UDP vs TCP and lower level protocols.& | ||
Can reason about performance implications and risks of using synchronization primitives, understands granularity of locking, can debug and troubleshoot memory and synchronization issues.& | ||
Understands tools and compilers as an advanced user - for example, can refactor Makefiles to make them more efficient and parallel execution friendly or select the optimal set of compiler flags for Linux and MacOS. \\ | ||
\hline | ||
3 & | ||
Uses advanced data structures and algorithms, such as consensus, gossip protocols to implement key product features.& | ||
Collaborates with the team to scope requirements, based on good understanding of existing longer term product vision and estimates of the system design of a feature of a product.& | ||
Understands security aspects of protocols on a deeper level, for example can explain differences between TLS 1.2 and 1.3 and security implications. | ||
Understands common attack vectors for server side or client side applications and can build secure systems that will pass quality security audit that will uncover no critical system design errors.& | ||
Supports less experienced peers' technical skills, answering questions and being a resource. Documents and improves team practices.& | ||
Understands scalability and resilience aspects of practical implementation of systems leveraging networking. | ||
Can write fast, scalable servers and troubleshoot common networking issues such as connection lifecycle, pooling, backpressure and other aspects of the application design. & | ||
Not only can write data-race and deadlock free code, but implements safe and concurrent and/or parallel systems using minimum amount of shared state, granular locking - systems that are easy to read, extend and troubleshoot. | ||
Senior engineers are not expected to find any faults or provide any further suggestions in the systems design document submitted by the Level 3 engineer. | ||
& \\ | ||
\hline | ||
4 & | ||
Leads implementation of products and standalone systems using advanced data structures and algorithms, such as upgrade/install distributed framework.& | ||
Leads the implementation of the isolated feature/improvement that measurably and significantly impacts business outcomes from gathering requirements to getting to the market stage.& | ||
Can apply production quality novel cryptographic to build security systems. For example, can implement strong security support for the system with eBPF from scratch.& | ||
Writes technical articles/blog posts, delivers tech and lightning talks representing the company's technical vision.& | ||
& | ||
Can implement production grade systems leveraging advanced low-level and novel components of the Linux design like BPF, control groups. | ||
& \\ | ||
\hline | ||
5& | ||
Implements customer facing features and systems using advanced data structures and algorithms.& | ||
Leads the implementation of a new product line or significant part of the product to deliver it to the market in collaboration with all other teams.& | ||
Writes technical articles on security aspects of the system, implements significant security product innovations in the area delivered to customers.& | ||
Writes advanced technical articles/blog posts, gaining significant industry traction or delivers technical talks on major conferences representing the company's vision. | ||
& & | ||
Applies system level design to deliver new products or significant new components of an existing product to the market. | ||
& \\ | ||
\hline | ||
6& | ||
Designs new data structures and algorithms solving relevant business problems and creating competitive advantage for the company.& | ||
& | ||
Researches and designs new security systems, cryptography and protocols.& | ||
Produces peer-reviewed research papers or patent applications. | ||
& & & \\ | ||
\end{tabular} | ||
\end{center} | ||
\url{https://github.com/gravitational/careers/tree/main/levels} | ||
|
||
\end{document} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# Engineering Levels | ||
|
||
The linked matrices below explain the requirements for all engineering | ||
specialities and levels at Teleport. | ||
|
||
For Levels 1-3 engineers must meet the requirements for all specialities. | ||
Starting from Level 4 engineers will typically focus on one specialty. | ||
|
||
Not all skills go to Level 6. This is determined by the focus of Teleport. | ||
|
||
For example, security skills are more relevant, as we are a security oriented | ||
company, and we are interested in R&D Level 6 engineers, however OS/tooling is | ||
not the primary focus, so basic levels are satisfactory. | ||
|
||
As the level advances past 4, the focus shifts from technical skills to | ||
bringing products to market, as it's more relevant to Teleport as a for-profit | ||
startup. | ||
|
||
Skills are a mix of technical and communication abilities. Some references to | ||
security are based on the coding challenge. | ||
|
||
* [Systems Engineering](./systems.pdf) | ||
* [Fullstack Engineering](./fullstack.pdf) |
Binary file not shown.
Oops, something went wrong.