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.
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 from query shape to production
Learn query patterns that make SQL Server work easier to read, review and tune.
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.
Open learning path →Docker + .NETDocker for a .NET app, without the mystery
Understand images, containers and a production-minded multi-stage Dockerfile for ASP.NET Core.
Open learning path →EF CoreEF Core patterns that prevent surprises
Use DbContext, projections, migrations and concurrency deliberately in real .NET applications.
Open learning path →ASP.NET APIsASP.NET APIs that are easy to use and operate
Design HTTP endpoints with clear contracts, validation, cancellation, errors and operational behavior.
Open learning path →GitGit habits for safer delivery
Use commits, branches and recovery commands to make collaboration and releases easier to review.
Open learning path →AWS + .NETAWS concepts for .NET developers
Build a useful mental model for identity, configuration, compute, data and observability on AWS.
Open learning path →KubernetesKubernetes concepts for application developers
Understand the Kubernetes objects an application team touches and the signals that keep a deployment healthy.
Open learning path →AI fundamentalsAI fundamentals for working developers
Understand models, context, tokens, structured output, tools and evaluation without treating AI as magic.
Open learning path →Prompt engineeringPrompt engineering as interface design
Write prompts that define a task, context, constraints and success criteria clearly enough to test and improve.
Open learning path →AI-assisted developmentA disciplined AI-assisted development workflow
Use AI to understand, plan, implement, test and review software without surrendering engineering judgment.
Open learning path →AI routingAI gateways and model routing in practice
Understand endpoints, providers, fallbacks, local runtimes and self-hosted gateways such as 9Router, OmniRoute and LiteLLM.
Open learning path →Agents + MCPAgents, MCP and safe tool-enabled workflows
Understand agent loops, Model Context Protocol, permissions, memory and evaluation before giving an assistant real actions.
Open learning path →LLM app developmentLLM 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.
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.
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 themWindow 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 membershipEXISTS 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 searchableA 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 runtimeThe 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 identityRecords 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 conversationNullable 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 cancellablePass 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 instanceAn 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 lineA 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 imageBuild 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 dependenciesCompose gives a local .NET app a repeatable network, database, volume and health-check definition.
7 min · Open lesson →EF Core · DbContextChoose tracking based on intentTrack 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 productionLoading 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 codeA 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 visibleA 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 meaningA 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 domainTransport 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 onProblem 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 commandsA 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 storyA 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 policyBoth 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 cleanupRevert 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 bisectGit 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 privilegeAn 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 secretsA .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 responsibilityThe 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 failuresLogs, 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 ServiceA 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 boundariesKeep 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 contractRequests 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 hopeReadiness 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 budgetsAn 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 reputationCapability, 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 boundaryIf 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 controlA 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 setA 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 promptA 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 contextRelevant 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 meanA 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 variablePrompt 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 instructionsPrompt 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 changeStart 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 implementationExamples 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 lineSmall 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 loopAI 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 codeGenerated 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 modelYour 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 layers9Router 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 deliberatelyOllama 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 controlsLiteLLM 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 behaviorFallback 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 loopA 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 serversMCP 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 capabilitiesTool 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 retentionConversation 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 proseAn 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 boundaryKeep 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 correctnessSend 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 boundaryUse 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 controlTreat 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 searchTurn 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 verifyGround 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.