Skip to main content

New Cohort Starts: Apr 05, 2027

Donate
Hashflag Graph · 375 evidence criteria

The Standard

What we train every troop to do, and how we check it.

A good software engineer finds the bug instead of guessing at it. Proves the fix with a test. Opens a pull request another engineer can review, and reviews someone else's code honestly. None of that comes from watching. It comes from reps, and from people who read your work and tell you the truth about it.

So we wrote the standard down and made it public.

The bar is written down

The Hashflag curriculum is a map of 375 topics across 53 domains and 8 subjects, joined by 529 prerequisite links. Every topic names the evidence that proves you have it, and sets an exit depth: how much help is still there when the topic is signed off.

Guided
We walk you through it.
35 of 375 topics
Scaffolded
You do it, with a spotter.
127 of 375 topics
Unassisted
You do it alone.
213 of 375 topics

Every domain has its own public page at /curriculum/<domain>, with each topic’s evidence printed next to it. Troops, mentors and hiring managers can all read the same bar. The graph’s structure is adapted from the Marble open curriculum taxonomy (ODbL-1.0).

What the bar looks like

Eight criteria, quoted word for word from the curriculum, in prerequisite order. A topic's depth is the longest chain of load-bearing prerequisites beneath it. Code review is not a footnote: it is its own domain.

Depth 0–1Find it and fix it

Diagnose flaky tests

“Fixes an intermittent failure at its cause”

Depth 0 · Scaffolded · Testing Foundations

Debug with breakpoints

“Finds a bug by stepping rather than by print”

Depth 1 · Unassisted · Editor & Debugger

Depth 5–7Review it and prove it

Open and review pull requests

“Merges a PR after addressing review comments”

Depth 5 · Unassisted · Version Control

Review code for correctness and risk

“Finds a real defect in someone else's diff”

Depth 6 · Scaffolded · Code Review

Write a reviewable pull request

“Opens a PR merged without a round of confusion”

Depth 7 · Unassisted · Code Review

Test API endpoints

“Covers happy path, validation failure and auth failure”

Depth 7 · Unassisted · Backend Testing

Depth 10–15Operate it and guard it

Roll back safely

“Executes a rollback under time pressure”

Depth 10 · Scaffolded · Delivery & CI/CD

Write a policy layer

“A disallowed action is refused before it runs”

Depth 15 · Guided · Harness Engineering

The full bar, subject by subject

Every topic, with the evidence that proves it and how much help is left when it is signed off. Every domain page lists the same topics with what they rest on.

Systems & Tooling57 topics

Filesystem

9 evidence criteria
  • Read the Unix directory hierarchyExplains where a config or log would live before lookingUnassisted
  • Navigate the filesystem from the command lineReaches any path in a repo without a file browserUnassisted
  • Distinguish absolute from relative pathsWrites a script that works from any working directoryUnassisted
  • Work with hidden files and dotfilesLocates and edits a dotfile without being told its pathUnassisted
  • Create files and directoriesScaffolds a nested project tree in one commandUnassisted
  • Inspect file contentsTails a running log and finds the failing lineUnassisted
  • Copy, move and rename from the shellReorganizes a directory tree without a GUIUnassisted
  • Locate files on diskFinds every file matching a pattern under a treeUnassisted
  • Delete safelyStates the blast radius of a delete before executingUnassisted

Text Processing

6 evidence criteria
  • Read and write basic regular expressionsWrites a pattern that matches the intended set and no moreScaffolded
  • Sort and deduplicateProduces a ranked frequency count from raw linesUnassisted
  • Transform streams with sedRewrites a field across a file without opening an editorScaffolded
  • Search text with grepExtracts matching lines from a directory of logsUnassisted
  • Count and compare textReports what changed between two filesUnassisted
  • Process columns with awkSums a column from a delimited fileScaffolded

Streams & Pipes

4 evidence criteria
  • Reason about stdin, stdout and stderrSeparates errors from results in a single commandUnassisted
  • Redirect output to filesCaptures errors and output to separate filesUnassisted
  • Compose commands with pipesAnswers a question about a log with a three-stage pipelineUnassisted
  • Substitute command outputFeeds one command's results into another as argumentsScaffolded

Shell Configuration

5 evidence criteria
  • Customize the shell promptShows branch and directory in the promptGuided
  • Explain shell startup filesPuts a setting in the file that actually loads itScaffolded
  • Manage environment variablesSets a variable a child process can readUnassisted
  • Write aliases and shell functionsShips a .zshrc with working aliases for daily workUnassisted
  • Configure PATHResolves a wrong-binary problem by reordering PATHUnassisted

Package Managers

4 evidence criteria
  • Manage Node packagesExplains why a package is a dependency and not globalUnassisted
  • Manage Python packagesReproduces an environment from a manifestUnassisted
  • Read a dependency manifestExplains what a project needs to run from its manifest aloneUnassisted
  • Install system packagesInstalls a required tool on a clean machineUnassisted

Processes & Signals

3 evidence criteria
  • Inspect running processesIdentifies the process holding a portUnassisted
  • Check system resourcesDiagnoses a disk-full or memory-pressure failureUnassisted
  • Control jobs and signalsStops a runaway process without rebootingUnassisted

Remote Systems & SSH

4 evidence criteria
  • Keep sessions aliveResumes work after a dropped connectionScaffolded
  • Connect to remote systems with SSHReaches a remote box and runs a commandUnassisted
  • Manage SSH keysSets up key auth and disables password loginUnassisted
  • Transfer files between hostsSyncs a directory to a remote host without re-copyingUnassisted

Shell Scripting

4 evidence criteria
  • Write and run a shell scriptRuns a script by name from anywhereUnassisted
  • Use variables and parameter expansionWrites a script that takes arguments safelyUnassisted
  • Branch and loop in shellAutomates a repeated task with conditionsUnassisted
  • Handle exit codes and errorsMakes a script stop on first failure with a useful messageUnassisted

Editor & Debugger

5 evidence criteria
  • Navigate an editor without the mouseReaches any symbol in a repo by keyboardUnassisted
  • Configure editor extensionsShips a workspace others can adoptUnassisted
  • Debug with breakpointsFinds a bug by stepping rather than by printUnassisted
  • Separate user and workspace settingsCommits settings a teammate inherits correctlyUnassisted
  • Configure a debug launcherAttaches a debugger to a running serverScaffolded

Version Control

13 evidence criteria
  • Explain Git's object and reference modelPredicts what a command will do to history before running itUnassisted
  • Stage and commit changesProduces a readable history of small commitsUnassisted
  • Branch for parallel workRuns a feature branch end to endUnassisted
  • Read and search historyFinds when and why a line changedUnassisted
  • Merge branchesIntegrates a branch and explains the resulting historyUnassisted
  • Manage remotesKeeps a fork current with upstreamUnassisted
  • Configure Git and ignore rulesKeeps generated files out of a repo permanentlyUnassisted
  • Undo work safelyRecovers from a bad commit without losing workUnassisted
  • Rebase and rewrite historyCleans a messy branch before reviewScaffolded
  • Resolve merge conflictsResolves a real conflict and explains the choiceUnassisted
  • Open and review pull requestsMerges a PR after addressing review commentsUnassisted
  • Find a regression with bisectIdentifies the commit that introduced a bugGuided
  • Recover with stash, cherry-pick and reflogRestores a commit that appeared lostScaffolded

Engineering Practice30 topics

Requirements

4 evidence criteria
  • Write user stories with acceptance criteriaWrites a story a second person can build fromUnassisted
  • Communicate with stakeholdersExplains a tradeoff to a non-engineer who then decidesScaffolded
  • Decompose an epic into storiesBreaks a feature into stories sized for one sprintScaffolded
  • Prioritize scopeDefends what was cut and whyScaffolded

Design Practice

2 evidence criteria
  • Diagram a system before building itProduces a diagram a reviewer can critiqueScaffolded
  • Write an architecture decision recordRecords a real decision with its rejected alternativesScaffolded

Agile Delivery

4 evidence criteria
  • Explain agile principlesDistinguishes a ceremony's purpose from its ritualUnassisted
  • Work in sprintsCompletes a sprint with a demonstrable incrementUnassisted
  • Run a kanban board with WIP limitsKeeps work in progress under the limit for a full cycleUnassisted
  • Estimate and track velocityProduces an estimate and reviews the variance afterGuided

Documentation

3 evidence criteria
  • Write a README people can act onA stranger runs the project from the README aloneUnassisted
  • Write a runbookSomeone else executes the procedure at 3amScaffolded
  • Document an APIPublishes docs a client developer builds againstUnassisted

Code Review

4 evidence criteria
  • Comment for the reader who followsLeaves a comment that survives reviewUnassisted
  • Review code for correctness and riskFinds a real defect in someone else's diffScaffolded
  • Write a reviewable pull requestOpens a PR merged without a round of confusionUnassisted
  • Give and take feedback constructivelyResolves a disagreement in review without escalationUnassisted

Algorithms & Data Structures

13 evidence criteria
  • Work with linked listsReverses and detects cycles in a listScaffolded
  • Analyze time and space complexityGives correct complexity for their own code under questioningUnassisted
  • Work a problem systematicallyTalks through an unseen problem without freezingUnassisted
  • Solve array and string problemsSolves reversal, palindrome and subarray problems unaidedUnassisted
  • Solve problems with hash maps and setsConverts a nested-loop solution to a single passUnassisted
  • Use stacks and queuesSolves a matching or ordering problem with the right structureUnassisted
  • Apply the two-pointer techniqueReduces a quadratic scan to linearUnassisted
  • Apply sliding windowSolves a contiguous-subarray problem in one passScaffolded
  • Perform under time pressurePasses a timed three-problem assessmentScaffolded
  • Think recursivelyWrites a correct recursive solution and its base caseUnassisted
  • Traverse treesSolves a path or sum problem on a treeUnassisted
  • Apply dynamic programming basicsConverts an exponential recursion to a memoized solutionGuided
  • Apply backtrackingSolves a constraint problem by searchGuided

Web Interface49 topics

HTML & Semantic Markup

5 evidence criteria
  • Structure an HTML documentProduces a valid document that passes the validatorUnassisted
  • Choose semantic elementsMarks up a page that outlines correctly for assistive techUnassisted
  • Use content elements correctlyBuilds a content page with a correct heading hierarchyUnassisted
  • Build accessible formsShips a form usable by keyboard and screen readerUnassisted
  • Constrain input in markupBlocks bad input before any JavaScript runsUnassisted

CSS & Layout

12 evidence criteria
  • Use custom propertiesThemes a page by changing variables onlyUnassisted
  • Target elements with selectorsStyles a target set without touching the markupUnassisted
  • Reason about specificity and the cascadeExplains why a rule lost and fixes it without !importantUnassisted
  • Control the box modelReproduces a spaced layout to specUnassisted
  • Style typography and colorImplements a type scale from a designUnassisted
  • Choose display and positionPlaces an element deliberately rather than by trialUnassisted
  • Make layouts responsiveOne layout works from 320px to desktopUnassisted
  • Add transitions and animationsAdds motion that respects reduced-motion preferencesScaffolded
  • Manage stacking contextFixes an overlap bug at its sourceScaffolded
  • Build one-dimensional layouts with FlexboxBuilds a responsive bar and card row without hacksUnassisted
  • Build two-dimensional layouts with GridReproduces a page layout with named grid areasUnassisted
  • Choose between Grid and FlexboxJustifies the choice in reviewUnassisted

The DOM

5 evidence criteria
  • Select elements from scriptReaches any element from JavaScriptUnassisted
  • Modify content, classes and stylesUpdates the UI in response to dataUnassisted
  • Handle eventsWires an interactive control end to endUnassisted
  • Create and remove elementsRenders a list from an arrayUnassisted
  • Delegate eventsHandles clicks on rows added after loadScaffolded

React

5 evidence criteria
  • Compose componentsBuilds a screen from reusable componentsUnassisted
  • Pass data with propsRenders a list of components from one data sourceUnassisted
  • Handle errors at component boundariesA failing widget degrades instead of taking the page downScaffolded
  • Manage component stateBuilds an interactive component whose state survives reviewUnassisted
  • Synchronize with effectsLoads data on mount without leaks or double fetchesScaffolded

Next.js

13 evidence criteria
  • Style with a utility frameworkImplements a design without leaving the markupUnassisted
  • Route with the file systemAdds a dynamic route with a working URLUnassisted
  • Compose layouts and templatesBuilds nested layouts without duplicationUnassisted
  • Handle loading and error statesEvery route has a defined loading and failure stateUnassisted
  • Choose server or client componentsJustifies each 'use client' in a diffScaffolded
  • Build route handlersExposes an endpoint with correct methods and status codesUnassisted
  • Fetch data on the serverServes fresh data without refetching on every requestScaffolded
  • Apply middlewareProtects a route before the handler runsScaffolded
  • Choose static, dynamic or incremental renderingExplains why a route is static or dynamicScaffolded
  • Mutate with server actionsSubmits a form that validates and revalidates dataScaffolded
  • Stream UI with SuspenseFirst paint precedes the slowest queryScaffolded
  • Apply optimistic updatesUI responds instantly and reconciles on failureGuided
  • Optimize for Core Web VitalsMoves a real metric on a real pageScaffolded

AI Interfaces

5 evidence criteria
  • Handle multimodal file inputUploads a document with visible progress and errorsScaffolded
  • Keep types safe across the stackA backend schema change breaks the build, not productionScaffolded
  • Manage conversation history in the UIReload restores the conversationUnassisted
  • Consume server-sent events in the browserRenders tokens as they arrive without bufferingScaffolded
  • Render streamed output progressivelyStreamed markdown never renders broken mid-tokenScaffolded

Media & Analytics

4 evidence criteria
  • Deliver media through a CDNServes responsive variants from one uploadScaffolded
  • Instrument user behaviorIdentifies a UX problem from recorded behaviorScaffolded
  • Choose image formats and sizesCuts page weight without visible quality lossUnassisted
  • Lazy-load and placeholder mediaLargest contentful paint improves measurablyUnassisted

Programming Languages61 topics

JavaScript Core

25 evidence criteria
  • Declare variables deliberatelyUses const by default and justifies each letUnassisted
  • Reason about primitive types and coercionExplains a coercion bug rather than guessingUnassisted
  • Manipulate arraysTransforms a dataset without a loop where a method fitsUnassisted
  • Work with objectsModels a record and reads it safelyUnassisted
  • Manipulate stringsFormats and parses text without a libraryUnassisted
  • Use operators and precedenceWrites conditions that read correctly and short-circuitUnassisted
  • Destructure and spreadWrites a function signature that destructures its inputUnassisted
  • Use classes and inheritanceChooses composition or inheritance and defends itUnassisted
  • Control flow with conditionals and loopsImplements branching logic that terminatesUnassisted
  • Apply immutability patternsFixes a bug caused by shared mutationScaffolded
  • Write and call functionsRefactors repeated logic into a tested functionUnassisted
  • Use arrow functions and thisFixes a broken this without a workaroundUnassisted
  • Reason about scope and hoistingExplains a reference error from the code aloneUnassisted
  • Transform with map, filter and reduceReplaces a nested loop with a readable chainUnassisted
  • Handle errorsFails with a message that identifies the causeUnassisted
  • Schedule work with timersDebounces an input without leaking timersUnassisted
  • Work with promisesSequences dependent async calls without nestingUnassisted
  • Organize code into modulesSplits a file into modules with no circular importsUnassisted
  • Write higher-order functionsBuilds a reusable wrapper around a functionScaffolded
  • Use closuresBuilds a counter or memoizer with closureScaffolded
  • Read a stack traceNames the failing line from the trace aloneUnassisted
  • Write async and awaitFetches and renders remote data with errors handledUnassisted
  • Coordinate concurrent promisesParallelizes independent calls and handles partial failureScaffolded
  • Call HTTP APIs from JavaScriptConsumes a real API including its error casesUnassisted
  • Use iterators and generatorsConsumes an async stream with for-awaitGuided

TypeScript Types

8 evidence criteria
  • Annotate typesAdds types to an existing file with no anysUnassisted
  • Model shapes with interfaces and type aliasesModels a domain object others reuseUnassisted
  • Configure the compilerTurns on strict mode and clears the errorsScaffolded
  • Compose union and intersection typesMakes an invalid state unrepresentableUnassisted
  • Write generic functions and typesWrites a reusable typed helperScaffolded
  • Narrow typesRemoves a cast by narrowing insteadScaffolded
  • Apply utility typesDerives a type instead of duplicating itUnassisted
  • Use conditional and mapped typesDerives a response type from a schema typeGuided

Python Core

17 evidence criteria
  • Declare variables and use dynamic typingPredicts aliasing behavior for a mutable valueUnassisted
  • Distinguish mutable from immutable typesExplains a surprising in-place mutationUnassisted
  • Work with lists and tuplesSlices and sorts a dataset correctlyUnassisted
  • Work with dictionaries and setsChooses dict or set for a lookup problemUnassisted
  • Format and manipulate stringsBuilds and parses text without concatenation sprawlUnassisted
  • Apply operatorsChooses is versus == correctlyUnassisted
  • Control flow in PythonImplements branching logic that terminatesUnassisted
  • Apply regular expressions in PythonExtracts fields from semi-structured textScaffolded
  • Write comprehensionsReplaces an accumulator loop with a comprehensionUnassisted
  • Define functionsWrites a function with a clear, documented signatureUnassisted
  • Read and write filesProcesses a file without leaking handlesUnassisted
  • Use *args and **kwargsWraps a function without losing its signatureScaffolded
  • Reason about scopeExplains an unexpected name errorUnassisted
  • Serialize and deserialize JSONRound-trips a record through JSONUnassisted
  • Handle exceptionsFails with a specific exception, never a bare exceptUnassisted
  • Define classesModels a domain object with a useful reprUnassisted
  • Apply inheritanceJustifies inheritance over compositionScaffolded

Production Python

11 evidence criteria
  • Manage virtual environmentsReproduces an environment on a clean machineUnassisted
  • Structure a Python projectAnother developer runs the project from the repoUnassisted
  • Format and lint automaticallyRepo passes lint in CI with no manual formattingUnassisted
  • Add type hintsAdds hints to a module that then passes mypyUnassisted
  • Write async PythonConverts a blocking call path to asyncUnassisted
  • Use the typing moduleTypes a JSON payload preciselyScaffolded
  • Run async calls concurrentlyCuts latency by parallelizing independent callsScaffolded
  • Call HTTP APIs asynchronouslyCalls an upstream API with a timeout and retryUnassisted
  • Produce async iteratorsStreams results without collecting them firstScaffolded
  • Check types staticallyA type error fails the buildScaffolded
  • Apply rate limiting and backoffSurvives a rate-limited upstream without hammering itScaffolded

Data & Storage25 topics

SQL

9 evidence criteria
  • Query rows with SELECTAnswers a question from one table without helpUnassisted
  • Join across tablesAnswers a business question spanning three tablesUnassisted
  • Insert, update and delete safelyRuns a mutation in a transaction after checking the row countUnassisted
  • Aggregate and groupProduces a correct grouped reportUnassisted
  • Use transactionsRolls back a partial failure cleanlyScaffolded
  • Reason about indexesExplains a slow query from its planScaffolded
  • Compose subqueries and CTEsRewrites a nested query as a readable CTE chainScaffolded
  • Read a query planIdentifies a sequential scan and fixes itGuided
  • Apply window functionsProduces a running total or per-group rankGuided

Data Modeling

5 evidence criteria
  • Normalize a schemaDesigns a schema and defends its keysUnassisted
  • Choose primary and foreign keysPicks a key that survives a real-world edge caseUnassisted
  • Denormalize deliberatelyJustifies a denormalization with a measured read pathGuided
  • Model one-to-many and many-to-manyImplements a join table with correct constraintsUnassisted
  • Version schema changes with migrationsShips a migration that runs forward and backScaffolded

Data Ingestion

5 evidence criteria
  • Ingest from files and APIsLoads an external dataset into a tableUnassisted
  • Clean and normalize recordsTurns a messy export into a loadable datasetUnassisted
  • Build a repeatable ingestion pipelineReruns a failed load without duplicating rowsScaffolded
  • Checkpoint long-running jobsResumes a job after a crash mid-batchScaffolded
  • Schedule and monitor batch jobsA failed nightly job pages someoneGuided

Embeddings & Vectors

6 evidence criteria
  • Explain embeddingsExplains why two texts are near in vector spaceUnassisted
  • Chunk documents for retrievalChooses a chunk size and defends it against retrieval resultsUnassisted
  • Generate embeddings at scaleEmbeds a corpus without exceeding limits or costScaffolded
  • Store and query vectors in PostgresRuns a similarity query joined to metadataUnassisted
  • Choose a vector indexJustifies an index choice with measured recallScaffolded
  • Filter retrieval by metadataRestricts results to a tenant or date rangeScaffolded

Services & APIs29 topics

HTTP

6 evidence criteria
  • Explain the request-response modelTraces a request end to endUnassisted
  • Choose HTTP methodsPicks correct methods under reviewUnassisted
  • Work with headers and content typesDebugs a failure caused by a wrong content typeUnassisted
  • Return correct status codesReturns 4xx and 5xx correctly for real failuresUnassisted
  • Reason about idempotencyMakes a retryable endpoint safe under duplicationScaffolded
  • Configure CORSFixes a CORS failure at the server, not with a proxyUnassisted

API Contracts

4 evidence criteria
  • Design an API contractPublishes a contract a second developer builds againstScaffolded
  • Express a contract in OpenAPIShips a spec that generates a working clientUnassisted
  • Design error responsesA client can branch on the error bodyUnassisted
  • Version an APIShips a breaking change behind a versionScaffolded

Validation & Pydantic

7 evidence criteria
  • Validate at the boundaryBad input fails at the edge with a useful messageUnassisted
  • Define schemas with PydanticModels a payload that rejects an invalid fieldUnassisted
  • Write field validatorsEnforces a domain rule like a token ceilingUnassisted
  • Control serializationExcludes internal fields from a responseUnassisted
  • Manage configuration as typed settingsA missing environment variable fails at startupUnassisted
  • Generate JSON Schema from modelsSchema and code cannot driftScaffolded
  • Write model validatorsRejects a payload where two fields disagreeScaffolded

FastAPI

9 evidence criteria
  • Rate-limit endpointsA burst is throttled rather than passed throughScaffolded
  • Route requests in FastAPIServes a working endpoint with typed parametersUnassisted
  • Bind request bodies to modelsEndpoint rejects a malformed body with 422Unassisted
  • Use dependency injectionInjects a database session and a current userScaffolded
  • Log requests with correlationOne request is traceable across servicesUnassisted
  • Run background tasksReturns immediately and completes work afterScaffolded
  • Declare response modelsResponse shape is guaranteed by typeUnassisted
  • Authenticate API requestsUnauthenticated requests are rejected before handlersUnassisted
  • Manage lifespan and poolingNo connection leaks across restartsScaffolded

Streaming Responses

3 evidence criteria
  • Stream from an async iteratorTime-to-first-token drops measurablyScaffolded
  • Serve server-sent eventsStreams a completion token by tokenScaffolded
  • Handle errors mid-streamA mid-stream failure is visible to the clientGuided

AI Systems58 topics

Model Foundations

9 evidence criteria
  • Distinguish AI, ML, deep learning and LLMsCorrects a conflated claim in plain languageUnassisted
  • Compare learning paradigmsClassifies a described system by paradigmUnassisted
  • Explain tokenizationPredicts why a string costs more tokens than expectedUnassisted
  • Explain in-context learningExplains why a correction does not persist across sessionsUnassisted
  • Explain the transformer at a working levelExplains why context length costs what it costsScaffolded
  • Explain the context windowCounts tokens for a real payload before sendingUnassisted
  • Compute token economicsEstimates monthly spend for a feature before building itUnassisted
  • Navigate the model landscapeChooses a model for a task and defends it on cost and latencyUnassisted
  • Reason about nondeterministic outputDesigns a test that tolerates variation without being uselessUnassisted

Model Integration

12 evidence criteria
  • Configure a model clientCalls a model from application codeUnassisted
  • Tune generation parametersExplains a parameter change by its effect on outputUnassisted
  • Configure safety settingsJustifies each safety threshold chosenScaffolded
  • Maintain chat contextMulti-turn conversation stays coherent within budgetUnassisted
  • Process images and documentsAnswers a question about an uploaded PDFScaffolded
  • Enforce spend caps in codeA runaway loop hits the cap, not the invoiceScaffolded
  • Choose sync or async callsConverts a blocking model call to asyncUnassisted
  • Write system instructionsBehavior holds across varied user messagesUnassisted
  • Stream model outputStreams a completion end to endUnassisted
  • Get structured outputParses a typed object with no string cleanupUnassisted
  • Handle schema validation failuresRetries or degrades instead of crashingScaffolded
  • Apply a circuit breaker to model callsRepeated upstream failure trips the breakerScaffolded

Tool Use & MCP

6 evidence criteria
  • Declare tools for a modelA model calls the right tool with valid argumentsScaffolded
  • Execute and return tool resultsCompletes a round trip through a real toolScaffolded
  • Expose capability over MCPA separate client uses the same tools unmodifiedGuided
  • Orchestrate multiple toolsResolves a task requiring two different toolsGuided
  • Recover from tool failureA failed tool call does not end the interactionScaffolded
  • Draw the model boundaryJustifies why a step is deterministic code, not a promptScaffolded

Prompt Engineering

5 evidence criteria
  • Recognize obsolete prompting tricksRemoves an incantation and shows the score did not dropScaffolded
  • Write direct instructionsA zero-shot instruction produces usable outputUnassisted
  • Use examples deliberatelyJustifies including or dropping few-shot examplesUnassisted
  • Structure prompts for reliable parsingOutput parses on the first attempt across a test setUnassisted
  • Version prompts as templatesA prompt change is reviewable in a diffScaffolded

Context Engineering

7 evidence criteria
  • Treat the context window as a budgetCuts token spend on a working endpoint with no eval dropUnassisted
  • Account for position effectsMoves critical instructions and measures the differenceScaffolded
  • Recognize context rotIdentifies degradation across a long sessionScaffolded
  • Cache reusable contextCost per request drops measurablyScaffolded
  • Carry structured state instead of transcriptsReplaces transcript replay and holds qualityScaffolded
  • Decide what to evictDefends an eviction policy against a failure caseScaffolded
  • Compress and summarize historyHalves history tokens without losing task stateScaffolded

Retrieval (RAG)

8 evidence criteria
  • Design a retriever-generator systemDiagrams a RAG system and names its failure pointsUnassisted
  • Inject retrieved contextAnswers are grounded in retrieved chunksUnassisted
  • Combine keyword and semantic searchHybrid beats vector-only on a held-out query setScaffolded
  • Expand and rewrite queriesPoorly worded queries return the right documentsGuided
  • Measure retrieval qualityReports retrieval metrics before and after a changeScaffolded
  • Rerank retrieved candidatesPrecision at k improves on the eval setGuided
  • Return grounded citationsEvery answer links to the chunk supporting itScaffolded
  • Measure generation faithfulnessCatches a fabricated answer with a scored checkScaffolded

Agents

11 evidence criteria
  • Run an agent loopCompletes a multi-step task with a stop conditionScaffolded
  • Plan before actingProduces a plan a human can approve before executionScaffolded
  • Reflect on resultsA failed step is retried differently, not identicallyGuided
  • Bound loops with budgetsA stuck loop terminates at the ceilingScaffolded
  • Manage working memoryState survives a step without replaying everythingScaffolded
  • Insert human approvalAn irreversible action requires approvalScaffolded
  • Persist long-term memoryA prior session's fact is recalled correctlyGuided
  • Model an agent as a state graphDraws the graph and names each transition conditionGuided
  • Decide when a step needs an agentReplaces an agent with a deterministic chain and defends itGuided
  • Checkpoint and resume agent stateA crashed run resumes from its last checkpointGuided
  • Coordinate multiple agentsTwo agents complete a task neither could aloneGuided

Reliability & Operations66 topics

Testing Foundations

4 evidence criteria
  • Reason about the testing pyramidJustifies where a given test belongsUnassisted
  • Diagnose flaky testsFixes an intermittent failure at its causeScaffolded
  • Write tests firstProduces a feature with tests written before codeScaffolded
  • Interpret coverage honestlyExplains why a covered line is still untestedUnassisted

Frontend Testing

6 evidence criteria
  • Unit test JavaScriptCovers a utility module with meaningful assertionsUnassisted
  • Mock dependenciesTests a function without hitting the networkUnassisted
  • Test components as a user wouldTest survives a refactor that changes internalsUnassisted
  • Test user interactionsAsserts on outcome after an interactionUnassisted
  • Write end-to-end testsA critical path is covered end to endScaffolded
  • Write durable selectorsTest survives a markup changeScaffolded

Backend Testing

6 evidence criteria
  • Test Python with pytestCovers a module with fixtures instead of setup duplicationUnassisted
  • Test async codeCovers an async path without event-loop errorsScaffolded
  • Test API endpointsCovers happy path, validation failure and auth failureUnassisted
  • Mock external APIsSuite runs offline with no live API callsUnassisted
  • Test against a real databaseIntegration suite is repeatable and isolatedScaffolded
  • Test streaming endpointsVerifies chunk order and stream terminationGuided

LLM Evals

8 evidence criteria
  • Run human evaluationA human review round changes a shipping decisionScaffolded
  • Recognize silent LLM failureIdentifies a confident wrong answer in reviewUnassisted
  • Build an evaluation datasetAssembles a 20-case set covering known failure modesUnassisted
  • Write deterministic checksCatches malformed output without a modelUnassisted
  • Use a model as a judgeRuns a judged eval over a datasetScaffolded
  • Validate the judgeReports judge agreement rates before trusting itScaffolded
  • Gate changes on evalsA prompt change that lowers the score fails CIScaffolded
  • Sequence evals by costMost failures are caught before a judge is invokedScaffolded

Observability

7 evidence criteria
  • Instrument key metricsA dashboard shows the four numbers that matterScaffolded
  • Configure alertsAn alert fires on a real degradation, not on noiseScaffolded
  • Track and control AI costReports cost per request and reduces itScaffolded
  • Trace LLM applicationsReconstructs one request's full path from tracesUnassisted
  • Emit structured logsQueries logs by field to answer a questionUnassisted
  • Correlate logs across servicesFollows one user request across two servicesScaffolded
  • Keep sensitive data out of logsA log review finds no user secretsUnassisted

Performance

3 evidence criteria
  • Load-test a serviceEstablishes a throughput ceiling with evidenceScaffolded
  • Set performance thresholdsA regression fails the pipelineScaffolded
  • Load-test streaming endpointsReports first-token latency at concurrencyGuided

Delivery & CI/CD

12 evidence criteria
  • Ship behind feature flagsA feature ships dark and is enabled separatelyScaffolded
  • Automate workflows with CIA push runs lint, types and tests automaticallyUnassisted
  • Gate merges on checksA failing check blocks a mergeUnassisted
  • Containerize an applicationImage builds and runs identically anywhereUnassisted
  • Deploy a frontend with previewsEvery PR gets a working preview URLUnassisted
  • Run a local stackOne command brings the whole stack upUnassisted
  • Optimize image size and layersImage shrinks measurably without losing functionScaffolded
  • Deploy a container to a managed runtimeService is live on a custom domainUnassisted
  • Manage secrets and environment configNo credential appears in the repositoryUnassisted
  • Automate deploymentMerge to main reaches production without manual stepsScaffolded
  • Roll back safelyExecutes a rollback under time pressureScaffolded
  • Run a production readiness reviewCompletes a launch checklist with evidence per itemScaffolded

Harness Engineering

7 evidence criteria
  • Distinguish a harness from an execution layerExplains why bash access is not a harnessScaffolded
  • Add an independent checkerBlocks a known failure mode without blocking correct workScaffolded
  • Set retry and budget ceilingsA failing agent stops instead of retrying foreverScaffolded
  • Separate connective from compensatory harnessLabels each harness component and deletes a stale oneGuided
  • Encode a harness after observed failurePoints to the failure log that justified a componentGuided
  • Write a policy layerA disallowed action is refused before it runsGuided
  • Define rollback boundariesAn agent change is undone cleanlyGuided

AI Safety & Governance

10 evidence criteria
  • Identify sources of biasNames a plausible bias source in a real systemUnassisted
  • Measure and mitigate biasReports a fairness metric before and after a changeGuided
  • Make AI decisions explainableA user-facing explanation survives scrutinyGuided
  • Maintain audit trailsReconstructs a past decision from the audit logScaffolded
  • Apply AI governance frameworksProduces a model card for a shipped featureGuided
  • Recognize data poisoning riskNames the ingestion point an attacker would targetGuided
  • Run an AI incident responseExecutes an incident runbook in a drillGuided
  • Defend against prompt injectionAn injected instruction in a document is not executedScaffolded
  • Prevent PII leakageA red-team prompt fails to extract stored dataUnassisted
  • Implement content safety filtersFilter blocks a harmful request and logs itScaffolded

Career

3 evidence criteria
  • Answer behavioral questions from serviceTells a scoped story with a measurable outcomeUnassisted
  • Handle a system design interviewDesigns a system and defends the tradeoffsGuided
  • Build a portfolio of shipped workPortfolio links to merged work with usersUnassisted

Evidence, not attendance

Nothing completes because a video ended

Each concept names the thing you produce and the criterion it is judged against. Trained to standard, or not trained.

Someone else grades the gate

At an evidence gate you prove it alone, graded by someone other than your mentor.

A working engineer reviews your code

Within your first month we pair you with a working software engineer who runs 1-on-1s, reviews your code and challenges your thinking. The question they bring to your work: would this survive code review at a real company?

The human hours go to pairing, review and building

The platform teaches the material that doesn't change, so people spend their time pairing with you, reviewing your code and building real things. Your mentor reads your pre-gate artifact and returns it within 48 hours.

Some mistakes only a reviewer catches

In weeks 07–10, the data layer, your mentor's job is correctness review. Bad schema and query decisions fail quietly, and gates alone will not catch them.

Build a record

There is no capstone. You build a record instead: blogs, shipped features and pull requests.

Opened, reviewed, revised, merged, with the conversation still attached. A PR history is the most honest record there is of how someone works with other people.

The portfolio checklist asks for the same thing from the other side: code reviews you gave on merged PRs. See the work in the projects catalog.

The door stays open

The standard is what we train to, not a finish line. Meeting it doesn't end your mentorship, and the accelerator ending doesn't either.

“You never truly graduate. Here you truly are family. The door is open for as long as you need it.”
Jerome Hardaway, Founder & Executive Director

Earn the title

The Software Engineering Accelerator. Vets Who Code is a 501(c)(3) nonprofit. EIN 86-2122804. What we teach is public and auditable.

Length
17 weeks
Commitment
20–30 hrs/week
Format
Remote-first · platform + sessions
Cost
$0
Eligibility
U.S. veterans, service members & spouses
Outcome
Software engineer