A guide to full stack development
What are all the skils required to excel at full stack development?
Knowledge is a fractal - you can infinitely zoom in and expand your knowledge of a topic, which then reveals an infinity of sub topics, thus creating a never-ending cycle…
DISCLAIMER: None of the content on this page is complete (nor could it ever be). Over time, I will develop this content further and further, keeping the advice practical and relevant to generalist software engineers.
Introduction
I believe every ‘great’ engineer should have a baseline knowledge of a few topics. Having a solid knowledge foundation enables one to excel in a (or more than a) niche of their choosing. Lacking that foundation can be detrimental to one’s impact on the projects or organizations they’re part of!
Full transparency: I am adept at some of the topics listed below, but not all… I aim to improve my knowledge in all these areas by writing about these over a few months or more!
An investment in knowledge pays the best interest. - Ben Franklin
Today this is a list; in the future, I will develop each section and add valuable links to other resources.
I am curious to know what other engineers think! Please DM me suggestions, ideas, skills I missed, and any feedback!
What does full stack mean?
Full stack development means writing both the client-side (frontend) and server-side (backend) parts of applications. The final outcome is building complete application and/or websites, as well as setting up any instrumentation such as automated testing (QA) via Continuous Integration (CI) and continuously deploying (CD) code changes to production environments.
Hardware
Von Neumann architecture
https://en.wikipedia.org/wiki/Von_Neumann_architecture
- CPU (processing and control unit)
- memory (RAM: random access memory)
- mass storage
- I/O
Stored programs keep program instructions / data in RAM

In contrast, the Harvard architecture is a computer architecture with separate storage and signal pathways for instructions and data.
Modern CPUs use aspects of both.
Graphics, GPUs, monitors
Power
Input/Output
Software and programming languages
Language Design
https://www.red-gate.com/simple-talk/opinion/geek-of-the-week/rich-hickey-geek-of-the-week/
- pure functions
- type safety vs. flexibility (think go’s interfaces)
- immutability
- etc.
Programming Paradigms
Object Oriented Programming
Functional Programming
Imperative
Software architecture and design patterns
- CQRS
- Control theory
Domain-Driven Development
Compiled languages
Compilers
- frontends
- backends
Interpreted languages
Systems engineering
Operating systems
Filesystems
System calls (syscalls)
Schedulers
Memory management
- paging
- memory segmentation
Networking
- sockets
- selectors
- etc.
OSI model
https://en.wikipedia.org/wiki/OSI_model
- Physical
- Data link
- Network layer
- Transport layer
- Session layer
- Presentation layer
- Application layer
Useful networking protocols
- TCP/IP
- UDP
- DNS
- HTTP1.1/2
- Web sockets
- WebRTC
- etc.
Generalist knowledge
Algorithms
Algorithmic complexity
Sorting Algorithms
Graph Algorithms
Finite state machines
Parallel programming
Data structures
Lists
- backing mechanisms (arrays, linked lists, etc.)
- O(N) iteration time, O(1)-O(N) access/modification time
Hashmaps/Hashtables
- Map API:
- get, put, containsKey, etc.
- O(1) modification/access time, unless hash collisions
Sets
- O(1) modification/access time
- backing data structures: hashmaps, trees
Distributed hash tables
- hash tables that are partitioned on multiple machines
Consistent hashing
- mechanism to resize hash tables while having to remap only a small subset of keys (total number of keys / number of slots/buckets)
Security
- OWASP Top 10
Cryptography
- public/private keys
- SSL/TLS
Observability, monitoring, telemetry
- Logstash
- Grafana
- Opentracing
Search
- Apache Lucene
- SOLR
- ElasticSearch
Infrastructure and hosting
Self-hosted
- Servers, VMs, Hypervisors, bare-metal, containers
- EC2, VMs, VPSes, containers, cloud services
- Kubernetes
Cloud services
- Infrastructure-as-a-service
- Platform-as-a-service
- Kubernetes
- AWS
- GCP
- Azure
- other clouds
JAMstack
- Javascript, API, and Markup
- tools: GatsbyJS, Hugo, etc.
- deploy to: Gatsby Cloud, Netlify, Vercel, AWS Amplify
Specializations
Backend software engineering
App Servers
Databases
- relational vs. non-relational
- SQL vs. NoSQL
- popular databases
Caches
- e.g., Redis
Message queues
CDNs
Performance/benchmarking
Concurrency
Parallelism
Distributed Systems
System Design and Scaling
API Design
Code Reviews
Production Support
- support rotations
- support engineer organizations
Debugging
Data science
Artificial Intelligence
Machine Learning
- Supervised
- Unsupervised
Computer vision
- image processing
Neural Networks
Deep Learning
System/service reliability engineers (SREs)
- automate everything
- measure everything
- manage incidents
- use SLOs (measurements for your service from your user’s point of view; pick a reasonable target!) e.g.: 99.5% of requests will complete without error within 2000ms
- encourage and enable cross-team collaboration
Developer Productivity engineers
- CI/CD
- IDEs
- vim vs. emacs
- reproducible environments
- Mac vs. Linux vs. Windows
- fast-typing
- shortcuts
- IDEs
- dev environments (Docker, Kind, devbox, etc.)
- build systems and dependency managers (e.g. Bazel, Gradle, Pip, cargo, npm, etc.)
Network engineers
Security engineers
Frontend software engineering
The stack:
- web apps
- browser
- Backend
- OS
- BIOS/UEFI