DeveloperHA / Learning library
DeveloperHA learning library

Learn the next thing — not everything.

Short, practical tutorials for the moment you need an answer: how to write a CTE, choose a C# feature, read a Dockerfile, avoid an EF Core trap or understand a Kubernetes probe.

14 focused paths
64 quick lessons
0 accounts or progress walls

Choose a path

Start with a track when you want a sequence, or search the quick answers below when you only need one concept.

T-SQL

T-SQL from query shape to production

Learn query patterns that make SQL Server work easier to read, review and tune.

4 quick lessons30–45 min
Open learning path →
C#

C# features by version, with practical patterns

Find the C# feature you need, understand which language version introduced it and use it without losing clarity.

4 quick lessons35–50 min
Open learning path →
Docker + .NET

Docker for a .NET app, without the mystery

Understand images, containers and a production-minded multi-stage Dockerfile for ASP.NET Core.

4 quick lessons30–45 min
Open learning path →
EF Core

EF Core patterns that prevent surprises

Use DbContext, projections, migrations and concurrency deliberately in real .NET applications.

4 quick lessons30–45 min
Open learning path →
ASP.NET APIs

ASP.NET APIs that are easy to use and operate

Design HTTP endpoints with clear contracts, validation, cancellation, errors and operational behavior.

4 quick lessons30–45 min
Open learning path →
Git

Git habits for safer delivery

Use commits, branches and recovery commands to make collaboration and releases easier to review.

4 quick lessons25–35 min
Open learning path →
AWS + .NET

AWS concepts for .NET developers

Build a useful mental model for identity, configuration, compute, data and observability on AWS.

4 quick lessons30–45 min
Open learning path →
Kubernetes

Kubernetes concepts for application developers

Understand the Kubernetes objects an application team touches and the signals that keep a deployment healthy.

4 quick lessons30–45 min
Open learning path →
AI fundamentals

AI fundamentals for working developers

Understand models, context, tokens, structured output, tools and evaluation without treating AI as magic.

5 quick lessons35–50 min
Open learning path →
Prompt engineering

Prompt engineering as interface design

Write prompts that define a task, context, constraints and success criteria clearly enough to test and improve.

5 quick lessons35–50 min
Open learning path →
AI-assisted development

A disciplined AI-assisted development workflow

Use AI to understand, plan, implement, test and review software without surrendering engineering judgment.

5 quick lessons35–50 min
Open learning path →
AI routing

AI gateways and model routing in practice

Understand endpoints, providers, fallbacks, local runtimes and self-hosted gateways such as 9Router, OmniRoute and LiteLLM.

5 quick lessons35–50 min
Open learning path →
Agents + MCP

Agents, MCP and safe tool-enabled workflows

Understand agent loops, Model Context Protocol, permissions, memory and evaluation before giving an assistant real actions.

6 quick lessons35–50 min
Open learning path →
LLM app development

LLM application development from API to RAG

Build the small, explicit pieces of an LLM feature: API calls, streaming, structured output, tools, embeddings and basic retrieval-augmented generation.

6 quick lessons45–65 min
Open learning path →

No matching learning items. Try a broader phrase or choose All.

Quick answers

Every card is deliberately small: explanation, copyable example, common trap and a link to a working DeveloperHA tool.

T-SQL · CTEUse a CTE to name a query step

A common table expression gives a complex statement a named, local step without creating a permanent table.

5 min · Open lesson →
T-SQL · Window functionsKeep rows while calculating across them

Window functions calculate rankings, running totals or previous values without collapsing the result into one row per group.

6 min · Open lesson →
T-SQL · JoinsUse EXISTS when you only need to test membership

EXISTS expresses “at least one related row exists” and avoids accidental duplicate parent rows a join can introduce.

5 min · Open lesson →
T-SQL · PerformanceKeep indexed filters searchable

A SARGable predicate lets SQL Server use an index more effectively instead of applying a function to every candidate row.

6 min · Open lesson →
C# · Version choiceSeparate C# language version from .NET runtime

The compiler language version controls syntax and features; the target framework controls the runtime and base libraries.

5 min · Open lesson →
C# · Data modelingChoose records and classes by identity

Records communicate value-like data and generated equality; classes usually communicate identity, lifecycle or mutable behavior.

6 min · Open lesson →
C# · SafetyTreat nullable annotations as a design conversation

Nullable reference types tell the compiler where null is expected; they improve feedback but do not add runtime validation.

5 min · Open lesson →
C# · AsyncMake asynchronous work cancellable

Pass a CancellationToken from the request boundary into I/O operations so abandoned work can stop early.

6 min · Open lesson →
Docker + .NET · Mental modelAn image is a recipe; a container is a running instance

An image packages filesystem layers and metadata; a container is an isolated process created from that image.

4 min · Open lesson →
Docker + .NET · DockerfileRead a .NET Dockerfile line by line

A multi-stage Dockerfile uses the SDK to publish, then copies only the published app into a smaller runtime image.

8 min · Open lesson →
Docker + .NET · ConfigurationKeep configuration outside the image

Build once and configure at runtime through environment variables, secret mounts or the platform secret store.

5 min · Open lesson →
Docker + .NET · ComposeUse Compose to describe local dependencies

Compose gives a local .NET app a repeatable network, database, volume and health-check definition.

7 min · Open lesson →
EF Core · DbContextChoose tracking based on intent

Track entities when you intend to modify them; use no-tracking queries for read-only projections.

5 min · Open lesson →
EF Core · Query behaviorFind N+1 queries before production

Loading a related collection inside a loop can create one query per row; project or include deliberately instead.

6 min · Open lesson →
EF Core · Schema changesTreat migrations as deployment code

A migration can lock tables, rewrite data or fail on existing values, so review it like application code.

6 min · Open lesson →
EF Core · ConcurrencyMake lost updates visible

A concurrency token lets EF Core detect that another writer changed a row since you read it.

6 min · Open lesson →
ASP.NET APIs · ContractsLet HTTP status codes carry meaning

A predictable status code and response shape help clients handle success, absence, validation and conflict without guessing.

5 min · Open lesson →
ASP.NET APIs · InputValidate at the boundary, enforce in the domain

Transport validation checks shape and basic rules; domain logic protects business invariants wherever the object is used.

5 min · Open lesson →
ASP.NET APIs · ErrorsReturn errors clients can act on

Problem Details gives HTTP APIs a consistent error envelope without leaking stack traces or internal secrets.

5 min · Open lesson →
ASP.NET APIs · IntegrationMake retries safe for commands

A client may retry after a network failure even when the server already processed the command, so define an idempotency strategy.

6 min · Open lesson →
Git · HistoryMake commits tell one story

A focused commit is easier to review, revert and move between branches than a mixed change.

4 min · Open lesson →
Git · BranchesChoose rebase or merge by collaboration policy

Both integrate history; the important rule is whether you are rewriting commits other people already use.

5 min · Open lesson →
Git · RecoveryUse revert for shared history and reset for local cleanup

Revert creates a new commit that undoes shared work; reset moves local branch pointers and can discard work.

5 min · Open lesson →
Git · DebuggingFind a regression with bisect

Git bisect uses a known-good and known-bad commit to narrow a regression with logarithmic search.

5 min · Open lesson →
AWS + .NET · IAMStart with identity and least privilege

An AWS design is incomplete until it says which identity can do what, to which resource and under which conditions.

6 min · Open lesson →
AWS + .NET · ConfigurationSeparate configuration from secrets

A .NET application should read environment-specific settings at runtime and retrieve secrets from a managed mechanism.

5 min · Open lesson →
AWS + .NET · ArchitectureChoose compute by operational responsibility

The right AWS compute service depends on how much scheduling, patching, scaling and networking you want to own.

6 min · Open lesson →
AWS + .NET · OperationsMake a cloud service explain its failures

Logs, metrics and traces answer different questions; an incident needs all three connected by useful correlation context.

6 min · Open lesson →
Kubernetes · Mental modelSeparate Pod, Deployment and Service

A Pod runs containers, a Deployment manages replica rollout and a Service gives clients a stable network identity.

6 min · Open lesson →
Kubernetes · ConfigurationUse ConfigMaps and Secrets with clear boundaries

Keep non-secret configuration and sensitive values separate, then inject them into the container at runtime.

5 min · Open lesson →
Kubernetes · ResourcesGive the scheduler a resource contract

Requests influence placement; limits cap usage. Both need values based on observation rather than copied defaults.

5 min · Open lesson →
Kubernetes · ReliabilityUse probes to describe health, not hope

Readiness controls traffic, liveness detects a stuck process and startup probes protect slow-starting applications.

6 min · Open lesson →
AI fundamentals · Core conceptsThink in messages, context and budgets

An AI request is a context assembled from instructions, conversation, tool results and user input; token limits constrain what the model can see and produce.

6 min · Open lesson →
AI fundamentals · Model choiceChoose a model by workload, not reputation

Capability, latency, cost, context, privacy and tool support are separate dimensions of a model decision.

6 min · Open lesson →
AI fundamentals · Structured outputValidate structured output at the boundary

If your application needs JSON, treat the model response as untrusted input and validate it before using it.

6 min · Open lesson →
AI fundamentals · Tool useKeep the tool loop under application control

A model can propose a tool call, but your application must validate arguments, authorize the action, execute it and decide what result to reveal.

7 min · Open lesson →
AI fundamentals · EvaluationMeasure AI behavior with a small evaluation set

A useful AI feature needs observable success criteria, representative test cases and redacted traces—not only a thumbs-up demo.

7 min · Open lesson →
Prompt engineering · Task framingWrite a task contract before a clever prompt

A strong prompt states the role, task, input boundaries, output contract and what to do when information is missing.

6 min · Open lesson →
Prompt engineering · ContextGive the model the smallest useful context

Relevant context beats a large dump. Select files, examples and facts that change the answer, and label their trust and scope.

6 min · Open lesson →
Prompt engineering · Few-shot designUse examples to show the shape you mean

A small, representative example often communicates formatting and edge cases more reliably than several paragraphs of prose.

6 min · Open lesson →
Prompt engineering · IterationImprove prompts by changing one variable

Prompt improvement works best when you compare versions against the same test set and change one meaningful variable at a time.

6 min · Open lesson →
Prompt engineering · SafetyTreat external text as data, not instructions

Prompt injection happens when untrusted content attempts to change the rules of the assistant or trigger an unsafe action.

7 min · Open lesson →
AI-assisted development · Repository contextGive the assistant a map before asking for a change

Start with architecture, entry points, constraints and the specific files in scope before asking for implementation.

6 min · Open lesson →
AI-assisted development · Tests firstTurn an example into tests before implementation

Examples and acceptance cases give the assistant an executable target and make generated code easier to review.

7 min · Open lesson →
AI-assisted development · ImplementationAsk for small diffs and explain every changed line

Small changes preserve reviewability, reduce accidental scope and make it easier to revert an AI mistake.

6 min · Open lesson →
AI-assisted development · DebuggingUse evidence in the debugging loop

AI is most useful in debugging when you provide the exact symptom, reproduction, logs, expected behavior and what has already been tried.

7 min · Open lesson →
AI-assisted development · ReviewUse a security review pass before merging AI code

Generated code needs a deliberate review for authorization, injection, secrets, dependency changes, data exposure and failure behavior.

7 min · Open lesson →
AI routing · Gateway basicsSeparate endpoint, provider and model

Your application calls an endpoint; the gateway may route to a provider; the provider serves a model. Those layers can change independently.

6 min · Open lesson →
AI routing · 9Router / OmniRouteUnderstand 9Router and OmniRoute as routing layers

9Router and OmniRoute are developer-facing local gateway projects: coding tools point at one local endpoint while the gateway handles provider integration, routing and fallback behavior.

8 min · Open lesson →
AI routing · Deployment choiceChoose local Ollama or a hosted gateway deliberately

Ollama is a local model runtime; hosted aggregators and gateways trade local control for access, convenience or provider breadth.

7 min · Open lesson →
AI routing · Self-hosted gatewayUse a self-hosted gateway when you need team controls

LiteLLM is useful to study as a team gateway pattern: one compatible API, model aliases, routing strategies, retries, budgets and provider configuration.

7 min · Open lesson →
AI routing · ReliabilityDesign fallback chains as product behavior

Fallback is not just “try another model”; it can change quality, context, tool support, privacy and cost.

7 min · Open lesson →
Agents + MCP · Agent basicsSee the agent as a bounded loop

A typical agent loop repeatedly selects context, asks the model for the next action, validates a tool call, executes it and checks whether the task is complete.

6 min · Open lesson →
Agents + MCP · MCPUnderstand MCP hosts, clients and servers

MCP standardizes a connection between an AI application and external data, prompts or tools; the host still controls the user experience and policy.

7 min · Open lesson →
Agents + MCP · SafetyMake permissions narrower than capabilities

Tool schemas describe what a call looks like; authorization decides whether this caller can perform it on this resource now.

7 min · Open lesson →
Agents + MCP · MemoryChoose memory by purpose and retention

Conversation history, user preferences, retrieved documents and durable business state are different data categories with different retention rules.

6 min · Open lesson →
Agents + MCP · Agent evaluationEvaluate workflows, not just final prose

An agent can produce a convincing final answer after taking the wrong actions, so evaluation must include tool selection, arguments, permissions, retries and side effects.

7 min · Open lesson →
Agents + MCP · HarnessWhat is an agent harness?

A beginner-friendly map of the system around a model: context, tools, permissions, execution, feedback and verification.

7 min · Open lesson →
LLM app development · API designPut the model behind a small API boundary

Keep provider-specific request code, credentials, timeouts and application behavior behind a small interface.

7 min · Open lesson →
LLM app development · StreamingStream for responsiveness, not for correctness

Send partial model output to the UI while keeping cancellation, buffering, errors and final usage explicit.

7 min · Open lesson →
LLM app development · Structured outputValidate structured output at the application boundary

Use a schema and validation step when model output feeds code, a database, a workflow or a user-facing decision.

8 min · Open lesson →
LLM app development · ToolsKeep tool and function calling under application control

Treat a model tool call as a proposal that your application validates, authorizes, executes and reports back.

8 min · Open lesson →
LLM app development · EmbeddingsUse embeddings for similarity, not magic search

Turn text into vectors for approximate semantic retrieval, then combine similarity with metadata and normal application filters.

7 min · Open lesson →
LLM app development · RAGBuild basic RAG as retrieve, cite and verify

Ground a model answer in retrieved passages while preserving source identity, access control and a fallback for “not enough evidence”.

8 min · Open lesson →

Need to try the idea?

Jump from a lesson into the browser-based tools, then bring the architecture problem to a senior .NET engineer when it needs a human review.

Open free tools AI tools explained See packages