Developer Tooling
Editors, the terminal, package managers and the tools around your code.
Backend Engineer track
Junior
Write correct code, ship small changes safely, ask good questions.
Core: start here
- Development Environment SetupGetting a project running locally from a fresh machine.
- Environment VariableA key-value setting passed to processes from their environment.
- FormatterA tool that rewrites code to a consistent style automatically.
- LinterA tool that flags likely bugs and style issues.
- LockfileA record of exact dependency versions so every install is identical.
- Package ManagerA tool for installing and versioning dependencies, like npm, pip or cargo.
- Reading DocumentationGoing to the official docs first, and knowing how to navigate them.
- Searching EffectivelyFinding answers fast in error messages, issues, docs and forums.
- SSHSecurely logging into and running commands on remote machines.
21 more junior concepts
- Build ToolAutomating compile, test and package steps, like Make, Gradle or Vite.
- curlThe command-line tool for making HTTP requests.
- DependencyExternal code your project relies on.
- Editor ShortcutsLearning your editor's shortcuts and multi-cursor editing to work faster.
- EditorConfigA shared config for indentation and line endings across editors.
- Getting Help (man, --help, tldr)Reading a command's built-in documentation.
- Go to Definition / Find ReferencesNavigating code by symbol instead of searching text.
- grep / ripgrepSearching text across files from the terminal.
- HTTP Client Toolscurl, HTTPie, Postman or Bruno for calling APIs by hand.
- IDE / Code EditorYour main tool for editing, navigating, refactoring and debugging.
- Language Version ManagerTools like nvm, pyenv or mise for switching language versions.
- PATHThe list of directories the shell searches for commands.
- Pipes and RedirectionChaining commands with a pipe and sending output to files with >.
- Pre-commit HooksRunning linters and formatters automatically before each commit.
- Regex TestersTools for building and testing regular expressions interactively.
- ShellThe program interpreting your commands: bash, zsh, fish.
- SSH KeysKey pairs for passwordless authentication to servers and Git hosts.
- Task Runner / Project ScriptsNamed project commands, like npm scripts or a justfile.
- Terminal / Command LineControlling your computer and tools through text commands.
- Terminal Text Editors (Vim, Nano)Editing files on a server where there's no IDE, and how to quit Vim.
- Virtual EnvironmentAn isolated set of packages per project, as with Python's venv.
Mid-level
Own a feature end to end without hand-holding.
- Code GenerationGenerating boilerplate from schemas or templates.
- Dependency HellConflicting version requirements that can't all be satisfied.
- Dev ContainersA reproducible development environment defined as a container.
- DotfilesYour personal config files, often kept in Git.
- jqA command-line JSON processor.
- Language Server ProtocolThe protocol that gives editors autocomplete and diagnostics for any language.
- MakefileA classic way to define project tasks and their dependencies.
- Reading Library Source CodeReading a library's code when its docs don't answer your question.
- Shell ScriptingAutomating tasks with shell scripts.
- Static AnalysisFinding bugs by analyzing code without running it.
- Transitive DependencyA dependency of one of your dependencies.
Senior
Own a system, its failure modes, and its trade-offs.
Nothing here yet.
Staff
Shape how many teams build, across systems.
Nothing here yet.
Principal
Set technical direction for the organization.
Nothing here yet.
Data Engineer track
Junior
Build and fix pipelines from clear specs; write correct SQL.
Core: start here
- Development Environment SetupGetting a project running locally from a fresh machine.
- Environment VariableA key-value setting passed to processes from their environment.
- FormatterA tool that rewrites code to a consistent style automatically.
- LinterA tool that flags likely bugs and style issues.
- LockfileA record of exact dependency versions so every install is identical.
- Package ManagerA tool for installing and versioning dependencies, like npm, pip or cargo.
- Reading DocumentationGoing to the official docs first, and knowing how to navigate them.
- Searching EffectivelyFinding answers fast in error messages, issues, docs and forums.
- SSHSecurely logging into and running commands on remote machines.
21 more junior concepts
- Build ToolAutomating compile, test and package steps, like Make, Gradle or Vite.
- curlThe command-line tool for making HTTP requests.
- DependencyExternal code your project relies on.
- Editor ShortcutsLearning your editor's shortcuts and multi-cursor editing to work faster.
- EditorConfigA shared config for indentation and line endings across editors.
- Getting Help (man, --help, tldr)Reading a command's built-in documentation.
- Go to Definition / Find ReferencesNavigating code by symbol instead of searching text.
- grep / ripgrepSearching text across files from the terminal.
- HTTP Client Toolscurl, HTTPie, Postman or Bruno for calling APIs by hand.
- IDE / Code EditorYour main tool for editing, navigating, refactoring and debugging.
- Language Version ManagerTools like nvm, pyenv or mise for switching language versions.
- PATHThe list of directories the shell searches for commands.
- Pipes and RedirectionChaining commands with a pipe and sending output to files with >.
- Pre-commit HooksRunning linters and formatters automatically before each commit.
- Regex TestersTools for building and testing regular expressions interactively.
- ShellThe program interpreting your commands: bash, zsh, fish.
- SSH KeysKey pairs for passwordless authentication to servers and Git hosts.
- Task Runner / Project ScriptsNamed project commands, like npm scripts or a justfile.
- Terminal / Command LineControlling your computer and tools through text commands.
- Terminal Text Editors (Vim, Nano)Editing files on a server where there's no IDE, and how to quit Vim.
- Virtual EnvironmentAn isolated set of packages per project, as with Python's venv.
Mid-level
Own pipelines and models end to end, including their quality.
- Code GenerationGenerating boilerplate from schemas or templates.
- Dependency HellConflicting version requirements that can't all be satisfied.
- Dev ContainersA reproducible development environment defined as a container.
- DotfilesYour personal config files, often kept in Git.
- jqA command-line JSON processor.
- Language Server ProtocolThe protocol that gives editors autocomplete and diagnostics for any language.
- MakefileA classic way to define project tasks and their dependencies.
- Reading Library Source CodeReading a library's code when its docs don't answer your question.
- Shell ScriptingAutomating tasks with shell scripts.
- Static AnalysisFinding bugs by analyzing code without running it.
- Transitive DependencyA dependency of one of your dependencies.
Senior
Design the platform's storage, processing and modeling choices.
Nothing here yet.
Staff
Shape how the whole organization produces and uses data.
Nothing here yet.
Principal
Set data strategy and architecture across the company.
Nothing here yet.
Frontend Engineer track
Junior
Build UI that works, ship small changes safely, ask good questions.
Core: start here
- Development Environment SetupGetting a project running locally from a fresh machine.
- FormatterA tool that rewrites code to a consistent style automatically.
- LinterA tool that flags likely bugs and style issues.
- LockfileA record of exact dependency versions so every install is identical.
- Package ManagerA tool for installing and versioning dependencies, like npm, pip or cargo.
- Reading DocumentationGoing to the official docs first, and knowing how to navigate them.
- Searching EffectivelyFinding answers fast in error messages, issues, docs and forums.
21 more junior concepts
- Build ToolAutomating compile, test and package steps, like Make, Gradle or Vite.
- curlThe command-line tool for making HTTP requests.
- DependencyExternal code your project relies on.
- Editor ShortcutsLearning your editor's shortcuts and multi-cursor editing to work faster.
- EditorConfigA shared config for indentation and line endings across editors.
- Environment VariableA key-value setting passed to processes from their environment.
- Getting Help (man, --help, tldr)Reading a command's built-in documentation.
- Go to Definition / Find ReferencesNavigating code by symbol instead of searching text.
- grep / ripgrepSearching text across files from the terminal.
- HTTP Client Toolscurl, HTTPie, Postman or Bruno for calling APIs by hand.
- IDE / Code EditorYour main tool for editing, navigating, refactoring and debugging.
- Language Version ManagerTools like nvm, pyenv or mise for switching language versions.
- PATHThe list of directories the shell searches for commands.
- Pipes and RedirectionChaining commands with a pipe and sending output to files with >.
- Pre-commit HooksRunning linters and formatters automatically before each commit.
- Regex TestersTools for building and testing regular expressions interactively.
- ShellThe program interpreting your commands: bash, zsh, fish.
- SSH KeysKey pairs for passwordless authentication to servers and Git hosts.
- Task Runner / Project ScriptsNamed project commands, like npm scripts or a justfile.
- Terminal / Command LineControlling your computer and tools through text commands.
- Terminal Text Editors (Vim, Nano)Editing files on a server where there's no IDE, and how to quit Vim.
Mid-level
Own a feature end to end without hand-holding.
- Code GenerationGenerating boilerplate from schemas or templates.
- Dependency HellConflicting version requirements that can't all be satisfied.
- Dev ContainersA reproducible development environment defined as a container.
- DotfilesYour personal config files, often kept in Git.
- jqA command-line JSON processor.
- Language Server ProtocolThe protocol that gives editors autocomplete and diagnostics for any language.
- MakefileA classic way to define project tasks and their dependencies.
- Reading Library Source CodeReading a library's code when its docs don't answer your question.
- Shell ScriptingAutomating tasks with shell scripts.
- SSHSecurely logging into and running commands on remote machines.
- Static AnalysisFinding bugs by analyzing code without running it.
- Transitive DependencyA dependency of one of your dependencies.
Senior
Own an app's architecture, performance, and failure modes.
Nothing here yet.
Staff
Shape how many teams build, across apps.
Nothing here yet.
Principal
Set technical direction for the organization.
Nothing here yet.