Type Systems
How languages classify values and catch mistakes before they run.
Backend Engineer track
Junior
Write correct code, ship small changes safely, ask good questions.
- EnumA type with a fixed set of named values.
- Nullable TypeA type that explicitly allows null, forcing you to handle it.
- Static vs Dynamic TypingTypes checked at compile time vs at runtime.
- Strong vs Weak TypingHow willingly a language converts between types implicitly.
- Type AliasA new name for an existing type.
- Type AnnotationExplicitly declaring the type of a variable or parameter.
- Type SystemThe rules a language uses to assign and check types.
Mid-level
Own a feature end to end without hand-holding.
- Discriminated UnionA union whose members are told apart by a tag field.
- Duck TypingIf it has the right methods, it's the right type.
- Finite State MachineA model with a fixed set of states and allowed transitions, e.g. an order going from paid to shipped.
- GenericsCode that works over many types while keeping type safety.
- Runtime ValidationChecking that untrusted data matches a type at runtime, e.g. with Zod or Pydantic.
- Type InferenceThe compiler working out types without annotations.
- Type NarrowingRefining a broad type to a specific one through checks.
- Union TypeA value that can be one of several types.
Senior
Own a system, its failure modes, and its trade-offs.
- Algebraic Data TypesComposing types from "and" (products) and "or" (sums).
- Covariance and ContravarianceHow subtyping of generic types follows their type parameters.
- Structural vs Nominal TypingCompatible by shape vs compatible by declared name.
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.
- EnumA type with a fixed set of named values.
- Nullable TypeA type that explicitly allows null, forcing you to handle it.
- Static vs Dynamic TypingTypes checked at compile time vs at runtime.
- Strong vs Weak TypingHow willingly a language converts between types implicitly.
- Type AliasA new name for an existing type.
- Type AnnotationExplicitly declaring the type of a variable or parameter.
- Type SystemThe rules a language uses to assign and check types.
Mid-level
Own pipelines and models end to end, including their quality.
- Discriminated UnionA union whose members are told apart by a tag field.
- Duck TypingIf it has the right methods, it's the right type.
- Finite State MachineA model with a fixed set of states and allowed transitions, e.g. an order going from paid to shipped.
- GenericsCode that works over many types while keeping type safety.
- Runtime ValidationChecking that untrusted data matches a type at runtime, e.g. with Zod or Pydantic.
- Type InferenceThe compiler working out types without annotations.
- Type NarrowingRefining a broad type to a specific one through checks.
- Union TypeA value that can be one of several types.
Senior
Design the platform's storage, processing and modeling choices.
- Algebraic Data TypesComposing types from "and" (products) and "or" (sums).
- Covariance and ContravarianceHow subtyping of generic types follows their type parameters.
- Structural vs Nominal TypingCompatible by shape vs compatible by declared name.
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.
- any vs unknownTypeScript's escape hatches, and why unknown is the safe one.
- EnumA type with a fixed set of named values.
- Nullable TypeA type that explicitly allows null, forcing you to handle it.
- Static vs Dynamic TypingTypes checked at compile time vs at runtime.
- Strong vs Weak TypingHow willingly a language converts between types implicitly.
- Type AliasA new name for an existing type.
- Type AnnotationExplicitly declaring the type of a variable or parameter.
- Type SystemThe rules a language uses to assign and check types.
- Union TypeA value that can be one of several types.
Mid-level
Own a feature end to end without hand-holding.
Core: start here
- Discriminated UnionA union whose members are told apart by a tag field.
- GenericsCode that works over many types while keeping type safety.
- Runtime ValidationChecking that untrusted data matches a type at runtime, e.g. with Zod or Pydantic.
- Type NarrowingRefining a broad type to a specific one through checks.
- Utility TypesBuilt-in TypeScript type transformers like Partial, Pick and Record.
6 more mid-level concepts
- Duck TypingIf it has the right methods, it's the right type.
- Finite State MachineA model with a fixed set of states and allowed transitions, e.g. an order going from paid to shipped.
- Intersection TypeA type combining all the members of several types.
- Structural vs Nominal TypingCompatible by shape vs compatible by declared name.
- Type GuardA check that tells the type checker a value's specific type.
- Type InferenceThe compiler working out types without annotations.
Senior
Own an app's architecture, performance, and failure modes.
- Algebraic Data TypesComposing types from "and" (products) and "or" (sums).
- Covariance and ContravarianceHow subtyping of generic types follows their type parameters.
Staff
Shape how many teams build, across apps.
Nothing here yet.
Principal
Set technical direction for the organization.
Nothing here yet.