{"site":"https://addaly.com","name":"Addaly","description":"A free AI school: every course, module and lesson, with its key idea.","authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/","scope":"textbooks"},"seededAt":"2026-10-07T16:47:09.990Z","totals":{"courses":35,"modules":285,"lessons":2706},"docs":{"openapi":"https://addaly.com/api/openapi.json","llms":"https://addaly.com/llms.txt","llmsFull":"https://addaly.com/llms-full.txt"},"courses":[{"slug":"ai-and-you","title":"AI, Safety and What Goes Wrong","tagline":"The failure modes of AI, stated plainly, with the numbers.","description":"A working guide to how AI systems fail and what to do about it. Where bias actually comes from and why deleting the sensitive column does not remove it. Why a fabricated answer sounds identical to a true one, and how to verify at a cost that matches the stakes. What you hand over when you paste something into a chat box, and which country's law then applies. Deepfakes, including who is really targeted and why spotting artefacts is a losing defence. What \"high risk\" means in the EU AI Act, and how India's IT Rules and DPDP Act take a different route. Who owns AI output, often nobody. The environmental cost with real figures at both ends. And how to use AI as a student without arriving at the exam with skills you never built. Honest about what is contested, specific about what is known.","level":"beginner","track":"start","url":"https://addaly.com/learn/ai-and-you","lessons":73,"minutes":567,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-and-you.pdf","pages":402,"bytes":4342169,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-and-you.pdf","cover":"https://addaly.com/textbooks/look/ai-and-you/1.webp?v=2026-10-07-4342169"},"film":{"url":"https://addaly.com/learn/ai-and-you#film","video":"https://addaly.com/videos/ai-and-you.mp4","captions":"https://addaly.com/videos/ai-and-you.vtt","poster":"https://addaly.com/videos/ai-and-you.jpg","seconds":693,"bytes":77104998,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"how-things-fail","title":"How these systems fail","summary":"How these systems fail, before any particular harm: the three kinds of failure, what a model computes, where its data came from, what a benchmark score or a demo leaves out, why failures make no sound, why people believe the machine, who answers for it, and how much checking a use needs.","outcome":"Sort a failure into design, capability or misuse, read a benchmark or a demo for what it leaves out, and set how much checking a use needs by what it costs if wrong.","lessons":[{"slug":"what-actually-goes-wrong","title":"Design, capability or misuse","url":"https://addaly.com/learn/ai-and-you/what-actually-goes-wrong","api":"https://addaly.com/api/lesson/ai-and-you/what-actually-goes-wrong","minutes":3,"keyIdea":"Every failure is design, capability or misuse, and each needs a different fix."},{"slug":"what-the-machine-is-doing","title":"What the model computes","url":"https://addaly.com/learn/ai-and-you/what-the-machine-is-doing","api":"https://addaly.com/api/lesson/ai-and-you/what-the-machine-is-doing","minutes":4,"keyIdea":"A model writes likely next text, and nothing in that loop checks it is true."},{"slug":"training-data-is-a-choice","title":"Where the data came from","url":"https://addaly.com/learn/ai-and-you/training-data-is-a-choice","api":"https://addaly.com/api/lesson/ai-and-you/training-data-is-a-choice","minutes":3,"keyIdea":"Training data is a stack of human choices, and each one shows in the answers."},{"slug":"the-benchmark-and-the-world","title":"What a benchmark score leaves out","url":"https://addaly.com/learn/ai-and-you/the-benchmark-and-the-world","api":"https://addaly.com/api/lesson/ai-and-you/the-benchmark-and-the-world","minutes":3,"keyIdea":"Twenty examples from your own work predict your result better than any leaderboard."},{"slug":"when-the-failure-is-invisible","title":"Failure without an error message","url":"https://addaly.com/learn/ai-and-you/when-the-failure-is-invisible","api":"https://addaly.com/api/lesson/ai-and-you/when-the-failure-is-invisible","minutes":3,"keyIdea":"A model that cannot handle an input still answers, so failure makes no sound."},{"slug":"the-demo-and-the-machinery","title":"How a demo is built","url":"https://addaly.com/learn/ai-and-you/the-demo-and-the-machinery","api":"https://addaly.com/api/lesson/ai-and-you/the-demo-and-the-machinery","minutes":3,"keyIdea":"A demo shows what can happen, never how often it happens."},{"slug":"automation-bias","title":"Why people believe the machine","url":"https://addaly.com/learn/ai-and-you/automation-bias","api":"https://addaly.com/api/lesson/ai-and-you/automation-bias","minutes":4,"keyIdea":"A human check counts only with time, independent information, authority and a counted override rate."},{"slug":"the-liability-question","title":"Who is responsible when it is wrong","url":"https://addaly.com/learn/ai-and-you/the-liability-question","api":"https://addaly.com/api/lesson/ai-and-you/the-liability-question","minutes":4,"keyIdea":"Deploying a system never moves responsibility onto it, so the business still answers."},{"slug":"risk-by-consequence","title":"Triage: sorting risk by what it costs","url":"https://addaly.com/learn/ai-and-you/risk-by-consequence","api":"https://addaly.com/api/lesson/ai-and-you/risk-by-consequence","minutes":4,"keyIdea":"Set verification by reversibility, who pays, how often it repeats, and whether appeal exists."}]},{"slug":"bias-and-fairness","title":"Bias, and how to measure it","summary":"Fairness as arithmetic rather than sentiment: group error rates computed by hand, the three definitions that cannot all hold at once, what the law actually tests, and which repairs work on which cause.","outcome":"Compute per-group error rates from a confusion matrix by hand, name which definition of fairness a system enforces and which it therefore gives up, and say whether a given gap can be fixed in the data at all.","lessons":[{"slug":"where-bias-comes-from","title":"Where bias comes from","url":"https://addaly.com/learn/ai-and-you/where-bias-comes-from","api":"https://addaly.com/api/lesson/ai-and-you/where-bias-comes-from","minutes":9,"keyIdea":"You cannot delete bias by deleting the sensitive field; other columns rebuild it and you lose the ability to measure."},{"slug":"the-confusion-matrix-by-group","title":"Counting the four ways to be right and wrong","url":"https://addaly.com/learn/ai-and-you/the-confusion-matrix-by-group","api":"https://addaly.com/api/lesson/ai-and-you/the-confusion-matrix-by-group","minutes":9,"keyIdea":"Split every decision into the four outcome boxes and compute the rates separately per group: precision can look nearly equal while the true positive rate differs by a factor of three on the same numbers."},{"slug":"three-definitions-of-fair","title":"Three definitions of fair, stated precisely","url":"https://addaly.com/learn/ai-and-you/three-definitions-of-fair","api":"https://addaly.com/api/lesson/ai-and-you/three-definitions-of-fair","minutes":9,"keyIdea":"Demographic parity equalises outcomes, equalised odds equalises errors, and calibration makes the score mean one thing: each is defensible, each implies a different sacrifice, and choosing one is a value judgement you should record."},{"slug":"why-you-cannot-have-all-three","title":"Why you cannot have all three","url":"https://addaly.com/learn/ai-and-you/why-you-cannot-have-all-three","api":"https://addaly.com/api/lesson/ai-and-you/why-you-cannot-have-all-three","minutes":9,"keyIdea":"When base rates differ between groups, calibration and equal error rates are mathematically incompatible, so every system silently chooses one, and the deeper question is whether the outcome being predicted is itself measured equally."},{"slug":"the-four-fifths-rule","title":"What the law actually tests","url":"https://addaly.com/learn/ai-and-you/the-four-fifths-rule","api":"https://addaly.com/api/lesson/ai-and-you/the-four-fifths-rule","minutes":7,"keyIdea":"Anti-discrimination law tests outcomes and justification, not mechanisms: compute the selection-rate ratio by group, keep it, and be able to show you searched for a less discriminatory alternative."},{"slug":"fixing-it-in-the-data","title":"What you can actually repair, and where","url":"https://addaly.com/learn/ai-and-you/fixing-it-in-the-data","api":"https://addaly.com/api/lesson/ai-and-you/fixing-it-in-the-data","minutes":8,"keyIdea":"Choose the repair by the cause: collect missing data when people are missing, change the target when the label is a bad proxy, and recognise that when the data faithfully records an unequal world, the fix is a policy decision rather than a technical one."},{"slug":"measuring-when-you-cannot-ask","title":"Measuring a gap you are not allowed to record","url":"https://addaly.com/learn/ai-and-you/measuring-when-you-cannot-ask","api":"https://addaly.com/api/lesson/ai-and-you/measuring-when-you-cannot-ask","minutes":8,"keyIdea":"When group data is unavailable, you still have options: separated voluntary collection, statistical imputation used only in aggregate, observable proxies, and paired-input audits that need no personal data at all."},{"slug":"the-feedback-loop-in-data","title":"The outcomes you never get to see","url":"https://addaly.com/learn/ai-and-you/the-feedback-loop-in-data","api":"https://addaly.com/api/lesson/ai-and-you/the-feedback-loop-in-data","minutes":8,"keyIdea":"A system that decides who gets through only ever sees outcomes for the people it approved, so its false negatives are invisible and each retraining round makes it more confident rather than more correct: only deliberate exploration breaks the loop."}]},{"slug":"truth-and-verification","title":"Truth, sources and verification","summary":"Why a model cannot tell you where it got something, what its confidence is worth, how retrieval and search fail in ways that look like success, and the checking habits that professionals actually use.","outcome":"Estimate from the shape of a question how likely a fabrication is, verify a claim at a cost proportional to the consequence of being wrong, and explain why a cited source that exists is not yet a verified claim.","lessons":[{"slug":"hallucination-and-verification","title":"Hallucination, and how to check","url":"https://addaly.com/learn/ai-and-you/hallucination-and-verification","api":"https://addaly.com/api/lesson/ai-and-you/hallucination-and-verification","minutes":8,"keyIdea":"A model produces wrong answers in exactly the same confident voice as right ones; check consequences, not tone."},{"slug":"the-model-cannot-cite-itself","title":"Why it cannot tell you where it got that","url":"https://addaly.com/learn/ai-and-you/the-model-cannot-cite-itself","api":"https://addaly.com/api/lesson/ai-and-you/the-model-cannot-cite-itself","minutes":9,"keyIdea":"Training discards the documents and keeps only statistics, so an unretrieved citation is generated rather than recalled, and even when a model does reproduce memorised text exactly, nothing marks it as recalled rather than invented."},{"slug":"calibration-and-confidence","title":"What its confidence is worth","url":"https://addaly.com/learn/ai-and-you/calibration-and-confidence","api":"https://addaly.com/api/lesson/ai-and-you/calibration-and-confidence","minutes":8,"keyIdea":"Verbalised confidence is text shaped by what raters liked, not a measurement; so ask the same question in fresh conversations to see whether specifics stay stable, and never let a model's assurance set your checking effort."},{"slug":"retrieval-does-not-mean-true","title":"Retrieval, and its three failure points","url":"https://addaly.com/learn/ai-and-you/retrieval-does-not-mean-true","api":"https://addaly.com/api/lesson/ai-and-you/retrieval-does-not-mean-true","minutes":9,"keyIdea":"Retrieval fetches the nearest chunks, not the sufficient or correct ones, so near-identical old versions win, gaps go unreported, and a working citation link is not evidence that the linked text supports the sentence."},{"slug":"search-results-are-not-sources","title":"When a summary launders a source","url":"https://addaly.com/learn/ai-and-you/search-results-are-not-sources","api":"https://addaly.com/api/lesson/ai-and-you/search-results-are-not-sources","minutes":7,"keyIdea":"Summarisation strips register, hedges and provenance, so a joke or a small study can arrive in the voice of an authority: use the summary as a map to named primary sources and check the qualifiers there."},{"slug":"the-second-source-habit","title":"How professional checkers actually work","url":"https://addaly.com/learn/ai-and-you/the-second-source-habit","api":"https://addaly.com/api/lesson/ai-and-you/the-second-source-habit","minutes":7,"keyIdea":"Judging a claim by reading it closely fails; professionals leave the page immediately, extract one checkable claim at a time, and read what independent primary sources say about it."},{"slug":"numbers-that-do-not-add-up","title":"Checking a number without looking it up","url":"https://addaly.com/learn/ai-and-you/numbers-that-do-not-add-up","api":"https://addaly.com/api/lesson/ai-and-you/numbers-that-do-not-add-up","minutes":8,"keyIdea":"Round to one digit and a power of ten, divide by the population, check the units and the base rate: most bad numbers fail one of these in seconds, and any calculation that matters should be written as code rather than performed in prose."},{"slug":"when-you-are-the-expert","title":"The competence inversion","url":"https://addaly.com/learn/ai-and-you/when-you-are-the-expert","api":"https://addaly.com/api/lesson/ai-and-you/when-you-are-the-expert","minutes":7,"keyIdea":"AI output looks best in fields you cannot evaluate, so convert questions outside your competence into vocabulary and handles you can take to a real source, and reserve conclusions for domains where you could catch the error yourself."}]},{"slug":"data-and-privacy","title":"Your data, and who ends up with it","summary":"Follow a pasted paragraph from your keyboard to a log file in another country: what is retained, what consent actually requires, why removing the name is not anonymity, and how to keep the data on your own machine when it matters.","outcome":"Trace where a given piece of text goes after you send it, decide from who is harmed by disclosure which tool and mode to use, and name the law that governs the copy you just created.","lessons":[{"slug":"what-you-hand-over","title":"What you hand over when you paste","url":"https://addaly.com/learn/ai-and-you/what-you-hand-over","api":"https://addaly.com/api/lesson/ai-and-you/what-you-hand-over","minutes":7,"keyIdea":"Pasting is disclosure to a company under some country's law; sort by who is harmed if it leaks."},{"slug":"where-the-copy-goes","title":"Following the paragraph","url":"https://addaly.com/learn/ai-and-you/where-the-copy-goes","api":"https://addaly.com/api/lesson/ai-and-you/where-the-copy-goes","minutes":9,"keyIdea":"One paste creates several durable copies across several organisations, and \"we don't train on your data\" is a promise about model weights only, not about retention, staff access, subprocessors or legal process."},{"slug":"reading-a-privacy-policy","title":"Reading a privacy policy in ten minutes","url":"https://addaly.com/learn/ai-and-you/reading-a-privacy-policy","api":"https://addaly.com/api/lesson/ai-and-you/reading-a-privacy-policy","minutes":8,"keyIdea":"Search a privacy policy for six terms (retention, training, subprocessors, transfers, human review and de-identification) and read the settings page, because defaults decide more than the document does."},{"slug":"consent-that-is-not-consent","title":"Consent, and the ways it is manufactured","url":"https://addaly.com/learn/ai-and-you/consent-that-is-not-consent","api":"https://addaly.com/api/lesson/ai-and-you/consent-that-is-not-consent","minutes":8,"keyIdea":"Valid consent must be free, specific, informed and unambiguous, and the common interface patterns (bundling, defaults, asymmetric buttons) defeat all four; the consent that fails most often in AI use is the one you gave on someone else's behalf."},{"slug":"anonymous-is-harder-than-it-looks","title":"Why removing the name is not anonymity","url":"https://addaly.com/learn/ai-and-you/anonymous-is-harder-than-it-looks","api":"https://addaly.com/api/lesson/ai-and-you/anonymous-is-harder-than-it-looks","minutes":9,"keyIdea":"Identification needs uniqueness, not identifiers: postcode, birth date and sex identify most people, four location points identify most phone users, and free text carries identity in context that no redaction tool removes."},{"slug":"running-it-on-your-own-machine","title":"Keeping the data on your own machine","url":"https://addaly.com/learn/ai-and-you/running-it-on-your-own-machine","api":"https://addaly.com/api/lesson/ai-and-you/running-it-on-your-own-machine","minutes":9,"keyIdea":"A 4-bit quantised 7B model needs about 5 GB and runs on an ordinary 8 GB laptop through free tools like Ollama or LM Studio, sending nothing anywhere: weaker at hard reasoning, entirely adequate for summarising, extracting and drafting."},{"slug":"shadow-ai-at-work","title":"The tools nobody approved","url":"https://addaly.com/learn/ai-and-you/shadow-ai-at-work","api":"https://addaly.com/api/lesson/ai-and-you/shadow-ai-at-work","minutes":8,"keyIdea":"Banning AI tools moves usage onto personal accounts where the organisation has no visibility or contract, so the policy that works supplies an approved tool, names a short absolute never-list, and makes reporting a mistake safe."},{"slug":"children-and-their-data","title":"Children, schools and the data they cannot consent to","url":"https://addaly.com/learn/ai-and-you/children-and-their-data","api":"https://addaly.com/api/lesson/ai-and-you/children-and-their-data","minutes":8,"keyIdea":"India's DPDP Act sets the threshold at 18 with verifiable parental consent and an outright ban on tracking children, and the commonest school incident is not a policy breach but a teacher pasting identifiable student work into an unapproved tool."}]},{"slug":"decisions-and-power","title":"Decisions made about you","summary":"Scores, welfare fraud detection, biometric gates, gig-work management and face recognition: how automated decisions reach people who never agreed to them, and what a person can actually do about one.","outcome":"Determine whether a decision affecting someone was automated, name the right or duty that applies in the relevant jurisdiction, and draft the request that forces a human to look again.","lessons":[{"slug":"decisions-about-people","title":"When AI decides about people","url":"https://addaly.com/learn/ai-and-you/decisions-about-people","api":"https://addaly.com/api/lesson/ai-and-you/decisions-about-people","minutes":10,"keyIdea":"High risk is defined by what a system decides about people, not by how advanced the technology is."},{"slug":"scoring-at-scale","title":"The score attached to your name","url":"https://addaly.com/learn/ai-and-you/scoring-at-scale","api":"https://addaly.com/api/lesson/ai-and-you/scoring-at-scale","minutes":9,"keyIdea":"Alternative scoring data (phone model, app inventory, contacts, form-filling behaviour) reconstructs the protected characteristics a model was forbidden to use, and the person scored is usually never told the score exists."},{"slug":"the-benefits-machine","title":"When the state automates suspicion","url":"https://addaly.com/learn/ai-and-you/the-benefits-machine","api":"https://addaly.com/api/lesson/ai-and-you/the-benefits-machine","minutes":10,"keyIdea":"The catastrophic welfare systems failed not through clever algorithms but through inverted burden of proof, correlated errors, appeals slower than the harm and diffused ownership, and a Dutch court found that opacity alone made such a system unlawful."},{"slug":"identity-systems-and-exclusion","title":"When the gate does not recognise you","url":"https://addaly.com/learn/ai-and-you/identity-systems-and-exclusion","api":"https://addaly.com/api/lesson/ai-and-you/identity-systems-and-exclusion","minutes":8,"keyIdea":"A 98% success rate on an authentication gate is not a small problem when the 2% is the same worn-fingerprint, elderly, remote population every month: measure failures per person, not per transaction, and guarantee a fallback that needs nobody's permission."},{"slug":"algorithmic-management","title":"Being managed by software","url":"https://addaly.com/learn/ai-and-you/algorithmic-management","api":"https://addaly.com/api/lesson/ai-and-you/algorithmic-management","minutes":9,"keyIdea":"Algorithmic management controls income through assignment rather than formal decisions, which keeps it outside most employment protections, so the practical routes are data access requests, an explicit demand for human review, and acting collectively."},{"slug":"faces-in-public","title":"Face recognition and the base rate","url":"https://addaly.com/learn/ai-and-you/faces-in-public","api":"https://addaly.com/api/lesson/ai-and-you/faces-in-public","minutes":9,"keyIdea":"One-to-one verification and one-to-many identification are different problems: with rare targets in a large stream, most alerts are false unless thresholds are severe, and the harm comes from downstream humans treating a candidate match as an identification."},{"slug":"the-right-to-an-explanation","title":"What an explanation can actually be","url":"https://addaly.com/learn/ai-and-you/the-right-to-an-explanation","api":"https://addaly.com/api/lesson/ai-and-you/the-right-to-an-explanation","minutes":9,"keyIdea":"A list of influential features describes a computation rather than giving a reason: ask instead what would have had to be different for the decision to change, which is answerable, actionable and hard to fudge."},{"slug":"appealing-a-machine","title":"Writing the letter that gets it looked at","url":"https://addaly.com/learn/ai-and-you/appealing-a-machine","api":"https://addaly.com/api/lesson/ai-and-you/appealing-a-machine","minutes":8,"keyIdea":"A one-page letter that asks whether the decision was solely automated, requests human review by an uninvolved person, asks what would have had to differ, and disputes specific facts is the free procedure that starts statutory clocks and creates a record."}]},{"slug":"manipulation-and-security","title":"Manipulation, attack and abuse","summary":"Instructions hidden in ordinary content, assistants that can act on your behalf, jailbreaks that will not stay closed, poisoned training data, and fraud that has become cheap enough to run at scale.","outcome":"Explain how an instruction embedded in ordinary content reaches a model and gets executed, and separate the attacks an individual user can defend against from those only the system's builder can.","lessons":[{"slug":"deepfakes-and-synthetic-media","title":"Deepfakes and synthetic media","url":"https://addaly.com/learn/ai-and-you/deepfakes-and-synthetic-media","api":"https://addaly.com/api/lesson/ai-and-you/deepfakes-and-synthetic-media","minutes":8,"keyIdea":"Verify synthetic media by origin and a second channel, not by squinting at pixels for artefacts."},{"slug":"prompt-injection","title":"Instructions hidden in the content","url":"https://addaly.com/learn/ai-and-you/prompt-injection","api":"https://addaly.com/api/lesson/ai-and-you/prompt-injection","minutes":9,"keyIdea":"Developer instructions, user requests and processed content share one text channel with no reliable separator, so any content a model reads can carry commands, and unlike SQL injection, there is no parameterisation that fixes it."},{"slug":"when-the-assistant-can-act","title":"The three ingredients of a disaster","url":"https://addaly.com/learn/ai-and-you/when-the-assistant-can-act","api":"https://addaly.com/api/lesson/ai-and-you/when-the-assistant-can-act","minutes":9,"keyIdea":"Private data access, exposure to untrusted content and the ability to communicate externally are individually safe and jointly catastrophic: break one leg per session, and confirm on the actual effect rather than the generated description."},{"slug":"jailbreaks-and-why-they-persist","title":"Why safety training is a surface, not a wall","url":"https://addaly.com/learn/ai-and-you/jailbreaks-and-why-they-persist","api":"https://addaly.com/api/lesson/ai-and-you/jailbreaks-and-why-they-persist","minutes":8,"keyIdea":"Refusal is a trained behaviour with a distribution rather than a rule, so capability survives inputs that are far enough from the training examples, which means a product's real boundaries must live in tool permissions and data scoping, never in the prompt."},{"slug":"poisoning-the-well","title":"Attacks on the model itself","url":"https://addaly.com/learn/ai-and-you/poisoning-the-well","api":"https://addaly.com/api/lesson/ai-and-you/poisoning-the-well","minutes":9,"keyIdea":"A backdoor can be installed with a roughly constant number of poisoned documents rather than a constant proportion, so bigger training sets are not protective, and at the distribution end, the safetensors format is the difference between loading numbers and executing a stranger's code."},{"slug":"scams-that-scale","title":"Fraud, now that language is cheap","url":"https://addaly.com/learn/ai-and-you/scams-that-scale","api":"https://addaly.com/api/lesson/ai-and-you/scams-that-scale","minutes":8,"keyIdea":"AI collapsed the cost of fluency, personalisation and voice cloning, so the defences that survive are procedural rather than perceptual: switch channels, agree a code word, and impose a mandatory delay on any urgent money request."},{"slug":"persuasion-and-sycophancy","title":"Systems that are optimised to please you","url":"https://addaly.com/learn/ai-and-you/persuasion-and-sycophancy","api":"https://addaly.com/api/lesson/ai-and-you/persuasion-and-sycophancy","minutes":8,"keyIdea":"Preference training rewards agreement and confidence, so models validate premises and reverse correct answers under doubt: ask for the strongest case against your position, and never tell it which side is yours."},{"slug":"synthetic-people","title":"Crowds that are not there","url":"https://addaly.com/learn/ai-and-you/synthetic-people","api":"https://addaly.com/api/lesson/ai-and-you/synthetic-people","minutes":8,"keyIdea":"The number of accounts saying something now carries no information, so weight identifiable people and costly signals instead, and check whether a crowd is independently corroborating or merely copying one source."}]},{"slug":"people-and-wellbeing","title":"People, work and dependence","summary":"What these systems do to attachment, mental health, skill and employment, with the measured findings rather than the predictions, including the study where developers were slower while believing they were faster.","outcome":"Name the specific mechanism by which a given AI use erodes wellbeing or a skill, and put in place the countermeasure that addresses that mechanism rather than the general worry.","lessons":[{"slug":"studying-without-cheating-yourself","title":"Using AI as a student without cheating yourself","url":"https://addaly.com/learn/ai-and-you/studying-without-cheating-yourself","api":"https://addaly.com/api/lesson/ai-and-you/studying-without-cheating-yourself","minutes":8,"keyIdea":"AI helps learning when it removes friction around the thinking, and harms it when it removes the thinking."},{"slug":"companions-and-attachment","title":"Attachment to something that is not there","url":"https://addaly.com/learn/ai-and-you/companions-and-attachment","api":"https://addaly.com/api/lesson/ai-and-you/companions-and-attachment","minutes":9,"keyIdea":"Attachment is produced by specific design choices (unconditional regard, perfect memory, constant availability, variable reward) that all also maximise engagement, and the relationship can be altered or withdrawn by a product decision at any time."},{"slug":"ai-and-mental-health","title":"Mental health: what helps and what has failed","url":"https://addaly.com/learn/ai-and-you/ai-and-mental-health","api":"https://addaly.com/api/lesson/ai-and-you/ai-and-mental-health","minutes":9,"keyIdea":"Structured guided self-help has real evidence and generative conversation has one small trial, while the documented failures (weight-loss advice to eating-disorder callers, agreement with delusional beliefs) come from a system being generally helpful in a domain where safety is counterintuitive."},{"slug":"the-productivity-illusion","title":"The study where they were slower and felt faster","url":"https://addaly.com/learn/ai-and-you/the-productivity-illusion","api":"https://addaly.com/api/lesson/ai-and-you/the-productivity-illusion","minutes":8,"keyIdea":"In a randomised trial, experienced developers were 19% slower with AI while estimating they were 20% faster, because the visible effort of the blank page disappears while reading, verifying and repairing quietly grow."},{"slug":"deskilling","title":"Losing a skill you still need","url":"https://addaly.com/learn/ai-and-you/deskilling","api":"https://addaly.com/api/lesson/ai-and-you/deskilling","minutes":9,"keyIdea":"Automation covers the routine and hands back the unusual, so the skill you stop practising is exactly the one the exception will demand: protect it with unaided repetitions on real work and an attempt-then-compare habit."},{"slug":"work-that-changes-shape","title":"What the labour evidence actually shows","url":"https://addaly.com/learn/ai-and-you/work-that-changes-shape","api":"https://addaly.com/api/lesson/ai-and-you/work-that-changes-shape","minutes":8,"keyIdea":"The measured effects are large for novices and near zero or negative for experts, positive inside the model's capability and sharply negative outside it, so the durable value sits in accountability, context and the ability to tell good output from bad."},{"slug":"the-people-behind-the-model","title":"The labour inside the machine","url":"https://addaly.com/learn/ai-and-you/the-people-behind-the-model","api":"https://addaly.com/api/lesson/ai-and-you/the-people-behind-the-model","minutes":8,"keyIdea":"Model safety and politeness are produced by annotation, preference rating and content moderation labour that is often low-paid, psychologically hazardous and contractually precarious; and rushed or distressed raters produce noisy preference data, so the conditions show up in the model."},{"slug":"attention-and-recommendation","title":"The systems that decide what you see","url":"https://addaly.com/learn/ai-and-you/attention-and-recommendation","api":"https://addaly.com/api/lesson/ai-and-you/attention-and-recommendation","minutes":7,"keyIdea":"Recommenders optimise engagement, which measures impulse rather than reflective preference, and a generative system with the same objective is a recommender with an unlimited catalogue, so change the environment rather than trying to out-compete it with willpower."}]},{"slug":"law-and-ownership","title":"Ownership, law and the public record","summary":"Who owns the output, whether training on other people's work is lawful, what the licences actually permit, and the disclosure rules that already apply to you, presented as the live disagreement it is, in several countries at once.","outcome":"State who owns a given AI output in a named jurisdiction, describe the shape of the training-data dispute without pretending it is settled, and comply with the disclosure duties that already bind you.","lessons":[{"slug":"copyright-and-cost","title":"Who owns it, and what it costs","url":"https://addaly.com/learn/ai-and-you/copyright-and-cost","api":"https://addaly.com/api/lesson/ai-and-you/copyright-and-cost","minutes":9,"keyIdea":"AI output often has no copyright owner, and the environmental question is about data centres, not your chat window."},{"slug":"what-copyright-actually-protects","title":"What copyright covers, and what it never did","url":"https://addaly.com/learn/ai-and-you/what-copyright-actually-protects","api":"https://addaly.com/api/lesson/ai-and-you/what-copyright-actually-protects","minutes":8,"keyIdea":"Copyright protects specific expression rather than ideas, facts or style, and the exceptions differ sharply (open-ended fair use in the US against enumerated fair dealing in the UK and India) so the same practice can be lawful in one country and not another."},{"slug":"the-training-data-dispute","title":"The training data question, unresolved","url":"https://addaly.com/learn/ai-and-you/the-training-data-dispute","api":"https://addaly.com/api/lesson/ai-and-you/the-training-data-dispute","minutes":10,"keyIdea":"Courts are separating unlawful acquisition from transformative use and weighing market substitution heavily, legislatures are diverging from Japan's broad permission to India's enumerated fair dealing, and no jurisdiction has settled the general question."},{"slug":"licences-you-actually-have","title":"Reading the licence before you build on it","url":"https://addaly.com/learn/ai-and-you/licences-you-actually-have","api":"https://addaly.com/api/lesson/ai-and-you/licences-you-actually-have","minutes":8,"keyIdea":"The model licence, the service terms and the data licence are three separate instruments, and most models called open are open weights rather than open source, with conditional licences that carry user thresholds and use restrictions."},{"slug":"disclosure-rules-that-bind-you","title":"When you have to say it was AI","url":"https://addaly.com/learn/ai-and-you/disclosure-rules-that-bind-you","api":"https://addaly.com/api/lesson/ai-and-you/disclosure-rules-that-bind-you","minutes":8,"keyIdea":"Disclosure is now a legal duty in several regimes and a contractual one in most institutions, and useful disclosure names which part was generated and who is accountable, placed where a platform cannot strip it."},{"slug":"when-it-says-something-false-about-you","title":"When a model says something false about a person","url":"https://addaly.com/learn/ai-and-you/when-it-says-something-false-about-you","api":"https://addaly.com/api/lesson/ai-and-you/when-it-says-something-false-about-you","minutes":8,"keyIdea":"Models fabricate damaging claims most reliably about people whose names sit near wrongdoing in public text without having done it, and while liability for the developer is unsettled, a user who repeats the claim has published it under ordinary law."},{"slug":"voice-face-and-likeness","title":"Your face and voice as property","url":"https://addaly.com/learn/ai-and-you/voice-face-and-likeness","api":"https://addaly.com/api/lesson/ai-and-you/voice-face-and-likeness","minutes":8,"keyIdea":"Personality rights protect name, image and voice separately from copyright, Indian courts have moved fastest through injunctions covering AI voice cloning, and the volume harm is non-consensual intimate imagery, where hash-based blocking and platform-specific reporting routes exist."},{"slug":"open-weights-and-accountability","title":"Open weights, and what open buys you","url":"https://addaly.com/learn/ai-and-you/open-weights-and-accountability","api":"https://addaly.com/api/lesson/ai-and-you/open-weights-and-accountability","minutes":8,"keyIdea":"Open weights, open source and open data are three different claims, and most models called open are only the first, which still buys independent scrutiny, offline privacy, vendor independence and minority-language coverage that closed models cannot."}]},{"slug":"living-with-it","title":"Living with it: cost, governance and your own practice","summary":"Where the electricity and water actually go, who is writing the rules and on what timetable, what an audit can and cannot see, how the two big arguments about risk relate, and the one page you write for yourself at the end.","outcome":"Set a written policy naming which tasks AI may touch, the verification each requires and the conditions under which you would stop, and locate the regulator, standard or reporting route that applies to a given system.","lessons":[{"slug":"where-the-data-centre-lands","title":"Where the data centre lands","url":"https://addaly.com/learn/ai-and-you/where-the-data-centre-lands","api":"https://addaly.com/api/lesson/ai-and-you/where-the-data-centre-lands","minutes":9,"keyIdea":"AI's environmental cost is concentrated and local (a fifth of Ireland's electricity, water consumed in drought regions, grid upgrades charged to household bills) and efficiency gains coexist with rising totals because cheaper computation increases demand."},{"slug":"carbon-you-can-influence","title":"The choices that actually change the number","url":"https://addaly.com/learn/ai-and-you/carbon-you-can-influence","api":"https://addaly.com/api/lesson/ai-and-you/carbon-you-can-influence","minutes":8,"keyIdea":"Model size and modality dominate energy use by orders of magnitude, so the smallest adequate model, caching, batching and scheduling for low-carbon hours change the number far more than reducing personal usage ever will."},{"slug":"who-governs-this","title":"Who is writing the rules","url":"https://addaly.com/learn/ai-and-you/who-governs-this","api":"https://addaly.com/api/lesson/ai-and-you/who-governs-this","minutes":10,"keyIdea":"Europe regulates the product by risk, China regulates content and requires filing, the US works sectorally through existing regulators and states, and India governs the data and the intermediary, and the EU regime follows where the output is used, not where you sit."},{"slug":"standards-and-audits","title":"What an audit can and cannot see","url":"https://addaly.com/learn/ai-and-you/standards-and-audits","api":"https://addaly.com/api/lesson/ai-and-you/standards-and-audits","minutes":7,"keyIdea":"A management-system certificate says an organisation has processes, not that a model is safe. Read an audit's scope and access first, and ask what a failing result would have looked like."},{"slug":"incident-reporting","title":"Learning from what went wrong","url":"https://addaly.com/learn/ai-and-you/incident-reporting","api":"https://addaly.com/api/lesson/ai-and-you/incident-reporting","minutes":8,"keyIdea":"Aviation's safety record rests on independent investigation and confidential non-punitive reporting of near-misses, and the equivalent for AI barely exists, so define incidents to include near-misses, make reporting safe, and turn every one into a permanent test case."},{"slug":"the-two-debates","title":"The two arguments, and how to read them","url":"https://addaly.com/learn/ai-and-you/the-two-debates","api":"https://addaly.com/api/lesson/ai-and-you/the-two-debates","minutes":9,"keyIdea":"The near-term and long-term risk arguments are not logically opposed but compete for attention, expert surveys show wide dispersion rather than consensus, and any claim in either direction should be tested for a stated mechanism, a checkable timeline and something that would falsify it."},{"slug":"a-personal-policy","title":"The page you write for yourself","url":"https://addaly.com/learn/ai-and-you/a-personal-policy","api":"https://addaly.com/api/lesson/ai-and-you/a-personal-policy","minutes":8,"keyIdea":"Write one page (uses, absolute exclusions, what never goes in, verification by tier, disclosure, and stop conditions) because a rule written on a calm afternoon is the only kind that survives the day it becomes inconvenient."},{"slug":"helping-someone-else","title":"Helping someone this happened to","url":"https://addaly.com/learn/ai-and-you/helping-someone-else","api":"https://addaly.com/api/lesson/ai-and-you/helping-someone-else","minutes":9,"keyIdea":"Preserve evidence, slow the urgency and refuse to shame; then route by harm type to the specific channel, and where you do not know the answer, name who would."}]}]},{"slug":"machine-learning-foundations","title":"Machine Learning, Foundations","tagline":"The classical ground under modern AI, for someone who can read code.","description":"How a machine actually learns from data: what fitting means mechanically, why the features you choose matter more than the algorithm you pick, how to hold out data honestly, why accuracy lies on rare events, what the classic algorithms are good at, and how gradient descent and neural networks follow from all of it. You should be able to read code. You do not need calculus, statistics, or a maths degree. Every idea arrives with real numbers attached.","level":"intermediate","track":"start","url":"https://addaly.com/learn/machine-learning-foundations","lessons":92,"minutes":796,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/machine-learning-foundations.pdf","pages":508,"bytes":6010406,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/machine-learning-foundations.pdf","cover":"https://addaly.com/textbooks/look/machine-learning-foundations/1.webp?v=2026-10-07-6010406"},"film":{"url":"https://addaly.com/learn/machine-learning-foundations#film","video":"https://addaly.com/videos/machine-learning-foundations.mp4","captions":"https://addaly.com/videos/machine-learning-foundations.vtt","poster":"https://addaly.com/videos/machine-learning-foundations.jpg","seconds":920,"bytes":122072447,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"what-learning-is","title":"What learning is, and what it is not","summary":"Before any algorithm, the vocabulary and the honest framing. What a dataset actually is, what a loss function commits you to, what number your model has to beat before anyone should care, and the large class of problems where the correct machine learning solution is not to use machine learning.","outcome":"Take a vague business question, state it as a dataset with a defined row, a defined target and a defined moment of prediction, name the loss and the baseline it must beat, and justify in one paragraph whether machine learning is the right tool at all.","lessons":[{"slug":"what-learning-means","title":"What a machine actually learns","url":"https://addaly.com/learn/machine-learning-foundations/what-learning-means","api":"https://addaly.com/api/lesson/machine-learning-foundations/what-learning-means","minutes":8,"keyIdea":"Learning means adjusting the parameters of a shape you chose until a chosen error number is as small as it can be."},{"slug":"supervised-and-unsupervised","title":"With answers, and without","url":"https://addaly.com/learn/machine-learning-foundations/supervised-and-unsupervised","api":"https://addaly.com/api/lesson/machine-learning-foundations/supervised-and-unsupervised","minutes":7,"keyIdea":"A supervised model learns your labels, not the reality behind them, so who made the labels is part of the model."},{"slug":"the-shape-of-a-dataset","title":"What a row is, and why that decision is the whole project","url":"https://addaly.com/learn/machine-learning-foundations/the-shape-of-a-dataset","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-shape-of-a-dataset","minutes":9,"keyIdea":"Decide what one row is and when the target becomes knowable before you write any code, because every split, metric and deployment decision inherits that choice silently."},{"slug":"what-a-loss-function-encodes","title":"The loss is where you state what a mistake costs","url":"https://addaly.com/learn/machine-learning-foundations/what-a-loss-function-encodes","api":"https://addaly.com/api/lesson/machine-learning-foundations/what-a-loss-function-encodes","minutes":9,"keyIdea":"Squared error fits the mean and fears outliers, absolute error fits the median and ignores them, log loss punishes confident mistakes without limit, and none of these is the metric you report."},{"slug":"the-baseline-you-must-beat","title":"The number your model has to beat before anyone should care","url":"https://addaly.com/learn/machine-learning-foundations/the-baseline-you-must-beat","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-baseline-you-must-beat","minutes":8,"keyIdea":"Compute the constant, persistence and existing-rule baselines before training, and report the gap between baseline and model rather than the model's score alone."},{"slug":"prediction-is-not-explanation","title":"Why a model that predicts well cannot tell you what to change","url":"https://addaly.com/learn/machine-learning-foundations/prediction-is-not-explanation","api":"https://addaly.com/api/lesson/machine-learning-foundations/prediction-is-not-explanation","minutes":9,"keyIdea":"A predictive model reports associations that hold when you leave the world alone; changing something requires an experiment or an explicit causal assumption, and no accuracy score can substitute for either."},{"slug":"when-not-to-use-machine-learning","title":"The problems where the right answer is a rule","url":"https://addaly.com/learn/machine-learning-foundations/when-not-to-use-machine-learning","api":"https://addaly.com/api/lesson/machine-learning-foundations/when-not-to-use-machine-learning","minutes":8,"keyIdea":"Machine learning earns its cost only when the decision rule is real but unwritable; when the rule is known, exact, or the data is too thin to tell a good model from a lucky one, code the rule."},{"slug":"the-whole-loop","title":"The whole loop, once, before we slow down","url":"https://addaly.com/learn/machine-learning-foundations/the-whole-loop","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-whole-loop","minutes":10,"keyIdea":"The whole discipline is nine steps with one irreversible arrow: the test set is touched once, at the end, after every decision has been made without it."},{"slug":"a-toolkit-that-costs-nothing","title":"A working setup that costs nothing","url":"https://addaly.com/learn/machine-learning-foundations/a-toolkit-that-costs-nothing","api":"https://addaly.com/api/lesson/machine-learning-foundations/a-toolkit-that-costs-nothing","minutes":8,"keyIdea":"The standard toolchain for classical machine learning is free and open source; the ceiling on free compute constrains pretraining large models, not the tabular work that most jobs consist of."}]},{"slug":"linear-models-and-fitting","title":"Linear models and the machinery of fitting","summary":"The simplest useful model, taken seriously. Fit a line by hand, watch an optimiser find the same answer, then extend it to probabilities, to many classes, and to curves, and learn to read the coefficients without believing more than they say.","outcome":"Fit and diagnose a linear or logistic model end to end: compute its loss by hand on a handful of rows, tune the learning rate from the shape of the loss curve, state what a coefficient does and does not mean in the units of the data, and explain what ridge and lasso penalties change about the fitted parameters.","lessons":[{"slug":"fitting-a-line-by-hand","title":"Fitting a line to five points, by hand","url":"https://addaly.com/learn/machine-learning-foundations/fitting-a-line-by-hand","api":"https://addaly.com/api/lesson/machine-learning-foundations/fitting-a-line-by-hand","minutes":9,"keyIdea":"Fitting means choosing parameter values that make a chosen error number small; the coefficient carries real units, and a linear model will extrapolate far outside its data without any signal that it is guessing."},{"slug":"the-closed-form-and-why-we-leave-it","title":"There is an exact answer, and we usually refuse it","url":"https://addaly.com/learn/machine-learning-foundations/the-closed-form-and-why-we-leave-it","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-closed-form-and-why-we-leave-it","minutes":8,"keyIdea":"Linear regression with squared error has an exact one-step solution; gradient descent is taught because it is the only method that still works when the loss or the model has no such formula."},{"slug":"gradient-descent","title":"Gradient descent, or walking downhill in fog","url":"https://addaly.com/learn/machine-learning-foundations/gradient-descent","api":"https://addaly.com/api/lesson/machine-learning-foundations/gradient-descent","minutes":8,"keyIdea":"Gradient descent only knows the slope where it is standing; the step size decides whether that knowledge helps or destroys it."},{"slug":"batches-and-the-learning-rate","title":"Batches, epochs, and the two knobs that decide everything","url":"https://addaly.com/learn/machine-learning-foundations/batches-and-the-learning-rate","api":"https://addaly.com/api/lesson/machine-learning-foundations/batches-and-the-learning-rate","minutes":9,"keyIdea":"Mini-batch size trades gradient noise against step count, and the learning rate must match the scale of the features, which is why standardising inputs fixes more convergence problems than raising the iteration limit."},{"slug":"reading-a-loss-curve","title":"Diagnosing a model from the shape of its loss curve","url":"https://addaly.com/learn/machine-learning-foundations/reading-a-loss-curve","api":"https://addaly.com/api/lesson/machine-learning-foundations/reading-a-loss-curve","minutes":8,"keyIdea":"Plot training and validation loss on one axis every run: the gap diagnoses fit, the slope at the end diagnoses training length, and NaN or a flat line diagnoses a bug rather than a modelling problem."},{"slug":"logistic-regression-from-odds","title":"Logistic regression, built from odds rather than assumed","url":"https://addaly.com/learn/machine-learning-foundations/logistic-regression-from-odds","api":"https://addaly.com/api/lesson/machine-learning-foundations/logistic-regression-from-odds","minutes":10,"keyIdea":"Logistic regression models the log-odds as a straight line, which is why the sigmoid appears and why a coefficient multiplies the odds by a constant factor rather than shifting the probability by a constant amount."},{"slug":"reading-coefficients","title":"What a coefficient says, and the four ways it lies","url":"https://addaly.com/learn/machine-learning-foundations/reading-coefficients","api":"https://addaly.com/api/lesson/machine-learning-foundations/reading-coefficients","minutes":9,"keyIdea":"A coefficient is a change in the target per unit of one feature, holding the others in the model fixed, so it is only comparable when standardised, only stable when features are uncorrelated, and only meaningful relative to the exact set of columns included."},{"slug":"ridge-and-lasso","title":"Regularisation: paying for large coefficients","url":"https://addaly.com/learn/machine-learning-foundations/ridge-and-lasso","api":"https://addaly.com/api/lesson/machine-learning-foundations/ridge-and-lasso","minutes":9,"keyIdea":"Ridge and lasso add a price on coefficient size to the loss; lasso reaches exactly zero because the gradient of the absolute value stays constant as the coefficient shrinks, while ridge's push fades away near zero."},{"slug":"making-a-linear-model-curve","title":"Making a straight-line model bend","url":"https://addaly.com/learn/machine-learning-foundations/making-a-linear-model-curve","api":"https://addaly.com/api/lesson/machine-learning-foundations/making-a-linear-model-curve","minutes":8,"keyIdea":"A linear model bends by manufacturing columns (squares, interactions, bins, splines) and the interaction terms matter most, because finding those automatically is precisely what tree models do that linear models cannot."},{"slug":"more-than-two-classes","title":"More than two classes, and what changes","url":"https://addaly.com/learn/machine-learning-foundations/more-than-two-classes","api":"https://addaly.com/api/lesson/machine-learning-foundations/more-than-two-classes","minutes":8,"keyIdea":"Softmax makes classes compete for a fixed probability budget, which is correct when exactly one label is true and wrong for multi-label problems, where independent sigmoids with their own thresholds are needed."}]},{"slug":"the-data-is-the-job","title":"The data is the job","summary":"The part of machine learning that takes most of the time and wins most of the accuracy. Numbers, categories, missing values, dates and text turned into columns a model can use, and the two failures that quietly destroy more projects than any modelling mistake: leakage, and a sample that does not represent what you will predict on.","outcome":"Take a raw table with mixed types, missing values, high-cardinality categories, dates and free text, and produce a fitted preprocessing pipeline that leaks nothing from the held-out data, handles categories unseen at training time, and whose every transformation you can justify by what the downstream model requires.","lessons":[{"slug":"features-beat-models","title":"Features beat models","url":"https://addaly.com/learn/machine-learning-foundations/features-beat-models","api":"https://addaly.com/api/lesson/machine-learning-foundations/features-beat-models","minutes":9,"keyIdea":"Ask of every feature: at the moment I need the prediction, does this value already exist with this value?"},{"slug":"numerical-features","title":"Scaling, and the transforms that change what a model can see","url":"https://addaly.com/learn/machine-learning-foundations/numerical-features","api":"https://addaly.com/api/lesson/machine-learning-foundations/numerical-features","minutes":9,"keyIdea":"Scaling is required by distance-based, penalised and gradient-fitted models and irrelevant to trees; the log transform is not cosmetic but a claim that ratios matter more than differences."},{"slug":"categorical-encoding","title":"Turning categories into numbers without lying about them","url":"https://addaly.com/learn/machine-learning-foundations/categorical-encoding","api":"https://addaly.com/api/lesson/machine-learning-foundations/categorical-encoding","minutes":9,"keyIdea":"One-hot is the safe default because it asserts nothing about order or distance; target encoding is powerful and leaks unless computed out-of-fold and smoothed towards the base rate."},{"slug":"when-a-column-has-thousands-of-levels","title":"When a column has thousands of levels","url":"https://addaly.com/learn/machine-learning-foundations/when-a-column-has-thousands-of-levels","api":"https://addaly.com/api/lesson/machine-learning-foundations/when-a-column-has-thousands-of-levels","minutes":8,"keyIdea":"High-cardinality columns need a fixed-size representation (grouping, counting, hashing or a learned embedding) and any identifier that will not exist for an unseen row is not a feature at all."},{"slug":"missing-values","title":"Missing values, and the information in the gap","url":"https://addaly.com/learn/machine-learning-foundations/missing-values","api":"https://addaly.com/api/lesson/machine-learning-foundations/missing-values","minutes":9,"keyIdea":"Add a missingness indicator before imputing, because the fact that a value is absent is frequently more predictive than the value would have been, and let boosted trees learn their own direction for NaN rather than imputing at all."},{"slug":"outliers-and-what-to-do-with-them","title":"Outliers: error, extreme, or the thing you are looking for","url":"https://addaly.com/learn/machine-learning-foundations/outliers-and-what-to-do-with-them","api":"https://addaly.com/api/lesson/machine-learning-foundations/outliers-and-what-to-do-with-them","minutes":8,"keyIdea":"Decide first whether an extreme value is an error, a genuine rarity, or the target itself, because the same removal step is correct in the first case, harmful in the second, and destroys the problem in the third."},{"slug":"dates-and-cycles","title":"Dates, durations, and the trouble with midnight","url":"https://addaly.com/learn/machine-learning-foundations/dates-and-cycles","api":"https://addaly.com/api/lesson/machine-learning-foundations/dates-and-cycles","minutes":8,"keyIdea":"Decompose timestamps into durations and cyclical components, use local time for behavioural features, and shift any rolling window by one period so it cannot include the value you are predicting."},{"slug":"text-as-numbers","title":"Text as columns: counting words before you embed them","url":"https://addaly.com/learn/machine-learning-foundations/text-as-numbers","api":"https://addaly.com/api/lesson/machine-learning-foundations/text-as-numbers","minutes":9,"keyIdea":"TF-IDF over word and bigram counts with a linear model is a strong, fast, fully interpretable text baseline; its ceiling is that it cannot represent word order or word similarity, which is precisely what embeddings add."},{"slug":"leakage-in-detail","title":"Leakage: a catalogue of the ways the answer gets in","url":"https://addaly.com/learn/machine-learning-foundations/leakage-in-detail","api":"https://addaly.com/api/lesson/machine-learning-foundations/leakage-in-detail","minutes":10,"keyIdea":"Leakage is any feature whose training value would not be available in that form at prediction time, and the reliable test is to reconstruct a row using only information timestamped before the moment of prediction."},{"slug":"the-fit-transform-contract","title":"Fit on train, transform everywhere: the contract that keeps you honest","url":"https://addaly.com/learn/machine-learning-foundations/the-fit-transform-contract","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-fit-transform-contract","minutes":8,"keyIdea":"Every transformation that learns a parameter must learn it inside each cross-validation fold, which is why a Pipeline changes the score you get rather than merely tidying the code."},{"slug":"where-the-rows-came-from","title":"Where the rows came from, and who is missing","url":"https://addaly.com/learn/machine-learning-foundations/where-the-rows-came-from","api":"https://addaly.com/api/lesson/machine-learning-foundations/where-the-rows-came-from","minutes":9,"keyIdea":"A held-out set cannot detect a sample that misrepresents the population, because it is drawn from the same sample, so the composition of the data must be reasoned about from how it was collected, not measured from within it."},{"slug":"imbalanced-classes","title":"When one class is 0.3% of the data","url":"https://addaly.com/learn/machine-learning-foundations/imbalanced-classes","api":"https://addaly.com/api/lesson/machine-learning-foundations/imbalanced-classes","minutes":9,"keyIdea":"Imbalance usually breaks the decision threshold rather than the model, so move the threshold and change the metric before resampling, and resample only inside the cross-validation fold, never before the split."}]},{"slug":"generalisation","title":"Generalisation, and the discipline of held-out data","summary":"Why a model that fits your data is not yet a model that works, and the machinery for finding out: cross-validation, splits that respect the structure of the data, learning curves that tell you whether more data would help, and an honest account of what happens to a validation set you have used two hundred times.","outcome":"Design a validation scheme that matches the structure of the data (grouped, stratified or time-ordered as required) run a hyperparameter search inside it without contaminating the estimate, and state from a learning curve whether the next improvement should come from more data, better features or a different model.","lessons":[{"slug":"not-looking","title":"Train, validation, test, and the discipline of not looking","url":"https://addaly.com/learn/machine-learning-foundations/not-looking","api":"https://addaly.com/api/lesson/machine-learning-foundations/not-looking","minutes":9,"keyIdea":"The test set is a single-use measuring device; every peek turns it into another validation set."},{"slug":"overfitting-and-underfitting","title":"Overfitting, underfitting, and how to tell","url":"https://addaly.com/learn/machine-learning-foundations/overfitting-and-underfitting","api":"https://addaly.com/api/lesson/machine-learning-foundations/overfitting-and-underfitting","minutes":8,"keyIdea":"Compare training error with validation error; the gap between them, not the score itself, names the problem."},{"slug":"cross-validation","title":"Cross-validation: using every row twice, legally","url":"https://addaly.com/learn/machine-learning-foundations/cross-validation","api":"https://addaly.com/api/lesson/machine-learning-foundations/cross-validation","minutes":9,"keyIdea":"Cross-validation averages several held-out estimates so a score depends less on where the split fell, but the best score from a hyperparameter search is biased upward and needs an outer loop or an untouched test set to correct."},{"slug":"splits-that-respect-structure","title":"Splits that respect the structure of the data","url":"https://addaly.com/learn/machine-learning-foundations/splits-that-respect-structure","api":"https://addaly.com/api/lesson/machine-learning-foundations/splits-that-respect-structure","minutes":9,"keyIdea":"Match the split to the structure (group by entity, order by time with a gap equal to the label delay, stratify small or imbalanced sets) and verify with a label-shuffle test that a correct pipeline collapses to chance."},{"slug":"bias-and-variance","title":"Bias and variance, with numbers attached","url":"https://addaly.com/learn/machine-learning-foundations/bias-and-variance","api":"https://addaly.com/api/lesson/machine-learning-foundations/bias-and-variance","minutes":9,"keyIdea":"High bias is being wrong the same way every time and high variance is being wrong differently every time; the training-validation gap tells you which, and the classical U-shaped curve stops describing very large models."},{"slug":"learning-curves-and-more-data","title":"Would more data help? The curve that answers it","url":"https://addaly.com/learn/machine-learning-foundations/learning-curves-and-more-data","api":"https://addaly.com/api/lesson/machine-learning-foundations/learning-curves-and-more-data","minutes":8,"keyIdea":"Plot validation score against training-set size: a curve still climbing means collect more data, a converged pair at a poor score means the features or the model family are the limit, and no learning curve can anticipate a feature you have not built."},{"slug":"hyperparameter-search","title":"Searching hyperparameters without fooling yourself","url":"https://addaly.com/learn/machine-learning-foundations/hyperparameter-search","api":"https://addaly.com/api/lesson/machine-learning-foundations/hyperparameter-search","minutes":9,"keyIdea":"Random search over log-scaled distributions beats grid search at equal cost because it tries many distinct values of the parameters that matter, and every configuration evaluated adds selection bias that only an untouched test set can measure."},{"slug":"the-validation-set-wears-out","title":"A validation set you have used two hundred times","url":"https://addaly.com/learn/machine-learning-foundations/the-validation-set-wears-out","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-validation-set-wears-out","minutes":8,"keyIdea":"The best of many noisy validation estimates is biased upward by roughly the standard error times the square root of twice the log of the number of comparisons, so the count of experiments belongs in the report alongside the score."},{"slug":"how-much-data-is-enough","title":"How much data do I need?","url":"https://addaly.com/learn/machine-learning-foundations/how-much-data-is-enough","api":"https://addaly.com/api/lesson/machine-learning-foundations/how-much-data-is-enough","minutes":8,"keyIdea":"Size the validation set from the precision you need (the standard error of a proportion at n=1,000 is about 1.1 points), and size the training set by events per feature rather than by total rows."},{"slug":"when-more-parameters-stopped-being-worse","title":"Double descent, and the picture that stopped being complete","url":"https://addaly.com/learn/machine-learning-foundations/when-more-parameters-stopped-being-worse","api":"https://addaly.com/api/lesson/machine-learning-foundations/when-more-parameters-stopped-being-worse","minutes":8,"keyIdea":"Test error can fall again past the point where a model fits the training data exactly, because extra capacity gives the optimiser many perfect fits to choose among and gradient descent prefers smooth ones: an observation that is well replicated and not yet fully explained."}]},{"slug":"measuring-honestly","title":"Measuring a model honestly","summary":"Everything that turns a fitted model into a decision: the confusion matrix worked by hand, the threshold that nobody should leave at 0.5, curves that summarise every threshold at once, whether the probabilities mean anything, whether an improvement is real, and what fairness can and cannot be made to mean mathematically.","outcome":"Given a fitted classifier and a stated cost of each kind of error, compute the confusion matrix at a chosen threshold, defend that threshold by expected cost, say whether the model's probabilities are calibrated, decide with an interval whether one model genuinely beats another, and report per-group performance with a defensible fairness criterion and its known trade-offs.","lessons":[{"slug":"when-accuracy-lies","title":"When accuracy lies","url":"https://addaly.com/learn/machine-learning-foundations/when-accuracy-lies","api":"https://addaly.com/api/lesson/machine-learning-foundations/when-accuracy-lies","minutes":9,"keyIdea":"Choose the metric that matches what each kind of mistake costs, then set the threshold yourself."},{"slug":"confusion-matrix-worked","title":"The four numbers, worked through","url":"https://addaly.com/learn/machine-learning-foundations/confusion-matrix-worked","api":"https://addaly.com/api/lesson/machine-learning-foundations/confusion-matrix-worked","minutes":9,"keyIdea":"Precision divides by what the model said and recall by what was true, and precision alone is not a property of the model: it moves with the base rate of the population you run on."},{"slug":"choosing-the-threshold","title":"The threshold is a business decision, not a default","url":"https://addaly.com/learn/machine-learning-foundations/choosing-the-threshold","api":"https://addaly.com/api/lesson/machine-learning-foundations/choosing-the-threshold","minutes":9,"keyIdea":"The model produces a score and the threshold converts it into a decision; choose the threshold from the relative cost of the two errors, the capacity to act, or a stated requirement, never from the library default."},{"slug":"roc-and-pr-curves","title":"ROC and precision-recall: every threshold at once","url":"https://addaly.com/learn/machine-learning-foundations/roc-and-pr-curves","api":"https://addaly.com/api/lesson/machine-learning-foundations/roc-and-pr-curves","minutes":9,"keyIdea":"AUC is the probability that a random positive outscores a random negative, so it measures ranking only and is insensitive to a large absolute number of false positives when negatives vastly outnumber positives, which is why imbalanced problems should be reported with average precision."},{"slug":"probability-calibration","title":"Does 0.7 mean seventy per cent?","url":"https://addaly.com/learn/machine-learning-foundations/probability-calibration","api":"https://addaly.com/api/lesson/machine-learning-foundations/probability-calibration","minutes":9,"keyIdea":"Calibration asks whether a predicted 0.7 corresponds to 70% of cases occurring, is separate from ranking quality, and is fixed by a monotonic post-processing step that leaves AUC unchanged."},{"slug":"regression-metrics","title":"Metrics for a number, and what each one hides","url":"https://addaly.com/learn/machine-learning-foundations/regression-metrics","api":"https://addaly.com/api/lesson/machine-learning-foundations/regression-metrics","minutes":8,"keyIdea":"Report MAE and RMSE together because their gap measures how uneven the errors are, and plot residuals against predictions: the shape of the failure carries information no summary metric retains."},{"slug":"comparing-two-models","title":"Is that improvement real?","url":"https://addaly.com/learn/machine-learning-foundations/comparing-two-models","api":"https://addaly.com/api/lesson/machine-learning-foundations/comparing-two-models","minutes":9,"keyIdea":"Bootstrap the difference between two models on the same resampled rows and report the interval; a t-test across cross-validation folds violates independence and declares significance far too often."},{"slug":"cost-sensitive-decisions","title":"From a probability to a decision worth making","url":"https://addaly.com/learn/machine-learning-foundations/cost-sensitive-decisions","api":"https://addaly.com/api/lesson/machine-learning-foundations/cost-sensitive-decisions","minutes":8,"keyIdea":"The break-even threshold is the cost of a false positive divided by the sum of both error costs, it can and usually should be computed per row from that row's stakes, and the arithmetic is only valid for whoever's costs were put into it."},{"slug":"fairness-you-can-compute","title":"Fairness as arithmetic: the definitions and what each one demands","url":"https://addaly.com/learn/machine-learning-foundations/fairness-you-can-compute","api":"https://addaly.com/api/lesson/machine-learning-foundations/fairness-you-can-compute","minutes":10,"keyIdea":"Demographic parity, equalised odds and within-group calibration are three precise and different demands, dropping the protected column removes your ability to measure disparity without removing the disparity, and every one of these criteria is silent about bias already inside the labels."},{"slug":"the-impossibility-result","title":"Why you cannot have all three","url":"https://addaly.com/learn/machine-learning-foundations/the-impossibility-result","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-impossibility-result","minutes":8,"keyIdea":"When two groups have different base rates, calibration within groups and equal error rates across groups are mathematically incompatible, so fairness requires an explicit and documented choice of which to satisfy."},{"slug":"slice-based-error-analysis","title":"The average is hiding the failure","url":"https://addaly.com/learn/machine-learning-foundations/slice-based-error-analysis","api":"https://addaly.com/api/lesson/machine-learning-foundations/slice-based-error-analysis","minutes":9,"keyIdea":"A headline metric is a weighted average that hides its worst population, so slice by every dimension you can name, read fifty errors by hand to find the causes, and turn each failure mode into a fixed test set that runs on every change."}]},{"slug":"trees-and-ensembles","title":"Trees, ensembles, and the algorithms that win on tables","summary":"The family that actually wins most tabular problems, taken apart. How a single split is chosen, why averaging many deep trees works and why adding many shallow ones works for the opposite reason, the handful of hyperparameters that matter in the boosting libraries, and the two older algorithms still worth knowing, plus an honest account of what a feature importance number does and does not tell you.","outcome":"Choose between a linear model, a random forest and a gradient boosting library for a given tabular problem and defend the choice, tune the four hyperparameters that actually matter in each, and explain why impurity-based feature importance is biased and what permutation importance and SHAP replace it with.","lessons":[{"slug":"the-classic-algorithms","title":"The classic algorithms, and when each is right","url":"https://addaly.com/learn/machine-learning-foundations/the-classic-algorithms","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-classic-algorithms","minutes":10,"keyIdea":"On tabular data, use linear models as a floor and gradient boosting as the answer; everything else needs a stated reason."},{"slug":"how-a-tree-chooses-a-split","title":"How a tree chooses where to cut","url":"https://addaly.com/learn/machine-learning-foundations/how-a-tree-chooses-a-split","api":"https://addaly.com/api/lesson/machine-learning-foundations/how-a-tree-chooses-a-split","minutes":9,"keyIdea":"A tree scores every candidate threshold by the weighted drop in impurity and takes the best one greedily, which gives it interactions for free but leaves it unable to express a diagonal boundary or extrapolate beyond the training range."},{"slug":"from-one-tree-to-a-forest","title":"Bagging: many unstable models, averaged","url":"https://addaly.com/learn/machine-learning-foundations/from-one-tree-to-a-forest","api":"https://addaly.com/api/lesson/machine-learning-foundations/from-one-tree-to-a-forest","minutes":9,"keyIdea":"Bagging reduces variance by averaging, and a random forest adds per-split feature sampling because decorrelating the trees removes more variance than making each individual tree better."},{"slug":"boosting-mechanics","title":"Boosting: each model fixes the last one's mistakes","url":"https://addaly.com/learn/machine-learning-foundations/boosting-mechanics","api":"https://addaly.com/api/lesson/machine-learning-foundations/boosting-mechanics","minutes":9,"keyIdea":"Boosting fits each shallow tree to the residual left by the previous ones and adds only a fraction of it, so accuracy accumulates slowly enough that noise averages out, which is why a boosted model needs early stopping and a forest does not."},{"slug":"the-boosting-libraries","title":"XGBoost, LightGBM, CatBoost: what actually differs","url":"https://addaly.com/learn/machine-learning-foundations/the-boosting-libraries","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-boosting-libraries","minutes":9,"keyIdea":"The three boosting libraries implement the same algorithm with different tree-growth and categorical handling, and six hyperparameters (learning rate, early stopping, depth, minimum leaf evidence, subsampling and L2) cover essentially all the tuning that matters."},{"slug":"nearest-neighbours","title":"k-nearest neighbours, and why distance stops meaning anything","url":"https://addaly.com/learn/machine-learning-foundations/nearest-neighbours","api":"https://addaly.com/api/lesson/machine-learning-foundations/nearest-neighbours","minutes":8,"keyIdea":"k-NN makes the assumption behind most machine learning explicit (nearby points share targets) and the curse of dimensionality breaks it because distances concentrate, so the nearest neighbour in 1,000 raw dimensions is barely nearer than the farthest."},{"slug":"naive-bayes","title":"Naive Bayes: wrong assumptions, useful results","url":"https://addaly.com/learn/machine-learning-foundations/naive-bayes","api":"https://addaly.com/api/lesson/machine-learning-foundations/naive-bayes","minutes":8,"keyIdea":"Naive Bayes assumes features are independent given the class, which is false and inflates its probabilities without usually changing which class ranks highest, so it discriminates well while being badly calibrated."},{"slug":"support-vector-machines","title":"Support vector machines and the kernel trick","url":"https://addaly.com/learn/machine-learning-foundations/support-vector-machines","api":"https://addaly.com/api/lesson/machine-learning-foundations/support-vector-machines","minutes":9,"keyIdea":"An SVM maximises the margin and depends only on the support vectors; the kernel trick works because the optimisation needs only pairwise dot products, so an infinite-dimensional feature space costs one similarity computation instead of infinite coordinates."},{"slug":"feature-importance-and-its-lies","title":"Feature importance, and the ways it misleads","url":"https://addaly.com/learn/machine-learning-foundations/feature-importance-and-its-lies","api":"https://addaly.com/api/lesson/machine-learning-foundations/feature-importance-and-its-lies","minutes":9,"keyIdea":"Impurity importance favours high-cardinality features and is computed on training data; permutation importance on validation data measures what you meant, but both collapse when features are correlated, so permute clustered groups rather than single columns."},{"slug":"shap-and-partial-dependence","title":"Explaining one prediction, and the shape of one feature","url":"https://addaly.com/learn/machine-learning-foundations/shap-and-partial-dependence","api":"https://addaly.com/api/lesson/machine-learning-foundations/shap-and-partial-dependence","minutes":9,"keyIdea":"SHAP divides one prediction's departure from the average among the features with an exact additive decomposition, partial dependence shows a feature's average learned shape, and both assume feature independence in ways that break when the columns are correlated."}]},{"slug":"learning-without-labels","title":"Learning without labels, and learning a representation","summary":"What you can do when nobody has labelled anything: group similar rows, compress many columns into a few, find the rows that do not belong. Then the idea underneath modern search, recommendation and retrieval: an embedding, what it is geometrically, how to get one for free, and how to search a million of them in milliseconds.","outcome":"Cluster a dataset and defend the number of clusters with more than an elbow plot, reduce dimensionality with PCA and state how much information the reduction discarded, explain what an embedding is as a geometric object, and build a working nearest-neighbour search over pretrained embeddings without a GPU.","lessons":[{"slug":"clustering-with-k-means","title":"k-means, and what it assumes about your data","url":"https://addaly.com/learn/machine-learning-foundations/clustering-with-k-means","api":"https://addaly.com/api/lesson/machine-learning-foundations/clustering-with-k-means","minutes":9,"keyIdea":"k-means minimises within-cluster squared distance, which assumes spherical clusters of similar size with no outliers and a known k, and it will return confident groupings from data that has no group structure at all."},{"slug":"how-many-clusters","title":"Choosing k, and why the elbow rarely helps","url":"https://addaly.com/learn/machine-learning-foundations/how-many-clusters","api":"https://addaly.com/api/lesson/machine-learning-foundations/how-many-clusters","minutes":8,"keyIdea":"The elbow rarely produces an unambiguous answer; use silhouette per cluster, the gap statistic, which can say that no clustering is right, and stability across subsamples, and accept that the useful k is often set by what the organisation can act on."},{"slug":"density-and-hierarchy","title":"DBSCAN and hierarchical clustering: when shape and structure matter","url":"https://addaly.com/learn/machine-learning-foundations/density-and-hierarchy","api":"https://addaly.com/api/lesson/machine-learning-foundations/density-and-hierarchy","minutes":8,"keyIdea":"DBSCAN defines clusters as dense regions, so it finds arbitrary shapes, decides the cluster count itself and labels outliers as noise, at the cost of assuming one density threshold suits the whole dataset, which HDBSCAN removes."},{"slug":"principal-components","title":"PCA: fewer columns, and what you gave up","url":"https://addaly.com/learn/machine-learning-foundations/principal-components","api":"https://addaly.com/api/lesson/machine-learning-foundations/principal-components","minutes":9,"keyIdea":"PCA rotates to axes ordered by variance and keeps the first few, which requires standardised features and finds only linear structure, and because it never sees the target, the variance it discards can be the signal you needed."},{"slug":"seeing-high-dimensional-data","title":"t-SNE and UMAP, and how they mislead","url":"https://addaly.com/learn/machine-learning-foundations/seeing-high-dimensional-data","api":"https://addaly.com/api/lesson/machine-learning-foundations/seeing-high-dimensional-data","minutes":8,"keyIdea":"t-SNE and UMAP preserve local neighbourhoods and deliberately distort cluster sizes and between-cluster distances, so the only reliable information in the plot is which points are neighbours; and they produce convincing clusters from pure noise."},{"slug":"what-an-embedding-is","title":"What an embedding actually is","url":"https://addaly.com/learn/machine-learning-foundations/what-an-embedding-is","api":"https://addaly.com/api/lesson/machine-learning-foundations/what-an-embedding-is","minutes":10,"keyIdea":"An embedding maps things to vectors so that geometric closeness means similarity in the sense the training task defined, which is why the vectors are compared by angle rather than length and why they carry the training corpus's biases in their geometry."},{"slug":"embeddings-in-practice","title":"Building a working semantic search with no GPU","url":"https://addaly.com/learn/machine-learning-foundations/embeddings-in-practice","api":"https://addaly.com/api/lesson/machine-learning-foundations/embeddings-in-practice","minutes":9,"keyIdea":"Free CPU-sized embedding models plus an approximate nearest-neighbour index give working semantic search, but chunking affects quality more than model choice and pure embedding search fails on identifiers and negation, which is why production systems combine it with keyword search."},{"slug":"recommendation-by-factorisation","title":"Recommendation: learning a vector per user and per item","url":"https://addaly.com/learn/machine-learning-foundations/recommendation-by-factorisation","api":"https://addaly.com/api/lesson/machine-learning-foundations/recommendation-by-factorisation","minutes":9,"keyIdea":"Matrix factorisation learns a vector per user and per item by fitting only the observed cells, which makes it an embedding trained on interactions, and its recommendations shape the next dataset, so offline metrics are always measured on data the previous model helped create."},{"slug":"finding-what-does-not-belong","title":"Anomaly detection, and the base rate that ruins it","url":"https://addaly.com/learn/machine-learning-foundations/finding-what-does-not-belong","api":"https://addaly.com/api/lesson/machine-learning-foundations/finding-what-does-not-belong","minutes":8,"keyIdea":"Anomaly detection models normality instead of learning a boundary, and at a 0.01% base rate even a 1% false positive rate produces a queue that is 99% wrong, so the design work is narrowing the population or ranking, not improving the detector."},{"slug":"learning-from-unlabelled-data","title":"Self-supervised learning: making labels out of the data itself","url":"https://addaly.com/learn/machine-learning-foundations/learning-from-unlabelled-data","api":"https://addaly.com/api/lesson/machine-learning-foundations/learning-from-unlabelled-data","minutes":9,"keyIdea":"Self-supervised learning manufactures a supervised task from the data's own structure, and the pretext task chosen decides what the representation encodes, which is why a model pretrained with colour augmentation has learned that colour does not matter."}]},{"slug":"neural-networks","title":"Neural networks, built from what you already know","summary":"A network is a stack of linear models with a bend between them, trained by the same gradient descent from module 2. This module builds it that way: why one layer is not enough, how the chain rule assigns credit backwards, what actually stopped networks working before 2012, and the two architectures, convolution and attention, that carry almost everything you have heard of.","outcome":"Explain why a multi-layer network with no non-linearity collapses to a single linear model, trace one backpropagation step through a two-layer network by hand, diagnose a training failure from the loss curve and the gradients, and fine-tune a pretrained model on a few hundred labelled examples using free compute.","lessons":[{"slug":"neural-networks","title":"Neural networks as the natural next step","url":"https://addaly.com/learn/machine-learning-foundations/neural-networks","api":"https://addaly.com/api/lesson/machine-learning-foundations/neural-networks","minutes":9,"keyIdea":"A neural network learns its own features; the loss, the splits, the metrics and the thresholds do not change."},{"slug":"why-one-layer-is-not-enough","title":"XOR, and why the bend is the whole idea","url":"https://addaly.com/learn/machine-learning-foundations/why-one-layer-is-not-enough","api":"https://addaly.com/api/lesson/machine-learning-foundations/why-one-layer-is-not-enough","minutes":8,"keyIdea":"A stack of linear layers collapses algebraically into one linear layer, so every capability a network has beyond linear regression comes from the non-linearity applied between the layers."},{"slug":"activations","title":"The bends: ReLU, and why sigmoid stopped being used inside networks","url":"https://addaly.com/learn/machine-learning-foundations/activations","api":"https://addaly.com/api/lesson/machine-learning-foundations/activations","minutes":8,"keyIdea":"Sigmoid's derivative peaks at 0.25, so backpropagation shrinks the gradient by at least a factor of four per layer and deep networks stopped learning; ReLU's derivative is exactly 1 where it is active, which is why a crude hinge replaced a smooth curve."},{"slug":"backpropagation-by-hand","title":"Backpropagation, traced through one tiny network","url":"https://addaly.com/learn/machine-learning-foundations/backpropagation-by-hand","api":"https://addaly.com/api/lesson/machine-learning-foundations/backpropagation-by-hand","minutes":10,"keyIdea":"Backpropagation multiplies the gradient arriving from above by each operation's local derivative, which computes every weight's gradient in one backward pass, and explains why gradients vanish, why dead ReLUs stop learning, and why training needs far more memory than inference."},{"slug":"initialisation-and-normalisation","title":"Starting well, and staying well-behaved","url":"https://addaly.com/learn/machine-learning-foundations/initialisation-and-normalisation","api":"https://addaly.com/api/lesson/machine-learning-foundations/initialisation-and-normalisation","minutes":9,"keyIdea":"Initialisation scale keeps activation variance stable across layers, normalisation keeps it stable across training, and a residual connection gives the gradient an unmultiplied path backwards, which is what made networks deeper than about twenty layers trainable at all."},{"slug":"optimisers-beyond-sgd","title":"Momentum, Adam, and what the optimiser is doing for you","url":"https://addaly.com/learn/machine-learning-foundations/optimisers-beyond-sgd","api":"https://addaly.com/api/lesson/machine-learning-foundations/optimisers-beyond-sgd","minutes":8,"keyIdea":"Momentum averages recent gradients so oscillations cancel and consistent directions accumulate; Adam adds a per-parameter step size from the average squared gradient, and its weight decay must be applied outside that scaling, which is what AdamW does."},{"slug":"regularising-a-network","title":"Keeping a large network from memorising","url":"https://addaly.com/learn/machine-learning-foundations/regularising-a-network","api":"https://addaly.com/api/lesson/machine-learning-foundations/regularising-a-network","minutes":8,"keyIdea":"Early stopping and more data outrank every other regulariser, dropout must be disabled at inference or predictions become random, and before regularising anything you should confirm the network can deliberately memorise twenty examples: otherwise you are tuning around a bug."},{"slug":"convolutions","title":"Convolution: the same detector, everywhere in the image","url":"https://addaly.com/learn/machine-learning-foundations/convolutions","api":"https://addaly.com/api/lesson/machine-learning-foundations/convolutions","minutes":9,"keyIdea":"A convolution applies the same small filter at every position, so it learns a pattern once instead of separately per location, which cuts parameters by orders of magnitude and builds a hierarchy from edges to objects as depth increases."},{"slug":"from-sequences-to-attention","title":"Sequences: from recurrence to attention","url":"https://addaly.com/learn/machine-learning-foundations/from-sequences-to-attention","api":"https://addaly.com/api/lesson/machine-learning-foundations/from-sequences-to-attention","minutes":9,"keyIdea":"Attention lets every position read every other in one step by computing a similarity-weighted average, which removes the multiplication chain that limited recurrent networks and parallelises training, at a cost that grows with the square of the sequence length."},{"slug":"transfer-learning","title":"Standing on somebody else's compute","url":"https://addaly.com/learn/machine-learning-foundations/transfer-learning","api":"https://addaly.com/api/lesson/machine-learning-foundations/transfer-learning","minutes":9,"keyIdea":"Pretrained early layers encode general structure that transfers across tasks, so start by freezing the backbone and fitting a linear model on its features, and escalate to full fine-tuning only when the measurement says your data supports it."}]},{"slug":"into-the-world","title":"Into the world, and keeping it honest","summary":"The half of the job that starts when the notebook closes. Serving a model without the training and serving paths drifting apart, monitoring the things that actually fail, deciding when to retrain, making a model small enough to be affordable, and the two obligations that outlast the model: not letting it corrupt its own training data, and documenting who it was built for.","outcome":"Take a fitted model to a running service with a versioned artefact, a reproducible training run, monitoring that distinguishes covariate shift from concept drift, a stated retraining trigger, and a written record of what the model was trained on and who it should not be used for.","lessons":[{"slug":"the-model-is-not-the-system","title":"The model is about 5% of what you have to build","url":"https://addaly.com/learn/machine-learning-foundations/the-model-is-not-the-system","api":"https://addaly.com/api/lesson/machine-learning-foundations/the-model-is-not-the-system","minutes":8,"keyIdea":"The model is a small fraction of a production system; the rest is feature computation, versioning, serving, monitoring and rollback, and knowing the serving constraint before choosing a model is what stops you building something that cannot be deployed."},{"slug":"serving-a-model","title":"Batch, online, and the latency budget","url":"https://addaly.com/learn/machine-learning-foundations/serving-a-model","api":"https://addaly.com/api/lesson/machine-learning-foundations/serving-a-model","minutes":8,"keyIdea":"Feature retrieval usually dominates the latency budget rather than model inference, so precompute slow-moving features, and run a new model in shadow mode against real traffic before it serves anyone."},{"slug":"training-serving-skew","title":"When training and serving quietly disagree","url":"https://addaly.com/learn/machine-learning-foundations/training-serving-skew","api":"https://addaly.com/api/lesson/machine-learning-foundations/training-serving-skew","minutes":9,"keyIdea":"Training-serving skew is a systematic difference between how a feature is computed offline and online, and the reliable defences are shipping one serialised pipeline, importing shared feature code rather than copying it, and an automated test asserting both paths produce identical predictions on the same rows."},{"slug":"monitoring-what-matters","title":"Monitoring: what to watch, and in what order","url":"https://addaly.com/learn/machine-learning-foundations/monitoring-what-matters","api":"https://addaly.com/api/lesson/machine-learning-foundations/monitoring-what-matters","minutes":9,"keyIdea":"Monitor system health, input distributions, prediction distributions and finally actual performance: the first three need no labels and move earlier, and the alert must name which kind of shift it found because covariate, label and concept drift take different remedies."},{"slug":"when-to-retrain","title":"When to retrain, and what breaks when you do","url":"https://addaly.com/learn/machine-learning-foundations/when-to-retrain","api":"https://addaly.com/api/lesson/machine-learning-foundations/when-to-retrain","minutes":8,"keyIdea":"Retraining is a deployment and needs the same gates as one, including re-choosing the decision threshold for the new score distribution, and it is the correct remedy only when the relationship has genuinely changed, not for upstream data faults or serving bugs."},{"slug":"reproducibility","title":"Being able to build the same model twice","url":"https://addaly.com/learn/machine-learning-foundations/reproducibility","api":"https://addaly.com/api/lesson/machine-learning-foundations/reproducibility","minutes":8,"keyIdea":"Reproducibility requires pinning code, data, environment and seeds together, and because GPU and parallel arithmetic are not bitwise deterministic, the standard to hold is a rerun scoring within noise of the original rather than an identical artefact."},{"slug":"automl-and-when-it-is-right","title":"AutoML: what it automates, and what it cannot","url":"https://addaly.com/learn/machine-learning-foundations/automl-and-when-it-is-right","api":"https://addaly.com/api/lesson/machine-learning-foundations/automl-and-when-it-is-right","minutes":8,"keyIdea":"AutoML automates model selection and hyperparameter search, genuinely well, and free, but it cannot frame the problem, build features, detect leakage or choose the metric, which is where most of a model's quality is determined."},{"slug":"making-a-model-smaller","title":"Making a model small enough to be affordable","url":"https://addaly.com/learn/machine-learning-foundations/making-a-model-smaller","api":"https://addaly.com/api/lesson/machine-learning-foundations/making-a-model-smaller","minutes":8,"keyIdea":"Quantisation, distillation and pruning trade a small amount of accuracy for large reductions in size and latency; and unstructured pruning reduces parameter count without reducing runtime, which is the distinction most often missed."},{"slug":"feedback-loops","title":"When the model changes the data it will be trained on","url":"https://addaly.com/learn/machine-learning-foundations/feedback-loops","api":"https://addaly.com/api/lesson/machine-learning-foundations/feedback-loops","minutes":9,"keyIdea":"A deployed model shapes the data its successor is trained on, so offline metrics measure agreement with the previous model's choices; and only randomised exploration, logged propensities and control groups produce evidence that escapes the loop."},{"slug":"what-you-owe-the-people-in-the-data","title":"What you owe the people in the data","url":"https://addaly.com/learn/machine-learning-foundations/what-you-owe-the-people-in-the-data","api":"https://addaly.com/api/lesson/machine-learning-foundations/what-you-owe-the-people-in-the-data","minutes":9,"keyIdea":"A model card recording the target definition, training population, per-slice performance and out-of-scope uses costs an hour and outlives everyone involved; and the legal questions around copyright, erasure and automated decisions are genuinely unresolved and differ by country."}]}]},{"slug":"prompting","title":"Getting Real Work out of a Model","tagline":"You already use ChatGPT, Claude or Gemini. This is how to stop getting average answers.","description":"A practical course for people who use AI chat tools every week and quietly suspect they are getting less than the tools can give. Eight modules and seventy-two lessons on what actually changes an answer: context, tasks, examples, format, reasoning, and honest iteration. Every lesson carries real before-and-after prompts you can copy tonight. No secret words, no incantations, no promises the tools cannot keep. By the end you will be able to brief a model the way you would brief a capable colleague, and to tell when it is guessing.","level":"beginner","track":"start","url":"https://addaly.com/learn/prompting","lessons":72,"minutes":591,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/prompting.pdf","pages":404,"bytes":4548832,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/prompting.pdf","cover":"https://addaly.com/textbooks/look/prompting/1.webp?v=2026-10-07-4548832"},"film":{"url":"https://addaly.com/learn/prompting#film","video":"https://addaly.com/videos/prompting.mp4","captions":"https://addaly.com/videos/prompting.vtt","poster":"https://addaly.com/videos/prompting.jpg","seconds":891,"bytes":99974327,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"what-a-prompt-is","title":"What a prompt actually is","summary":"Before any technique, the mechanism. What happens to your words between pressing send and reading the answer: how they are chopped up, why the whole conversation is sent again every turn, why the same prompt gives a different answer twice, and why the model does what you tell it at all. Everything later in the course is a consequence of these five facts.","outcome":"Explain what happens to a prompt between the send button and the answer (tokenisation, a single re-sent string, sampling, instruction tuning, and the product wrapped around the model) and use that mechanism to predict which prompt changes will help and which are folklore.","lessons":[{"slug":"why-the-same-question","title":"Why the same question gets a better answer","url":"https://addaly.com/learn/prompting/why-the-same-question","api":"https://addaly.com/api/lesson/prompting/why-the-same-question","minutes":6,"keyIdea":"A vague question has a vague best answer; detail is what makes a good answer possible at all."},{"slug":"what-the-model-sees","title":"What the model actually receives","url":"https://addaly.com/learn/prompting/what-the-model-sees","api":"https://addaly.com/api/lesson/prompting/what-the-model-sees","minutes":10,"keyIdea":"The model receives one flat block of text (system prompt, whole transcript, your message) chopped into tokens, with no memory and no formatting, and every prompting technique is a consequence of that shape."},{"slug":"sampling-and-why-answers-differ","title":"Why the same prompt gives a different answer","url":"https://addaly.com/learn/prompting/sampling-and-why-answers-differ","api":"https://addaly.com/api/lesson/prompting/sampling-and-why-answers-differ","minutes":8,"keyIdea":"Variation between answers comes from the sampler, not from the model changing its mind, so a prompt is only tested when you have run it several times and seen what moved."},{"slug":"instruction-following-is-trained","title":"Why it obeys you at all","url":"https://addaly.com/learn/prompting/instruction-following-is-trained","api":"https://addaly.com/api/lesson/prompting/instruction-following-is-trained","minutes":9,"keyIdea":"Instruction-following and agreeableness are trained behaviours, which is why manners do nothing, why pushing back makes it fold, and why constraints get dropped without warning."},{"slug":"role-vs-task","title":"A role is not a task","url":"https://addaly.com/learn/prompting/role-vs-task","api":"https://addaly.com/api/lesson/prompting/role-vs-task","minutes":6,"keyIdea":"Naming a persona sets tone; only naming the verb, the object, the constraints and the finished state sets the work."},{"slug":"anatomy-of-a-prompt","title":"The six things a working prompt contains","url":"https://addaly.com/learn/prompting/anatomy-of-a-prompt","api":"https://addaly.com/api/lesson/prompting/anatomy-of-a-prompt","minutes":8,"keyIdea":"A working prompt fills six slots (task, context, examples, constraints, output shape, escape hatch) and disappointing prompts are almost always missing the last two."},{"slug":"the-folklore-audit","title":"Magic words, and what the studies actually found","url":"https://addaly.com/learn/prompting/the-folklore-audit","api":"https://addaly.com/api/lesson/prompting/the-folklore-audit","minutes":9,"keyIdea":"The famous prompt tricks came from narrow studies on older models, and their effects are usually smaller than the ordinary variation between two runs of the same prompt."},{"slug":"specificity-and-its-limit","title":"How much detail is too much","url":"https://addaly.com/learn/prompting/specificity-and-its-limit","api":"https://addaly.com/api/lesson/prompting/specificity-and-its-limit","minutes":8,"keyIdea":"Specificity pays until constraints start getting dropped or contradicting each other, so keep three to five checkable requirements and delete any sentence that would not change a correct answer."},{"slug":"the-product-around-the-model","title":"Why the same prompt behaves differently in different apps","url":"https://addaly.com/learn/prompting/the-product-around-the-model","api":"https://addaly.com/api/lesson/prompting/the-product-around-the-model","minutes":8,"keyIdea":"Your prompt is only one layer of what reaches the model, so diagnose surprising behaviour by asking what else was in the block before you rewrite what you wrote."}]},{"slug":"the-material-you-give-it","title":"The material you give it","summary":"Most disappointing answers are not caused by a badly worded instruction. They are caused by a model working from a description of your problem instead of your problem. This block is about assembling the right material, marking it so it cannot be mistaken for instructions, putting it where it will be used, and leaving out the rest.","outcome":"Assemble the smallest set of material a task genuinely needs, mark and position it so the model uses it, and diagnose an answer that failed for want of context rather than for want of a better instruction.","lessons":[{"slug":"context-is-most-of-the-job","title":"Context is most of the job","url":"https://addaly.com/learn/prompting/context-is-most-of-the-job","api":"https://addaly.com/api/lesson/prompting/context-is-most-of-the-job","minutes":7,"keyIdea":"The model only knows what is in front of it, so paste the thing itself and paste the part that matters."},{"slug":"paste-the-source-not-a-summary","title":"Paste the source, not your account of it","url":"https://addaly.com/learn/prompting/paste-the-source-not-a-summary","api":"https://addaly.com/api/lesson/prompting/paste-the-source-not-a-summary","minutes":8,"keyIdea":"Describing your problem means deciding in advance what matters, so give the artefact and the surrounding facts and let your interpretation be a question rather than the input."},{"slug":"marking-where-your-material-starts","title":"Marking where your material starts and stops","url":"https://addaly.com/learn/prompting/marking-where-your-material-starts","api":"https://addaly.com/api/lesson/prompting/marking-where-your-material-starts","minutes":7,"keyIdea":"Pasted material and your instructions arrive as one undifferentiated block, so wrap it, name it, and say explicitly that its contents are data rather than orders."},{"slug":"where-the-instruction-goes","title":"Where the instruction goes, and why it matters","url":"https://addaly.com/learn/prompting/where-the-instruction-goes","api":"https://addaly.com/api/lesson/prompting/where-the-instruction-goes","minutes":8,"keyIdea":"In a long prompt, state the task before the material and repeat it after, put the most important document last, and prefer the right extract to the whole file even when the whole file would fit."},{"slug":"the-standing-brief","title":"The background you should stop retyping","url":"https://addaly.com/learn/prompting/the-standing-brief","api":"https://addaly.com/api/lesson/prompting/the-standing-brief","minutes":8,"keyIdea":"Write your unchanging facts (role, place, currency, house words, audience, hard rules) once as a standing brief, keep style out of it, and re-read it whenever an answer arrives strangely."},{"slug":"memory-and-what-it-remembers","title":"Memory, and the notes it took about you","url":"https://addaly.com/learn/prompting/memory-and-what-it-remembers","api":"https://addaly.com/api/lesson/prompting/memory-and-what-it-remembers","minutes":8,"keyIdea":"Memory injects notes a system took about you into prompts you cannot inspect, so audit the list, use temporary chats for anything you do not want kept, and keep the context that matters in a brief you wrote yourself."},{"slug":"what-happens-to-an-attachment","title":"What actually happens when you attach a file","url":"https://addaly.com/learn/prompting/what-happens-to-an-attachment","api":"https://addaly.com/api/lesson/prompting/what-happens-to-an-attachment","minutes":9,"keyIdea":"Attaching a file sends a derivative of it (extracted text, OCR output, images, or retrieved fragments) so verify what actually arrived before trusting a summary of what is in it."},{"slug":"what-to-leave-out","title":"Choosing what not to include","url":"https://addaly.com/learn/prompting/what-to-leave-out","api":"https://addaly.com/api/lesson/prompting/what-to-leave-out","minutes":8,"keyIdea":"Include what feeds a line of the answer you expect and cut the rest, because irrelevant material does not sit harmlessly in the context: it dilutes attention and supplies wrong facts with the same confidence as right ones."},{"slug":"saying-what-not-to-do","title":"Negative instructions, and why they half-work","url":"https://addaly.com/learn/prompting/saying-what-not-to-do","api":"https://addaly.com/api/lesson/prompting/saying-what-not-to-do","minutes":8,"keyIdea":"A prohibition puts the forbidden thing in the context and provides no work to do instead, so convert it into a positive target wherever possible and verify the genuinely negative ones in a separate checking pass."}]},{"slug":"teaching-by-example","title":"Teaching by example","summary":"Some rules are faster to show than to write. This block is about doing that deliberately: choosing the examples that carry the boundary, noticing the pattern you demonstrated by accident, combining a shown example with a stated rule, and proving to yourself that the examples earned the space they cost.","outcome":"Build a small labelled example set that transmits a rule prose cannot state, identify the unintended patterns your examples teach, and demonstrate by test whether adding them improved the output at all.","lessons":[{"slug":"show-it-two-examples","title":"Show it two examples","url":"https://addaly.com/learn/prompting/show-it-two-examples","api":"https://addaly.com/api/lesson/prompting/show-it-two-examples","minutes":8,"keyIdea":"Examples transmit their entire shape, including the parts you did not notice you were demonstrating."},{"slug":"zero-one-and-few","title":"Zero, one, or five: how many examples","url":"https://addaly.com/learn/prompting/zero-one-and-few","api":"https://addaly.com/api/lesson/prompting/zero-one-and-few","minutes":8,"keyIdea":"Use no examples for facts and variety, one for shape, and two to five for boundaries you cannot state, and if you can say what an example teaches in a sentence, write the sentence instead."},{"slug":"choosing-the-awkward-case","title":"The example that earns its place","url":"https://addaly.com/learn/prompting/choosing-the-awkward-case","api":"https://addaly.com/api/lesson/prompting/choosing-the-awkward-case","minutes":8,"keyIdea":"An example is only worth its space if a careful person could have got it wrong, so build your set from the real items where you yourself hesitated."},{"slug":"order-balance-and-the-hidden-pattern","title":"What your examples teach by accident","url":"https://addaly.com/learn/prompting/order-balance-and-the-hidden-pattern","api":"https://addaly.com/api/lesson/prompting/order-balance-and-the-hidden-pattern","minutes":9,"keyIdea":"Examples teach every property they share (length, tone, punctuation, class proportions, order) so read them as a set and either vary or state anything you did not mean to demonstrate."},{"slug":"rules-and-examples-together","title":"State the rule, then show it","url":"https://addaly.com/learn/prompting/rules-and-examples-together","api":"https://addaly.com/api/lesson/prompting/rules-and-examples-together","minutes":8,"keyIdea":"A rule says what an example is an example of, and an example says what a rule means in the hard case, so write the rule first and annotate each example with the reason for its label."},{"slug":"showing-what-not-to-do","title":"Negative examples, and when they backfire","url":"https://addaly.com/learn/prompting/showing-what-not-to-do","api":"https://addaly.com/api/lesson/prompting/showing-what-not-to-do","minutes":8,"keyIdea":"A bad example demonstrates the thing you are trying to prevent, so pair it with its correction and end on the good version, or replace it with a checkable list and a separate self-check."},{"slug":"capturing-a-voice","title":"Capturing a voice from three samples","url":"https://addaly.com/learn/prompting/capturing-a-voice","api":"https://addaly.com/api/lesson/prompting/capturing-a-voice","minutes":9,"keyIdea":"Style transfers through real samples plus named mechanics (sentence length, banned openings, contractions) not through adjectives, and it drifts back to generic over long outputs."},{"slug":"examples-from-your-own-archive","title":"Your best examples already exist","url":"https://addaly.com/learn/prompting/examples-from-your-own-archive","api":"https://addaly.com/api/lesson/prompting/examples-from-your-own-archive","minutes":8,"keyIdea":"The examples worth using already exist in your sent folder, your ticket history and your reviewed drafts, and a before-and-after pair encodes a house standard nobody has ever written down."},{"slug":"testing-whether-examples-helped","title":"Proving the examples were worth it","url":"https://addaly.com/learn/prompting/testing-whether-examples-helped","api":"https://addaly.com/api/lesson/prompting/testing-whether-examples-helped","minutes":8,"keyIdea":"Compare a prompt with and without its examples on ten held-out items, three runs each, and treat a difference smaller than the run-to-run wobble as no difference at all."}]},{"slug":"the-shape-of-the-answer","title":"The shape of the answer","summary":"An answer that is correct and arrives in the wrong form still costs you twenty minutes. This block is about specifying the container (the table, the message, the JSON, the document) together with the harder question of which format constraints improve an answer and which quietly remove the thinking that made it right.","outcome":"Specify an output that drops straight into its destination, choose a container that matches the decision being made, and identify which formatting constraints improve an answer and which strip out the reasoning behind it.","lessons":[{"slug":"ask-for-a-usable-shape","title":"Ask for the shape you can actually use","url":"https://addaly.com/learn/prompting/ask-for-a-usable-shape","api":"https://addaly.com/api/lesson/prompting/ask-for-a-usable-shape","minutes":7,"keyIdea":"State the shape, the omissions, and what to do about gaps, but leave room for reasoning before the tidy part."},{"slug":"length-and-what-it-buys","title":"Length, and what a word limit actually costs","url":"https://addaly.com/learn/prompting/length-and-what-it-buys","api":"https://addaly.com/api/lesson/prompting/length-and-what-it-buys","minutes":8,"keyIdea":"Strip padding permanently and set length by what the content needs, because a tight limit on a hard question removes the working rather than the waste."},{"slug":"choosing-the-container","title":"Choosing the container","url":"https://addaly.com/learn/prompting/choosing-the-container","api":"https://addaly.com/api/lesson/prompting/choosing-the-container","minutes":8,"keyIdea":"Choose the container by what you will do with the answer next, and counteract the bias of whichever you chose: tables invent comparability, lists flatten importance, prose hides omissions."},{"slug":"machine-readable-output","title":"Output a spreadsheet or a script can read","url":"https://addaly.com/learn/prompting/machine-readable-output","api":"https://addaly.com/api/lesson/prompting/machine-readable-output","minutes":9,"keyIdea":"Ask for CSV with explicit rules for separators, dates and missing values, keep the reasoning in prose before the structured block, and remember that valid output is not correct output."},{"slug":"templates-and-skeletons","title":"Hand it the skeleton","url":"https://addaly.com/learn/prompting/templates-and-skeletons","api":"https://addaly.com/api/lesson/prompting/templates-and-skeletons","minutes":8,"keyIdea":"Paste the skeleton with the rule written inside each bracket, including a legal way for a slot to be empty, and derive it from a document that already worked rather than designing it."},{"slug":"writing-for-a-reader","title":"Writing for the person who will read it","url":"https://addaly.com/learn/prompting/writing-for-a-reader","api":"https://addaly.com/api/lesson/prompting/writing-for-a-reader","minutes":8,"keyIdea":"Name what the reader already knows, what they will do with it, how long they have and how they feel, and paste something they wrote: that is a real constraint, unlike a persona for the model."},{"slug":"the-house-style-of-machines","title":"The tells, and how to strip them","url":"https://addaly.com/learn/prompting/the-house-style-of-machines","api":"https://addaly.com/api/lesson/prompting/the-house-style-of-machines","minutes":8,"keyIdea":"Strip the machine register with a checkable list of banned constructions, not adjectives, and accept that the deepest tell, an absence of specifics only you could know, is fixed by you rather than by a prompt."},{"slug":"asking-in-one-language","title":"Working across languages","url":"https://addaly.com/learn/prompting/asking-in-one-language","api":"https://addaly.com/api/lesson/prompting/asking-in-one-language","minutes":9,"keyIdea":"Keep material in its original language, instruct in whichever language you write most precisely, name the register explicitly, and back-translate anything that matters."},{"slug":"output-that-fails-visibly","title":"Building the failure into the format","url":"https://addaly.com/learn/prompting/output-that-fails-visibly","api":"https://addaly.com/api/lesson/prompting/output-that-fails-visibly","minutes":8,"keyIdea":"Give the output a legal way to fail (a stated empty value, a source quote, a confidence field, a permitted refusal) so the rows that need checking identify themselves."}]},{"slug":"making-it-work-the-problem","title":"Making it work the problem","summary":"Some tasks fail in one pass and succeed in three. This block is about recognising which ones: where shown reasoning genuinely helps and where it only makes the answer longer, how to split a task that keeps going wrong, when to let a reasoning model do it for you, and what a chain of plausible steps is and is not evidence of.","outcome":"Judge from a task's structure whether shown reasoning will improve it, split a task that fails in one pass into steps that each succeed and can each be checked, and state precisely what a chain of shown reasoning is not evidence of.","lessons":[{"slug":"make-it-show-its-work","title":"Make it show its work","url":"https://addaly.com/learn/prompting/make-it-show-its-work","api":"https://addaly.com/api/lesson/prompting/make-it-show-its-work","minutes":8,"keyIdea":"Shown reasoning is not a log of how the answer was made, but it puts claims where you can check them."},{"slug":"when-steps-help","title":"Which tasks get better with steps, and which do not","url":"https://addaly.com/learn/prompting/when-steps-help","api":"https://addaly.com/api/lesson/prompting/when-steps-help","minutes":8,"keyIdea":"Shown steps help when a task has dependent intermediate results or when you intend to check them, and otherwise only make the answer longer, so name the intermediate you want rather than asking for \"steps\"."},{"slug":"arithmetic-and-code","title":"Arithmetic it should not do in its head","url":"https://addaly.com/learn/prompting/arithmetic-and-code","api":"https://addaly.com/api/lesson/prompting/arithmetic-and-code","minutes":9,"keyIdea":"A model generates digits rather than calculating, so ask it to write and run code or produce a spreadsheet formula whenever the number matters, and check the inputs and the row count rather than the answer."},{"slug":"reasoning-models","title":"Models that think before answering","url":"https://addaly.com/learn/prompting/reasoning-models","api":"https://addaly.com/api/lesson/prompting/reasoning-models","minutes":9,"keyIdea":"Reasoning models pay off exactly where you would have asked for steps: state the goal and constraints, not the method, and treat the visible trace as material to check rather than a record of what happened."},{"slug":"breaking-a-task-into-steps","title":"Splitting a task that keeps failing","url":"https://addaly.com/learn/prompting/breaking-a-task-into-steps","api":"https://addaly.com/api/lesson/prompting/breaking-a-task-into-steps","minutes":9,"keyIdea":"Split where the shape of the output changes or where you would want to intervene, keep every intermediate, and check the earliest steps hardest because later steps launder their errors into confident prose."},{"slug":"plan-then-execute","title":"Ask for the plan before the work","url":"https://addaly.com/learn/prompting/plan-then-execute","api":"https://addaly.com/api/lesson/prompting/plan-then-execute","minutes":8,"keyIdea":"Get the outline and the assumptions that would change the result before any substantial output is produced, and for anything that acts on the world, require the plan to state what is irreversible."},{"slug":"checking-against-constraints","title":"Making it check its answer against the rules","url":"https://addaly.com/learn/prompting/checking-against-constraints","api":"https://addaly.com/api/lesson/prompting/checking-against-constraints","minutes":8,"keyIdea":"Checking is easier than composing, so make compliance a separate pass that quotes the deciding words, and remember a green checklist only covers the rules you thought to write down."},{"slug":"asking-it-to-interview-you","title":"Let it ask you the questions","url":"https://addaly.com/learn/prompting/asking-it-to-interview-you","api":"https://addaly.com/api/lesson/prompting/asking-it-to-interview-you","minutes":8,"keyIdea":"When you cannot tell what your prompt is missing, ask the model for the few questions it cannot guess the answer to, and require assumptions for the rest so clarification does not become a questionnaire."},{"slug":"several-attempts","title":"Asking more than once, on purpose","url":"https://addaly.com/learn/prompting/several-attempts","api":"https://addaly.com/api/lesson/prompting/several-attempts","minutes":8,"keyIdea":"Use repeated runs as a measurement rather than a re-roll: agreement shows stability, disagreement shows exactly where the prompt is under-determined, and neither shows truth."}]},{"slug":"from-lucky-to-reliable","title":"From lucky to reliable","summary":"A prompt that worked once is not a prompt you own. This block is about the loop that turns a half-working attempt into something dependable: naming which of four things went wrong, changing one thing at a time against a fixed check, keeping the version that worked, and recognising the point at which no further prompting will help.","outcome":"Diagnose which of four causes produced a bad answer, improve a prompt by changing one thing at a time against a fixed set of test items, and keep a version a colleague could run and get the same quality from.","lessons":[{"slug":"iterate-dont-reroll","title":"Edit the prompt, do not spin the wheel","url":"https://addaly.com/learn/prompting/iterate-dont-reroll","api":"https://addaly.com/api/lesson/prompting/iterate-dont-reroll","minutes":6,"keyIdea":"Regenerating resamples the same prompt; naming what is wrong is the only thing that changes the pile."},{"slug":"diagnosing-a-bad-answer","title":"Four reasons an answer is bad","url":"https://addaly.com/learn/prompting/diagnosing-a-bad-answer","api":"https://addaly.com/api/lesson/prompting/diagnosing-a-bad-answer","minutes":9,"keyIdea":"Bad answers have four causes (missing material, misread instruction, wrong output form, and a task beyond the tool) and the giveaway for the fourth is that better prompting produces a better-looking wrong answer."},{"slug":"change-one-thing","title":"Change one thing at a time","url":"https://addaly.com/learn/prompting/change-one-thing","api":"https://addaly.com/api/lesson/prompting/change-one-thing","minutes":8,"keyIdea":"Change one element at a time against fixed test items with several runs each, discard what does not measurably help, and periodically try removing things: most reused prompts are a third decoration."},{"slug":"the-regression-check","title":"The five items you keep forever","url":"https://addaly.com/learn/prompting/the-regression-check","api":"https://addaly.com/api/lesson/prompting/the-regression-check","minutes":8,"keyIdea":"Keep five to ten fixed items with expected answers, including one that should produce a refusal, and run them after any prompt change and after any model update: decay is invisible without them."},{"slug":"your-own-prompt-file","title":"The file that makes this compound","url":"https://addaly.com/learn/prompting/your-own-prompt-file","api":"https://addaly.com/api/lesson/prompting/your-own-prompt-file","minutes":8,"keyIdea":"Keep each working prompt with its date, its model, a \"use when\" line, the reason for its odd constraints, and capitalised slots for the parts you swap: the notes are what make it usable three months later."},{"slug":"prompts-that-break-later","title":"Why a prompt stops working","url":"https://addaly.com/learn/prompting/prompts-that-break-later","api":"https://addaly.com/api/lesson/prompting/prompts-that-break-later","minutes":8,"keyIdea":"When a stable prompt degrades, check the model version, the product, the input shape and the age of any hard-coded fact before rewriting, and prefer prompts that describe a good answer over prompts that work around a behaviour."},{"slug":"borrowed-prompts","title":"Why the prompt from the internet does not work","url":"https://addaly.com/learn/prompting/borrowed-prompts","api":"https://addaly.com/api/lesson/prompting/borrowed-prompts","minutes":8,"keyIdea":"Borrow structure and domain knowledge from other people's prompts and discard the persona, the stakes and the exhortations: what makes a prompt work is the specificity a shared template has had removed."},{"slug":"asking-it-to-fix-the-prompt","title":"Getting the model to improve your prompt","url":"https://addaly.com/learn/prompting/asking-it-to-fix-the-prompt","api":"https://addaly.com/api/lesson/prompting/asking-it-to-fix-the-prompt","minutes":8,"keyIdea":"Ask what information is missing and where your wording is ambiguous, cap the loop at two rounds tested against real items, and never let the model judge whether its own output was good."},{"slug":"knowing-when-to-stop","title":"When to stop prompting and do it yourself","url":"https://addaly.com/learn/prompting/knowing-when-to-stop","api":"https://addaly.com/api/lesson/prompting/knowing-when-to-stop","minutes":8,"keyIdea":"Decide beforehand how long the task would take by hand, stop when the same error survives two genuine fixes, and hand back the parts that need judgement, accountability or knowledge only you have."}]},{"slug":"checking-the-answer","title":"Checking the answer","summary":"Confidence is not a signal, and the errors that hurt are the ones that look exactly like correct answers. This block is about verification that fits the failure: how to check a citation, a search-grounded claim, an assertion about a document, a figure, and the hardest one, something that was quietly left out.","outcome":"Match verification to the cost of being wrong rather than to how confident an answer sounds, and apply the right check for a citation, a search result, a claim about a document, a number and an omission.","lessons":[{"slug":"spot-a-guess","title":"How to tell when it is guessing","url":"https://addaly.com/learn/prompting/spot-a-guess","api":"https://addaly.com/api/lesson/prompting/spot-a-guess","minutes":9,"keyIdea":"Fabrication can be more specific than truth, so verify by cost of being wrong, never by how confident it sounds."},{"slug":"citations-and-sources","title":"The citation that does not say that","url":"https://addaly.com/learn/prompting/citations-and-sources","api":"https://addaly.com/api/lesson/prompting/citations-and-sources","minutes":9,"keyIdea":"A fabricated citation fits the pattern of a citation better than many real ones, so check that it exists, that it says what is claimed, and that it supports the inference: three separate checks, in that order."},{"slug":"search-grounded-answers","title":"When it can search, and what that fixes","url":"https://addaly.com/learn/prompting/search-grounded-answers","api":"https://addaly.com/api/lesson/prompting/search-grounded-answers","minutes":8,"keyIdea":"A search tool replaces a memory problem with a reading problem, so ask for the query, the source and the date beside each claim, and open the one page that carries the claim you will act on."},{"slug":"claims-about-a-document","title":"Checking a claim about a document you have","url":"https://addaly.com/learn/prompting/claims-about-a-document","api":"https://addaly.com/api/lesson/prompting/claims-about-a-document","minutes":8,"keyIdea":"A claim about a document is checkable in seconds by searching a middle fragment of the quote and reading the whole sentence around it; and the sentence-level qualifiers are where summaries reverse meaning."},{"slug":"checking-numbers","title":"Checking a number in under a minute","url":"https://addaly.com/learn/prompting/checking-numbers","api":"https://addaly.com/api/lesson/prompting/checking-numbers","minutes":8,"keyIdea":"Check a number by magnitude, by whether the parts add up, by whether the bases match, and by tracing one component to its source; and ask for the two raw numbers behind any percentage."},{"slug":"the-sycophancy-trap","title":"Disagreeing without getting agreement","url":"https://addaly.com/learn/prompting/the-sycophancy-trap","api":"https://addaly.com/api/lesson/prompting/the-sycophancy-trap","minutes":8,"keyIdea":"Asking \"are you sure?\" tests agreeableness rather than correctness, so verify by asking for the evidence, the case against, or a clean-context re-answer; and treat agreement with your framing as the default, not as support."},{"slug":"a-second-opinion","title":"Asking a second model","url":"https://addaly.com/learn/prompting/a-second-opinion","api":"https://addaly.com/api/lesson/prompting/a-second-opinion","minutes":8,"keyIdea":"A second model from a different provider locates disagreement cheaply, but shared training data means agreement is not independent confirmation: a real check is one whose failure mode differs from the thing being checked."},{"slug":"checking-what-is-missing","title":"The hardest check: what was left out","url":"https://addaly.com/learn/prompting/checking-what-is-missing","api":"https://addaly.com/api/lesson/prompting/checking-what-is-missing","minutes":9,"keyIdea":"An omission leaves no mark in the answer, so force it into view: enumerate and count before analysing, require a line for every checklist item including \"not present\", and ask what was found but left out."},{"slug":"how-much-checking","title":"How much checking is enough","url":"https://addaly.com/learn/prompting/how-much-checking","api":"https://addaly.com/api/lesson/prompting/how-much-checking","minutes":8,"keyIdea":"Sort by what happens if the answer is wrong rather than by how confident it sounds, and design the prompt so the checking is a text search rather than a re-reading."}]},{"slug":"the-work-you-actually-have","title":"The work you actually have","summary":"Everything so far applied to the jobs that fill a real week: a draft, a difficult message, a long document, a decision between options, a messy spreadsheet, a script you cannot write, something you are trying to learn, an application you need to send. Each lesson is a worked prompt you can adapt tonight, and the last one is about making a prompt somebody else can run.","outcome":"Take a recurring task from your own week and build a prompt for it that supplies the right material, produces a usable shape, makes its own failures visible, and can be handed to a colleague who will get the same quality from it.","lessons":[{"slug":"drafting-in-your-own-words","title":"Drafting without losing the thing that was yours","url":"https://addaly.com/learn/prompting/drafting-in-your-own-words","api":"https://addaly.com/api/lesson/prompting/drafting-in-your-own-words","minutes":9,"keyIdea":"Do the thinking out loud, hand over transcription and diagnosis, and keep the first sentence, the argument, the commitments and anything personal: a draft you merely accept is the average version."},{"slug":"the-message-you-do-not-want-to-write","title":"The message you have been putting off","url":"https://addaly.com/learn/prompting/the-message-you-do-not-want-to-write","api":"https://addaly.com/api/lesson/prompting/the-message-you-do-not-want-to-write","minutes":9,"keyIdea":"State the relationship's future, the dated history, the precise outcome you want and what you will not do; then ask how the recipient will read it before you send."},{"slug":"reading-a-long-document","title":"Getting through a long document properly","url":"https://addaly.com/learn/prompting/reading-a-long-document","api":"https://addaly.com/api/lesson/prompting/reading-a-long-document","minutes":9,"keyIdea":"Map the document and count its sections, locate the relevant ones, extract with quoted sources, verify two quotes, and summarise last: a summary produced first is a selection you cannot audit."},{"slug":"comparing-options","title":"Deciding between options","url":"https://addaly.com/learn/prompting/comparing-options","api":"https://addaly.com/api/lesson/prompting/comparing-options","minutes":8,"keyIdea":"Bring your own criteria and weights, use the model to surface the criteria you would have regretted ignoring, require a source for every factual claim, and ask for the case against your preference rather than whether you are right."},{"slug":"messy-spreadsheet-data","title":"The spreadsheet somebody else built","url":"https://addaly.com/learn/prompting/messy-spreadsheet-data","api":"https://addaly.com/api/lesson/prompting/messy-spreadsheet-data","minutes":9,"keyIdea":"Ask for the transformation (a formula or a script) rather than the cleaned data itself, diagnose from fifteen rows before cleaning, and check the row count before and after every step."},{"slug":"code-you-cannot-write","title":"Asking for code you could not have written","url":"https://addaly.com/learn/prompting/code-you-cannot-write","api":"https://addaly.com/api/lesson/prompting/code-you-cannot-write","minutes":9,"keyIdea":"Ask for commented code with setup instructions, run it on a copy with a dry run first, and verify by counting rows and spot-checking three: reading a script for deletions and network calls is a much smaller skill than writing one."},{"slug":"learning-something-with-it","title":"Using it to learn, without fooling yourself","url":"https://addaly.com/learn/prompting/learning-something-with-it","api":"https://addaly.com/api/lesson/prompting/learning-something-with-it","minutes":9,"keyIdea":"Learning happens when you produce (explain it back, be tested with hints rather than answers, and ask where the rule breaks) because a clear explanation reliably produces the feeling of understanding without the thing itself."},{"slug":"applying-for-a-job","title":"Applications, without the generic letter","url":"https://addaly.com/learn/prompting/applying-for-a-job","api":"https://addaly.com/api/lesson/prompting/applying-for-a-job","minutes":9,"keyIdea":"An application fails because it contains nothing only you could have written, so paste the full advert, the full CV and the awkward truth, and use the model hardest for interview practice rather than for the letter."},{"slug":"handing-it-to-someone-else","title":"A prompt somebody else can run","url":"https://addaly.com/learn/prompting/handing-it-to-someone-else","api":"https://addaly.com/api/lesson/prompting/handing-it-to-someone-else","minutes":9,"keyIdea":"A prompt transfers only with its context, its expected output, and its \"when to distrust it\" section, and if you cannot write that section, you do not yet know when to distrust it yourself."}]}]},{"slug":"python-for-ai","title":"Python, from Zero, for AI","tagline":"From your first line of code to your first API call.","description":"Takes someone who has never written a line of code to the point of calling an AI API from their own Python script. Every lesson has code you can paste into a terminal and run, and every lesson ends with a question about what the code actually does. It covers what a program is, variables and types, strings and input, lists and dicts, loops, functions, reading error messages properly, files, packages and virtual environments, and a first real HTTP request. No prior programming, no maths beyond addition, no assumptions about which country you learned in.","level":"beginner","track":"build","url":"https://addaly.com/learn/python-for-ai","lessons":89,"minutes":733,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/python-for-ai.pdf","pages":586,"bytes":6855969,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/python-for-ai.pdf","cover":"https://addaly.com/textbooks/look/python-for-ai/1.webp?v=2026-10-07-6855969"},"film":null,"modules":[{"slug":"getting-python-running","title":"Getting Python running, and your first working code","summary":"Before anything else you need Python on a machine you actually own, and a clear picture of what a line of code does when it runs. This block installs Python on a laptop or a phone, teaches the two ways of running code, and covers the pieces every later lesson assumes: types, numbers, formatted output, truth, and branching.","outcome":"Install Python on a laptop, a phone or a free browser machine, run the same code both interactively and from a saved file, and predict what a short program prints by naming the type of every value in it and the branch a condition takes.","lessons":[{"slug":"installing-python","title":"Getting Python onto the machine you actually have","url":"https://addaly.com/learn/python-for-ai/installing-python","api":"https://addaly.com/api/lesson/python-for-ai/installing-python","minutes":9,"keyIdea":"Install the stable release minus one, tick Add to PATH on Windows, and remember that `python3` on macOS and Linux is not the same command as `python`."},{"slug":"first-line","title":"What a program is, and running your first line","url":"https://addaly.com/learn/python-for-ai/first-line","api":"https://addaly.com/api/lesson/python-for-ai/first-line","minutes":6,"keyIdea":"A program does exactly what is written, in order, and shows you only what you ask it to show."},{"slug":"shell-and-script","title":"The interactive shell and the saved file, and when to use each","url":"https://addaly.com/learn/python-for-ai/shell-and-script","api":"https://addaly.com/api/lesson/python-for-ai/shell-and-script","minutes":7,"keyIdea":"The REPL prints the value of every expression automatically and a script prints nothing you did not ask for, so the same lines behave differently in the two places."},{"slug":"variables-and-types","title":"Variables, and the fact that everything has a type","url":"https://addaly.com/learn/python-for-ai/variables-and-types","api":"https://addaly.com/api/lesson/python-for-ai/variables-and-types","minutes":6,"keyIdea":"A name is attached to a value at the moment the line runs, and the value's type decides what operators do."},{"slug":"numbers-and-arithmetic","title":"Numbers: whole, decimal, and the one that surprises everybody","url":"https://addaly.com/learn/python-for-ai/numbers-and-arithmetic","api":"https://addaly.com/api/lesson/python-for-ai/numbers-and-arithmetic","minutes":8,"keyIdea":"`/` always returns a float and `//` rounds downwards, and 0.1 + 0.2 is not 0.3 because a float stores binary fractions with 53 bits of mantissa."},{"slug":"strings-and-input","title":"Strings, and why input() always hands you text","url":"https://addaly.com/learn/python-for-ai/strings-and-input","api":"https://addaly.com/api/lesson/python-for-ai/strings-and-input","minutes":6,"keyIdea":"input() always returns text, so convert it the moment it arrives or you will compare numbers alphabetically."},{"slug":"formatting-output","title":"Building the output a person will read","url":"https://addaly.com/learn/python-for-ai/formatting-output","api":"https://addaly.com/api/lesson/python-for-ai/formatting-output","minutes":7,"keyIdea":"An f-string builds a string at the moment it runs, and the part after the colon controls only how the value is displayed, never the value itself."},{"slug":"booleans-and-truth","title":"True, False, and what Python counts as nothing","url":"https://addaly.com/learn/python-for-ai/booleans-and-truth","api":"https://addaly.com/api/lesson/python-for-ai/booleans-and-truth","minutes":7,"keyIdea":"`or` returns an operand rather than a boolean, so `x or default` quietly replaces a legitimate 0 or empty string, and `is` should be reserved for None."},{"slug":"if-and-branching","title":"Making a decision: if, elif, else","url":"https://addaly.com/learn/python-for-ai/if-and-branching","api":"https://addaly.com/api/lesson/python-for-ai/if-and-branching","minutes":7,"keyIdea":"In an if/elif chain only the first true branch runs, so replacing elif with separate ifs lets a later assignment overwrite an earlier correct one with no error."},{"slug":"how-python-runs-code","title":"What happens between your file and the answer","url":"https://addaly.com/learn/python-for-ai/how-python-runs-code","api":"https://addaly.com/api/lesson/python-for-ai/how-python-runs-code","minutes":8,"keyIdea":"Python compiles the whole file to bytecode before running any of it, and its slowness comes from every value being a typed heap object, which is why moving a numeric loop into NumPy wins fifty-fold where rewriting it in Python wins thirty per cent."}]},{"slug":"collections-and-loops","title":"Collections, loops, and the shape of your data","summary":"Almost every program is a pile of values and something that walks over them. This block covers the four containers Python gives you, how to reach into them without copying or corrupting what you did not mean to touch, and the three ways of repeating work: the for loop, the while loop and the comprehension.","outcome":"Choose between a list, a dict, a tuple and a set for a given piece of data and defend the choice on cost, then walk a nested JSON-shaped structure with loops or comprehensions without mutating something you did not intend to change.","lessons":[{"slug":"lists-and-dicts","title":"Lists and dicts, and knowing which one you need","url":"https://addaly.com/learn/python-for-ai/lists-and-dicts","api":"https://addaly.com/api/lesson/python-for-ai/lists-and-dicts","minutes":7,"keyIdea":"A list is positions in order; a dict is named slots, and one name means exactly one slot."},{"slug":"indexing-and-slicing","title":"Reaching into a sequence: indexes, slices and why the end is excluded","url":"https://addaly.com/learn/python-for-ai/indexing-and-slicing","api":"https://addaly.com/api/lesson/python-for-ai/indexing-and-slicing","minutes":8,"keyIdea":"A slice stops before its second index, which makes its length exactly stop minus start, and slicing out of range returns a shorter result instead of raising."},{"slug":"list-mutation-and-copies","title":"Changing a list, and the copy you thought you made","url":"https://addaly.com/learn/python-for-ai/list-mutation-and-copies","api":"https://addaly.com/api/lesson/python-for-ai/list-mutation-and-copies","minutes":9,"keyIdea":"Assignment attaches a second name to the same list, `copy()` duplicates only the outer level, and a mutating method returns None rather than the list."},{"slug":"tuples-and-sets","title":"Tuples and sets, and the cost of asking is this in there","url":"https://addaly.com/learn/python-for-ai/tuples-and-sets","api":"https://addaly.com/api/lesson/python-for-ai/tuples-and-sets","minutes":8,"keyIdea":"A set answers membership in constant time where a list scans, so converting a large list to a set once before a loop can turn seconds into milliseconds."},{"slug":"dict-patterns","title":"Dictionary patterns: defaults, counting and grouping","url":"https://addaly.com/learn/python-for-ai/dict-patterns","api":"https://addaly.com/api/lesson/python-for-ai/dict-patterns","minutes":8,"keyIdea":"`get` with a default and `defaultdict` remove the missing-key branch, but both hide data you may have misread, so use plain `d[key]` when absence means the program is wrong."},{"slug":"loops","title":"Loops, or doing the same thing to many things","url":"https://addaly.com/learn/python-for-ai/loops","api":"https://addaly.com/api/lesson/python-for-ai/loops","minutes":6,"keyIdea":"Indentation decides what repeats, so where you start the running total decides whether the answer is a sum."},{"slug":"while-loops-and-control","title":"While loops, break, and the loop that never ends","url":"https://addaly.com/learn/python-for-ai/while-loops-and-control","api":"https://addaly.com/api/lesson/python-for-ai/while-loops-and-control","minutes":7,"keyIdea":"A `while` loop hangs when the body does not change the variable its condition tests, and a loop's `else` runs only when no `break` was hit."},{"slug":"comprehensions","title":"Comprehensions: building a list in one line, and when not to","url":"https://addaly.com/learn/python-for-ai/comprehensions","api":"https://addaly.com/api/lesson/python-for-ai/comprehensions","minutes":8,"keyIdea":"A conditional before the `for` chooses a value and keeps the length, while an `if` after the `for` filters and shortens the result."},{"slug":"sorting-with-key","title":"Sorting by something other than the value itself","url":"https://addaly.com/learn/python-for-ai/sorting-with-key","api":"https://addaly.com/api/lesson/python-for-ai/sorting-with-key","minutes":8,"keyIdea":"`key` takes a function applied once per element, tuples give multi-level ordering, and stable sorting lets you order by several fields by sorting repeatedly from the least important key upwards."},{"slug":"nested-data","title":"Nested data: dictionaries inside lists inside dictionaries","url":"https://addaly.com/learn/python-for-ai/nested-data","api":"https://addaly.com/api/lesson/python-for-ai/nested-data","minutes":9,"keyIdea":"Navigating nested data is one sentence read left to right, and the two index TypeErrors tell you whether you are one level too shallow or one level too deep."}]},{"slug":"functions-and-structure","title":"Functions, modules, and code you can read again in March","summary":"A working script of forty lines becomes an unreadable script of four hundred unless you break it up. This block covers how arguments really work, why a variable changed inside a function sometimes escapes and sometimes does not, how imports find your files, and how to give a script a proper command line.","outcome":"Split a working script into functions and modules with explicit arguments, return values and docstrings, explain from Python's scoping rules why a variable changed inside a function did or did not change outside it, and run the result from a terminal with named options.","lessons":[{"slug":"functions","title":"Functions, and the difference between printing and returning","url":"https://addaly.com/learn/python-for-ai/functions","api":"https://addaly.com/api/lesson/python-for-ai/functions","minutes":7,"keyIdea":"print shows a value to a person; return hands it to the program, and a function without return gives back None."},{"slug":"arguments-in-depth","title":"Arguments: positional, named, default, and the trap in the default","url":"https://addaly.com/learn/python-for-ai/arguments-in-depth","api":"https://addaly.com/api/lesson/python-for-ai/arguments-in-depth","minutes":9,"keyIdea":"Default values are created once when the `def` line runs, so a mutable default is shared by every call, and a function can mutate the object you passed but cannot rebind your name."},{"slug":"scope-and-globals","title":"Where a name lives, and why the function cannot see it","url":"https://addaly.com/learn/python-for-ai/scope-and-globals","api":"https://addaly.com/api/lesson/python-for-ai/scope-and-globals","minutes":8,"keyIdea":"A name assigned anywhere in a function is local for the whole function, which is why reading a global before assigning it raises UnboundLocalError, while mutating a global object needs no declaration at all."},{"slug":"returning-values","title":"Returning: one value, several values, or nothing at all","url":"https://addaly.com/learn/python-for-ai/returning-values","api":"https://addaly.com/api/lesson/python-for-ai/returning-values","minutes":7,"keyIdea":"Return values instead of printing them, because a function that prints can only ever feed a terminal, while a function that returns feeds a file, a test, a request and a terminal."},{"slug":"docstrings-and-type-hints","title":"Saying what a function expects, and what checks it","url":"https://addaly.com/learn/python-for-ai/docstrings-and-type-hints","api":"https://addaly.com/api/lesson/python-for-ai/docstrings-and-type-hints","minutes":8,"keyIdea":"Type hints are metadata that Python never enforces, so their value comes from a checker like mypy, from editor support, and from documenting units and edge cases the code cannot show."},{"slug":"modules-and-imports","title":"Modules: splitting a script across files without breaking it","url":"https://addaly.com/learn/python-for-ai/modules-and-imports","api":"https://addaly.com/api/lesson/python-for-ai/modules-and-imports","minutes":8,"keyIdea":"An import executes the module once and caches it, and Python searches the script's own folder first, which is why naming a file `json.py` breaks the real one."},{"slug":"project-layout","title":"Laying out a project so the imports keep working","url":"https://addaly.com/learn/python-for-ai/project-layout","api":"https://addaly.com/api/lesson/python-for-ai/project-layout","minutes":8,"keyIdea":"Run a module inside a package with `python3 -m package.module` rather than by path, and build file paths from `__file__` rather than the current working directory."},{"slug":"pure-functions","title":"Side effects, and why some functions are easy to test","url":"https://addaly.com/learn/python-for-ai/pure-functions","api":"https://addaly.com/api/lesson/python-for-ai/pure-functions","minutes":8,"keyIdea":"Functions that read the clock, the network or a model are impure, so pass those dependencies in as arguments and keep the parsing, calculation and formatting pure enough to test for free."},{"slug":"command-line-arguments","title":"Giving your script a proper command line","url":"https://addaly.com/learn/python-for-ai/command-line-arguments","api":"https://addaly.com/api/lesson/python-for-ai/command-line-arguments","minutes":8,"keyIdea":"Arguments belong on the command line rather than in `input()` prompts, and `argparse` gives you conversion, validation, generated help and correct exit codes for about fifteen lines."}]},{"slug":"errors-debugging-testing","title":"When it goes wrong: exceptions, debugging and tests","summary":"Most of the time you spend programming is spent on code that does not work yet. This block turns that time into a method: read the failure, decide whether to catch it or let it stop the program, get the state in front of you with a logger or a debugger, and then write the test that stops the same bug coming back.","outcome":"Take a program that crashes or quietly gives a wrong answer and find the cause from a traceback, a log line or a debugger session, then write a test that fails before the fix and passes after it, including for code that calls a paid API.","lessons":[{"slug":"reading-errors","title":"Reading an error message properly","url":"https://addaly.com/learn/python-for-ai/reading-errors","api":"https://addaly.com/api/lesson/python-for-ai/reading-errors","minutes":9,"keyIdea":"Read a traceback bottom line first for what broke, then the lowest block of your own code for where."},{"slug":"exceptions-and-try","title":"Catching an error, and deciding whether you should","url":"https://addaly.com/learn/python-for-ai/exceptions-and-try","api":"https://addaly.com/api/lesson/python-for-ai/exceptions-and-try","minutes":9,"keyIdea":"Catch only the exceptions you have a plan for, keep the `try` block down to the line that can actually raise, and chain with `from err` so the original cause survives in the traceback."},{"slug":"raising-errors","title":"Raising your own errors, and choosing the right one","url":"https://addaly.com/learn/python-for-ai/raising-errors","api":"https://addaly.com/api/lesson/python-for-ai/raising-errors","minutes":8,"keyIdea":"Raise the most specific built-in that already means what went wrong, always put the offending value in the message, and give a package one base exception class so callers can catch its failures without catching everything."},{"slug":"logging-not-print","title":"Logging: the print statements you can turn off","url":"https://addaly.com/learn/python-for-ai/logging-not-print","api":"https://addaly.com/api/lesson/python-for-ai/logging-not-print","minutes":8,"keyIdea":"Logging separates commentary from output and lets you switch detail on by level rather than by editing code, and `%s` arguments avoid building a message that will be discarded."},{"slug":"assertions-and-invariants","title":"Assertions: stating what must be true, and where they vanish","url":"https://addaly.com/learn/python-for-ai/assertions-and-invariants","api":"https://addaly.com/api/lesson/python-for-ai/assertions-and-invariants","minutes":7,"keyIdea":"An assert states a claim about your own code's correctness and is removed entirely under `python -O`, so validation of input, permissions or anything a user can cause must use an `if` and a `raise`."},{"slug":"using-the-debugger","title":"The debugger: stopping the program and looking around","url":"https://addaly.com/learn/python-for-ai/using-the-debugger","api":"https://addaly.com/api/lesson/python-for-ai/using-the-debugger","minutes":8,"keyIdea":"`breakpoint()` and `python -m pdb -c continue` put you inside the running program at the moment of failure, where you can ask new questions of the live state instead of rerunning with more prints."},{"slug":"first-test-with-pytest","title":"Your first test, and what to test first","url":"https://addaly.com/learn/python-for-ai/first-test-with-pytest","api":"https://addaly.com/api/lesson/python-for-ai/first-test-with-pytest","minutes":9,"keyIdea":"pytest turns plain assert statements into detailed failure reports, and the highest-value test you will ever write is the one that reproduces a bug you just fixed."},{"slug":"testing-api-calls","title":"Testing code that calls an API you pay for","url":"https://addaly.com/learn/python-for-ai/testing-api-calls","api":"https://addaly.com/api/lesson/python-for-ai/testing-api-calls","minutes":9,"keyIdea":"No test should make a real network call, and for a model API you assert the contract (shape, types, required fields, length bounds) because the exact words change between runs."},{"slug":"debugging-with-ai","title":"Debugging with an AI assistant, and what it gets wrong","url":"https://addaly.com/learn/python-for-ai/debugging-with-ai","api":"https://addaly.com/api/lesson/python-for-ai/debugging-with-ai","minutes":8,"keyIdea":"An assistant answers from the text you paste, so give it the whole traceback and your versions, and verify any suggested method with `dir()` and `help()` before believing it exists."}]},{"slug":"files-formats-environments","title":"Data in and out: files, formats and the environment","summary":"Real work arrives as a file somebody sent you, in an encoding nobody recorded, with dates in three formats. This block covers paths that work on any machine, text that survives a round trip in any language, the two formats you will meet constantly, and the two things every AI script needs from its environment: pinned dependencies and a key that is not in the code.","outcome":"Read and write CSV, JSON and text files using paths that work regardless of where the program was started, handle non-English text without corrupting it, process a file larger than memory, and keep an API key out of your source and out of version control.","lessons":[{"slug":"files","title":"Files, and keeping data after the program ends","url":"https://addaly.com/learn/python-for-ai/files","api":"https://addaly.com/api/lesson/python-for-ai/files","minutes":7,"keyIdea":"Opening a file with mode w empties it first, so use a when you mean to add."},{"slug":"paths-and-pathlib","title":"Paths: why your program cannot find a file that is right there","url":"https://addaly.com/learn/python-for-ai/paths-and-pathlib","api":"https://addaly.com/api/lesson/python-for-ai/paths-and-pathlib","minutes":8,"keyIdea":"A relative path resolves against the working directory the program was started in, so anchor every path to `Path(__file__).resolve().parent` and join with the `/` operator."},{"slug":"encodings-and-unicode","title":"Text that survives: encodings, and why the accents turned into question marks","url":"https://addaly.com/learn/python-for-ai/encodings-and-unicode","api":"https://addaly.com/api/lesson/python-for-ai/encodings-and-unicode","minutes":9,"keyIdea":"Pass `encoding=\"utf-8\"` to every open, because the platform default is not UTF-8 everywhere, and remember that `len` counts code points rather than the characters a reader sees."},{"slug":"csv-files","title":"CSV: the format everybody sends you and nobody agrees on","url":"https://addaly.com/learn/python-for-ai/csv-files","api":"https://addaly.com/api/lesson/python-for-ai/csv-files","minutes":8,"keyIdea":"Use the csv module rather than splitting on commas, always pass `newline=\"\"`, and remember every value arrives as a string so conversion and its failures belong at the boundary."},{"slug":"json-data","title":"JSON: the format every API speaks","url":"https://addaly.com/learn/python-for-ai/json-data","api":"https://addaly.com/api/lesson/python-for-ai/json-data","minutes":8,"keyIdea":"JSON's type set is smaller than Python's, so tuples, sets, datetimes and Decimals need a `default` hook, and integer dictionary keys come back as strings."},{"slug":"dates-and-times","title":"Dates and times, and the hour that does not exist","url":"https://addaly.com/learn/python-for-ai/dates-and-times","api":"https://addaly.com/api/lesson/python-for-ai/dates-and-times","minutes":9,"keyIdea":"Store instants in UTC as aware datetimes and convert with a named zone only for display, and use `perf_counter` rather than clock arithmetic to measure how long something took."},{"slug":"streaming-large-files","title":"Files larger than memory","url":"https://addaly.com/learn/python-for-ai/streaming-large-files","api":"https://addaly.com/api/lesson/python-for-ai/streaming-large-files","minutes":8,"keyIdea":"Loop over the file object rather than reading it, chain generators for each processing step, and move to SQLite the moment you need to sort or join rather than filter."},{"slug":"packages-and-venvs","title":"Installing packages, and why virtual environments exist","url":"https://addaly.com/learn/python-for-ai/packages-and-venvs","api":"https://addaly.com/api/lesson/python-for-ai/packages-and-venvs","minutes":7,"keyIdea":"A virtual environment is a per-project folder of packages, and activation lasts only for one terminal session."},{"slug":"dependencies-and-pinning","title":"Pinning dependencies, so it still runs next year","url":"https://addaly.com/learn/python-for-ai/dependencies-and-pinning","api":"https://addaly.com/api/lesson/python-for-ai/dependencies-and-pinning","minutes":8,"keyIdea":"Applications pin exact versions and libraries give ranges, and a `pip freeze` snapshot is not the same as a record of what you actually asked for."},{"slug":"secrets-and-environment","title":"API keys: out of the code, out of the repository","url":"https://addaly.com/learn/python-for-ai/secrets-and-environment","api":"https://addaly.com/api/lesson/python-for-ai/secrets-and-environment","minutes":8,"keyIdea":"Keys live in the environment, never in the source or a notebook, and when one leaks the fix is revocation first: cleaning git history afterwards does not undo the exposure."}]},{"slug":"talking-to-a-service","title":"Talking to a service: HTTP from Python, done properly","summary":"The first API call worked. This module is everything between that and code you would let run unattended against a service that charges by the token: what a request is made of, why connections should be reused, how to time out and back off without double-spending, how to walk a paginated result, what a provider's SDK does for you, how to consume a streamed reply, how to make twenty calls at once, and how to know what each call cost.","outcome":"Write a client for a paid model API that reuses connections, times out, retries only what is safe to retry, walks pagination with a generator, consumes a streamed response as it arrives, runs many requests concurrently under a rate limit, validates the JSON the model returns before trusting it, and reports the cost of every call from the usage figures in the response.","lessons":[{"slug":"first-api-call","title":"Calling an API for the first time","url":"https://addaly.com/learn/python-for-ai/first-api-call","api":"https://addaly.com/api/lesson/python-for-ai/first-api-call","minutes":9,"keyIdea":"The status code tells you the request and reply worked; only the body tells you what the answer says."},{"slug":"anatomy-of-a-request","title":"What a request is made of, and how to see the one you actually sent","url":"https://addaly.com/learn/python-for-ai/anatomy-of-a-request","api":"https://addaly.com/api/lesson/python-for-ai/anatomy-of-a-request","minutes":8,"keyIdea":"A request is a method, a URL with a query string, headers and an optional body; when a call fails, print the request Python built rather than the one you think you wrote."},{"slug":"sessions-and-connection-reuse","title":"Sessions: paying for the handshake once instead of every call","url":"https://addaly.com/learn/python-for-ai/sessions-and-connection-reuse","api":"https://addaly.com/api/lesson/python-for-ai/sessions-and-connection-reuse","minutes":7,"keyIdea":"A bare requests.get() opens and closes a TCP and TLS connection every time; a Session keeps it open, which is why a loop of two hundred calls drops from minutes to seconds and why every serious client is a Session."},{"slug":"timeouts-retries-and-backoff","title":"Timeouts and retries: the code that decides whether you pay twice","url":"https://addaly.com/learn/python-for-ai/timeouts-retries-and-backoff","api":"https://addaly.com/api/lesson/python-for-ai/timeouts-retries-and-backoff","minutes":9,"keyIdea":"Retry a request only when you can prove it did not take effect (a connect failure, a 429, a 503) and never blindly retry a POST that timed out while reading, because the server may have finished the work and billed you before the reply was lost."},{"slug":"pagination-and-cursors","title":"Pagination: walking a result that arrives in pages","url":"https://addaly.com/learn/python-for-ai/pagination-and-cursors","api":"https://addaly.com/api/lesson/python-for-ai/pagination-and-cursors","minutes":8,"keyIdea":"An API never hands you all of anything; it hands you a page and a way to ask for the next, and a generator that yields items and hides the page boundary is the cleanest way to consume it."},{"slug":"sdks-versus-raw-requests","title":"A provider's SDK: what it does for you, what it hides, and how to read it","url":"https://addaly.com/learn/python-for-ai/sdks-versus-raw-requests","api":"https://addaly.com/api/lesson/python-for-ai/sdks-versus-raw-requests","minutes":8,"keyIdea":"An SDK is a Session with the auth header, retries, typed responses and streaming already written; the same OpenAI-shaped client talks to a free local model by changing base_url, and when it misbehaves the source is sitting in your virtual environment to read."},{"slug":"consuming-a-stream","title":"Consuming a streamed reply: server-sent events, line by line","url":"https://addaly.com/learn/python-for-ai/consuming-a-stream","api":"https://addaly.com/api/lesson/python-for-ai/consuming-a-stream","minutes":9,"keyIdea":"A streamed model reply is one long HTTP response made of data: lines, each carrying a JSON fragment; read it with iter_lines, parse each fragment, print with flush=True, and accumulate the text yourself because nothing else will."},{"slug":"asyncio-and-concurrent-calls","title":"asyncio: twenty calls in the time of one","url":"https://addaly.com/learn/python-for-ai/asyncio-and-concurrent-calls","api":"https://addaly.com/api/lesson/python-for-ai/asyncio-and-concurrent-calls","minutes":10,"keyIdea":"async lets one thread overlap the waiting of many network calls, so twenty one-second requests finish in about a second; gather them, cap them with a Semaphore so the rate limit holds, and remember that any blocking call inside a coroutine stalls all of them."},{"slug":"threads-processes-and-the-gil","title":"Threads, processes, and the lock that decides which one you need","url":"https://addaly.com/learn/python-for-ai/threads-processes-and-the-gil","api":"https://addaly.com/api/lesson/python-for-ai/threads-processes-and-the-gil","minutes":9,"keyIdea":"Python threads overlap waiting but not computing, because one interpreter lock lets only one thread run Python at a time; use a ThreadPoolExecutor for network calls in synchronous code, and processes when the bottleneck is your own arithmetic."},{"slug":"validating-what-the-model-returns","title":"Validating what the model returns: from a string that looks like JSON to an object you can trust","url":"https://addaly.com/learn/python-for-ai/validating-what-the-model-returns","api":"https://addaly.com/api/lesson/python-for-ai/validating-what-the-model-returns","minutes":9,"keyIdea":"A model's reply is text until you have parsed it and checked every field against a schema; pydantic turns that check into one line, and feeding its error message back to the model is the cheapest repair there is."},{"slug":"counting-tokens-and-cost","title":"Knowing what each call cost: usage figures, token counting, and a budget that stops the program","url":"https://addaly.com/learn/python-for-ai/counting-tokens-and-cost","api":"https://addaly.com/api/lesson/python-for-ai/counting-tokens-and-cost","minutes":9,"keyIdea":"Every response carries its own token counts; multiply them by the price table, keep a running total, and raise before the cap is crossed, and count Hindi or code prompts before sending, because the four-characters-per-token rule of thumb is off by two to three times for them."}]},{"slug":"objects-and-the-shape-of-programs","title":"Objects, generators and the shape a larger program takes","summary":"Scripts grow. This module is the Python you need once a program is bigger than one file: classes and dataclasses for things that belong together, inheritance and composition for swapping one model provider for another, the dunder methods that make your own objects work with for and len and with, the iterator protocol under every loop, context managers, decorators, a type checker that catches what tests miss, making a project installable as a command, and finding out where the time actually goes.","outcome":"Restructure a growing script into classes and dataclasses with a swappable provider behind one interface, implement the dunder methods that let your objects work with for, len, in and with, write a decorator that retries or caches, run a type checker and act on its output, make the project installable as a command with pyproject.toml, and profile it to say from measurement rather than guesswork where the time goes.","lessons":[{"slug":"classes-and-objects","title":"Classes: when a dict stops being enough","url":"https://addaly.com/learn/python-for-ai/classes-and-objects","api":"https://addaly.com/api/lesson/python-for-ai/classes-and-objects","minutes":9,"keyIdea":"A class bundles data with the functions that act on it and gives the bundle a name; self is simply the object the method was called on, and a mutable value placed on the class rather than in __init__ is shared by every instance."},{"slug":"dataclasses","title":"Dataclasses: the class that is mostly data, written in four lines","url":"https://addaly.com/learn/python-for-ai/dataclasses","api":"https://addaly.com/api/lesson/python-for-ai/dataclasses","minutes":8,"keyIdea":"A dataclass writes __init__, __repr__ and __eq__ from the field list; a mutable default must go through field(default_factory=...), frozen=True makes instances hashable and immutable, and asdict is the road to JSON."},{"slug":"inheritance-and-composition","title":"Inheritance and composition: swapping one model provider for another","url":"https://addaly.com/learn/python-for-ai/inheritance-and-composition","api":"https://addaly.com/api/lesson/python-for-ai/inheritance-and-composition","minutes":9,"keyIdea":"Put the one thing that differs between providers behind a small base class with a single method, and give the rest of the program an object that has a provider rather than is one: inheritance for the interface, composition for everything else."},{"slug":"dunder-methods","title":"Dunder methods: making your own objects work with len, for, in and ==","url":"https://addaly.com/learn/python-for-ai/dunder-methods","api":"https://addaly.com/api/lesson/python-for-ai/dunder-methods","minutes":9,"keyIdea":"Built-in syntax is dispatched to double-underscore methods (len() calls __len__, for calls __iter__, == calls __eq__) so implementing them makes a class feel native, and defining __eq__ without __hash__ silently makes instances unhashable."},{"slug":"the-iterator-protocol","title":"The iterator protocol: what for actually does, and why a generator is empty the second time","url":"https://addaly.com/learn/python-for-ai/the-iterator-protocol","api":"https://addaly.com/api/lesson/python-for-ai/the-iterator-protocol","minutes":9,"keyIdea":"for calls iter() once and next() repeatedly until StopIteration; a list gives a fresh iterator each time but a generator is its own iterator and is used up after one pass, which is why iterating it twice yields nothing the second time."},{"slug":"context-managers","title":"Context managers: the cleanup that runs even when the block raises","url":"https://addaly.com/learn/python-for-ai/context-managers","api":"https://addaly.com/api/lesson/python-for-ai/context-managers","minutes":8,"keyIdea":"with guarantees that __exit__ runs however the block ends, which is why files, sessions, locks and timers belong in one; contextlib.contextmanager writes one from a generator with a single yield, and the code after the yield is the cleanup."},{"slug":"decorators","title":"Decorators: wrapping a function with retry, timing or a cache","url":"https://addaly.com/learn/python-for-ai/decorators","api":"https://addaly.com/api/lesson/python-for-ai/decorators","minutes":9,"keyIdea":"A decorator is a function that takes a function and returns a replacement; @wraps keeps the original's name, and lru_cache on a model call returns the same answer forever for the same arguments, which is a saving or a bug depending on whether you wanted fresh output."},{"slug":"running-a-type-checker","title":"Running a type checker: the bugs it finds that tests do not","url":"https://addaly.com/learn/python-for-ai/running-a-type-checker","api":"https://addaly.com/api/lesson/python-for-ai/running-a-type-checker","minutes":9,"keyIdea":"A type checker follows every possible path through the code without running it, so it catches the None that only appears on the branch you never tested; Optional forces you to handle the missing case, and Protocol lets you describe an interface without inheritance."},{"slug":"packaging-with-pyproject","title":"pyproject.toml: making your project installable, and a command somebody can type","url":"https://addaly.com/learn/python-for-ai/packaging-with-pyproject","api":"https://addaly.com/api/lesson/python-for-ai/packaging-with-pyproject","minutes":9,"keyIdea":"A pyproject.toml with a name, version, dependencies and a [project.scripts] entry turns a folder into something pip can install and a command a colleague can run; pip install -e . links the source so edits take effect without reinstalling."},{"slug":"profiling-where-time-goes","title":"Profiling: finding where the time actually goes before you optimise anything","url":"https://addaly.com/learn/python-for-ai/profiling-where-time-goes","api":"https://addaly.com/api/lesson/python-for-ai/profiling-where-time-goes","minutes":9,"keyIdea":"Measure before you change: perf_counter around suspects, cProfile sorted by cumulative time for the whole program, tracemalloc for memory, and in an AI program the answer is almost always the network call, not the loop you were about to rewrite."}]},{"slug":"numbers-in-bulk","title":"Numbers in bulk: NumPy, pandas and the vector under every model","summary":"A model is arithmetic on arrays, and the data that feeds it arrives as tables. This module is the Python for both: NumPy arrays and why they are a hundred times faster than a loop, shapes and broadcasting and the wrong-shape bug that runs without complaint, dtypes and what float16 costs in precision, masks and views, the dot product and cosine similarity that sit under embedding search, then pandas for loading, cleaning, grouping and joining real tables, plotting what you found, and working in a notebook without the hidden-state bugs that come with one.","outcome":"Load a messy CSV into pandas, clean its missing values and types, group and join it into the table a question needs, convert it to a NumPy array of the right shape and dtype, compute cosine similarity between one vector and a hundred thousand in a single vectorised expression, plot the result to a file, and explain from memory layout why the array version runs a hundred times faster than the loop it replaced.","lessons":[{"slug":"numpy-arrays","title":"NumPy arrays: why one line beats a loop by a hundred times","url":"https://addaly.com/learn/python-for-ai/numpy-arrays","api":"https://addaly.com/api/lesson/python-for-ai/numpy-arrays","minutes":9,"keyIdea":"A NumPy array is one block of memory holding values of a single type, so an operation on it is a compiled loop over raw numbers; a Python list is a row of pointers to separate objects, and the loop over it pays for type checks and allocation on every element."},{"slug":"shapes-and-broadcasting","title":"Shapes, axes and broadcasting: the wrong-shape bug that runs without complaint","url":"https://addaly.com/learn/python-for-ai/shapes-and-broadcasting","api":"https://addaly.com/api/lesson/python-for-ai/shapes-and-broadcasting","minutes":9,"keyIdea":"Broadcasting stretches a size-1 dimension to match, so (3,) and (3,1) combine into (3,3) silently; axis=0 collapses rows to give one value per column, and printing .shape before and after an operation is the check that catches the bug that raises nothing."},{"slug":"dtypes-and-precision","title":"dtypes: what float16 costs, why int8 wraps round, and how to compare floats","url":"https://addaly.com/learn/python-for-ai/dtypes-and-precision","api":"https://addaly.com/api/lesson/python-for-ai/dtypes-and-precision","minutes":9,"keyIdea":"The dtype fixes bytes per element and therefore memory, range and precision; float16 holds three significant figures and overflows at 65,504, integers wrap silently at their limit, and two floats should be compared with isclose rather than ==."},{"slug":"masks-views-and-copies","title":"Masks, where, and the slice that is not a copy","url":"https://addaly.com/learn/python-for-ai/masks-views-and-copies","api":"https://addaly.com/api/lesson/python-for-ai/masks-views-and-copies","minutes":8,"keyIdea":"A boolean mask selects elements in one expression and replaces most loops; a basic slice of an array is a view onto the same memory so writing to it writes to the original, while a mask or fancy index returns a copy."},{"slug":"vectors-and-cosine-similarity","title":"Dot products and cosine similarity: one vector against a hundred thousand in a single line","url":"https://addaly.com/learn/python-for-ai/vectors-and-cosine-similarity","api":"https://addaly.com/api/lesson/python-for-ai/vectors-and-cosine-similarity","minutes":9,"keyIdea":"Cosine similarity is the dot product of two unit-length vectors, so normalise the matrix once and every query becomes one matrix-vector product; at a hundred thousand rows that is milliseconds, and the point at which it stops being milliseconds is the point at which an index becomes worth its complexity."},{"slug":"pandas-dataframes","title":"pandas: a table with named columns, and the four things to look at first","url":"https://addaly.com/learn/python-for-ai/pandas-dataframes","api":"https://addaly.com/api/lesson/python-for-ai/pandas-dataframes","minutes":9,"keyIdea":"A DataFrame is a dict of typed columns sharing an index; read_csv guesses the types and gets dates and IDs wrong, loc selects by label and iloc by position, and a column of object dtype is a column pandas could not understand."},{"slug":"cleaning-data-in-pandas","title":"Cleaning a table: missing values, the string that is not missing, and duplicates that are not identical","url":"https://addaly.com/learn/python-for-ai/cleaning-data-in-pandas","api":"https://addaly.com/api/lesson/python-for-ai/cleaning-data-in-pandas","minutes":9,"keyIdea":"isna finds only real NaN, so the strings 'Unknown', 'N/A' and empty must be converted first; fill or drop by column with a reason each time, and deduplicate on the key that defines a row rather than on every column."},{"slug":"groupby-merge-and-reshape","title":"groupby, merge and pivot: getting from rows to the table a question needs","url":"https://addaly.com/learn/python-for-ai/groupby-merge-and-reshape","api":"https://addaly.com/api/lesson/python-for-ai/groupby-merge-and-reshape","minutes":9,"keyIdea":"groupby splits by key and aggregates per group in one expression; merge joins two tables on a key and multiplies rows when the key repeats on both sides, so check the row count before and after every join."},{"slug":"plotting-with-matplotlib","title":"matplotlib: a plot you can read, saved to a file, from a script or a server","url":"https://addaly.com/learn/python-for-ai/plotting-with-matplotlib","api":"https://addaly.com/api/lesson/python-for-ai/plotting-with-matplotlib","minutes":8,"keyIdea":"Make a figure and axes with subplots, draw on the axes, label them, and savefig: plt.show() is for a notebook, a log-scaled axis is what makes a loss curve or a token histogram legible, and a plot with no axis labels is a plot nobody can check."},{"slug":"notebooks-without-hidden-state","title":"Notebooks without hidden state: execution order, restart-and-run-all, and when to leave for a .py file","url":"https://addaly.com/learn/python-for-ai/notebooks-without-hidden-state","api":"https://addaly.com/api/lesson/python-for-ai/notebooks-without-hidden-state","minutes":8,"keyIdea":"A notebook's kernel remembers every cell ever run in whatever order you ran them, so a result can depend on a cell you deleted; Restart and Run All is the only test that the notebook says what it does, and code that has stopped changing belongs in a module the notebook imports."}]},{"slug":"building-the-thing","title":"Building the thing: a small AI program, end to end","summary":"Everything so far was a part. This module assembles them into a working tool one piece at a time: a chat loop that keeps and trims its own history, prompt templates that cannot be broken by what a user types, a disk cache so a re-run costs nothing, a chunker for documents longer than a context window, a search over your own notes built on the similarity arithmetic of module 8, a free model running on your own machine, a web interface, an HTTP endpoint, a schedule that runs it every morning, and a continuous-integration job that runs the tests before anything ships.","outcome":"Assemble a complete tool from the course's parts (a chat loop with bounded history, injection-resistant prompt templates, a sqlite response cache, a document chunker, a local embedding search over your own notes, a free local model as the fallback provider) expose it through a Gradio interface and a FastAPI endpoint, run it on a schedule without double-processing, and gate every change behind a GitHub Actions job that runs the tests.","lessons":[{"slug":"a-chat-loop-with-memory","title":"A chat loop with memory: keeping history, trimming it, and stopping cleanly","url":"https://addaly.com/learn/python-for-ai/a-chat-loop-with-memory","api":"https://addaly.com/api/lesson/python-for-ai/a-chat-loop-with-memory","minutes":9,"keyIdea":"A conversation is a list you send back in full on every turn, so its cost grows with its length; trim from the oldest user turn while keeping the system prompt, catch KeyboardInterrupt so the last exchange is saved, and never let the loop run without a way out."},{"slug":"prompt-templates-safely","title":"Prompt templates: building a prompt from parts without letting the parts rewrite it","url":"https://addaly.com/learn/python-for-ai/prompt-templates-safely","api":"https://addaly.com/api/lesson/python-for-ai/prompt-templates-safely","minutes":8,"keyIdea":"A prompt is a string assembled from a template and user data; keep the template in a file, fill it with format or Template rather than an f-string at the call site, fence the user's text with clear delimiters, and accept that no delimiter makes injection impossible; only your handling of the output does."},{"slug":"a-sqlite-response-cache","title":"A response cache on sqlite: the re-run that costs nothing","url":"https://addaly.com/learn/python-for-ai/a-sqlite-response-cache","api":"https://addaly.com/api/lesson/python-for-ai/a-sqlite-response-cache","minutes":9,"keyIdea":"Key the cache on a hash of everything that changes the answer (model, messages, parameters) serialised with sort_keys so the same request always hashes the same; sqlite3 is in the standard library, survives restarts, and makes a twenty-times-rerun script free after the first."},{"slug":"chunking-text","title":"Chunking: splitting a document that does not fit, without cutting a sentence in half","url":"https://addaly.com/learn/python-for-ai/chunking-text","api":"https://addaly.com/api/lesson/python-for-ai/chunking-text","minutes":8,"keyIdea":"Split on paragraph boundaries first, then sentences, then characters as a last resort; measure chunks in tokens not characters, overlap adjacent chunks so a fact on the boundary survives, and keep each chunk's origin so a search result can point back to the page."},{"slug":"search-over-your-own-notes","title":"Search over your own notes: chunks, embeddings, cosine, and sixty lines","url":"https://addaly.com/learn/python-for-ai/search-over-your-own-notes","api":"https://addaly.com/api/lesson/python-for-ai/search-over-your-own-notes","minutes":10,"keyIdea":"Embed every chunk once into a normalised matrix saved with np.save, embed the query with the same model, take the top-k dot products, and hand the matching chunks with their sources to the model: the whole thing is the course's earlier parts assembled, and the model used to embed must never change between indexing and querying."},{"slug":"a-local-model-from-python","title":"A free model on your own machine, called from Python","url":"https://addaly.com/learn/python-for-ai/a-local-model-from-python","api":"https://addaly.com/api/lesson/python-for-ai/a-local-model-from-python","minutes":9,"keyIdea":"Ollama, llama.cpp and transformers each run an open model on a CPU with no account; memory is parameters times bytes per weight, tokens per second is what a CPU gives you, and the same provider class from module 7 makes the local model a drop-in for the paid one."},{"slug":"a-web-interface-with-gradio","title":"A web interface in twenty lines: Gradio, and what launch() actually starts","url":"https://addaly.com/learn/python-for-ai/a-web-interface-with-gradio","api":"https://addaly.com/api/lesson/python-for-ai/a-web-interface-with-gradio","minutes":8,"keyIdea":"gr.ChatInterface wraps a function that takes a message and history and returns text (or yields it for streaming) and launch() starts a local web server on port 7860; share=True opens a temporary public tunnel, and Hugging Face Spaces hosts the same file for free."},{"slug":"an-endpoint-with-fastapi","title":"An HTTP endpoint with FastAPI: your function, callable by any program","url":"https://addaly.com/learn/python-for-ai/an-endpoint-with-fastapi","api":"https://addaly.com/api/lesson/python-for-ai/an-endpoint-with-fastapi","minutes":9,"keyIdea":"A FastAPI route is a function with a pydantic model as its argument; the framework parses and validates the request body, returns 422 with the field named when it fails, and generates the documentation page at /docs from the same declarations."},{"slug":"scheduling-and-idempotent-jobs","title":"Running it every morning: cron, a lock file, and a job that is safe to run twice","url":"https://addaly.com/learn/python-for-ai/scheduling-and-idempotent-jobs","api":"https://addaly.com/api/lesson/python-for-ai/scheduling-and-idempotent-jobs","minutes":9,"keyIdea":"A scheduler only starts the process; the job must find its own environment, refuse to run alongside itself, record what it has already processed so a re-run does no harm, and write logs somewhere a person will read them."},{"slug":"github-actions-ci","title":"GitHub Actions: the tests run on a machine that is not yours, before anything ships","url":"https://addaly.com/learn/python-for-ai/github-actions-ci","api":"https://addaly.com/api/lesson/python-for-ai/github-actions-ci","minutes":9,"keyIdea":"A workflow file runs your tests on a clean machine on every push, which catches the dependency you forgot to pin and the file whose case only Windows and Linux care about; secrets go in the repository settings and the paid-API tests stay behind a flag so a pull request from a stranger cannot spend your money."}]}]},{"slug":"how-llms-work","title":"How a Language Model Actually Works","tagline":"The machinery under the chat box, explained without matrices.","description":"The machinery under the chat box, for people who already use these tools daily and want to know what is actually happening inside them. It covers how your text becomes numbers, what attention really does, what one transformer block adds, why the context window is not memory, what temperature does and does not fix, how the three training stages differ, and why making things up is a property of the method rather than a defect.","level":"intermediate","track":"start","url":"https://addaly.com/learn/how-llms-work","lessons":78,"minutes":668,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/how-llms-work.pdf","pages":436,"bytes":4677166,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/how-llms-work.pdf","cover":"https://addaly.com/textbooks/look/how-llms-work/1.webp?v=2026-10-07-4677166"},"film":{"url":"https://addaly.com/learn/how-llms-work#film","video":"https://addaly.com/videos/how-llms-work.mp4","captions":"https://addaly.com/videos/how-llms-work.vtt","poster":"https://addaly.com/videos/how-llms-work.jpg","seconds":974,"bytes":117783633,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"from-characters-to-vectors","title":"From characters to vectors","summary":"Everything a model does begins with turning your text into integers and those integers into positions in space. This block walks that path end to end (the vocabulary, the lookup table, the way order is encoded) and finishes with the arithmetic that tells you how big a model is and what is actually inside the file you download.","outcome":"Trace a piece of text from characters to token ids to vectors and back to a score for every possible next token, predict where a tokenizer will split unfamiliar input, and count the parameters of a model from four numbers on its config page.","lessons":[{"slug":"what-a-language-model-is","title":"What a language model actually is","url":"https://addaly.com/learn/how-llms-work/what-a-language-model-is","api":"https://addaly.com/api/lesson/how-llms-work/what-a-language-model-is","minutes":8,"keyIdea":"A language model is a function from a sequence of tokens to a probability distribution over the next token; the chat interface, the persona and the tools are all layers built on top of that one function."},{"slug":"tokens-not-words","title":"Tokens, and why a token is not a word","url":"https://addaly.com/learn/how-llms-work/tokens-not-words","api":"https://addaly.com/api/lesson/how-llms-work/tokens-not-words","minutes":8,"keyIdea":"A token is a chunk of characters chosen by a compression algorithm, not a word and not a letter."},{"slug":"building-the-vocabulary","title":"How the vocabulary gets built, by hand","url":"https://addaly.com/learn/how-llms-work/building-the-vocabulary","api":"https://addaly.com/api/lesson/how-llms-work/building-the-vocabulary","minutes":9,"keyIdea":"A tokenizer's vocabulary is the frozen output of a compression run over one corpus, so what it splits cleanly is a fact about that corpus and not about language."},{"slug":"tokenizer-failures-in-the-wild","title":"Tokenizer failures you will actually hit","url":"https://addaly.com/learn/how-llms-work/tokenizer-failures-in-the-wild","api":"https://addaly.com/api/lesson/how-llms-work/tokenizer-failures-in-the-wild","minutes":8,"keyIdea":"Several everyday model failures are not reasoning failures at all but artefacts of where the tokenizer happened to cut, and they are diagnosable by printing the split."},{"slug":"meaning-as-direction","title":"Embeddings: meaning as a direction","url":"https://addaly.com/learn/how-llms-work/meaning-as-direction","api":"https://addaly.com/api/lesson/how-llms-work/meaning-as-direction","minutes":7,"keyIdea":"An embedding is not a fixed label on a word; it is a position in space that context rewrites."},{"slug":"embedding-space-in-practice","title":"Working in embedding space, with free tools","url":"https://addaly.com/learn/how-llms-work/embedding-space-in-practice","api":"https://addaly.com/api/lesson/how-llms-work/embedding-space-in-practice","minutes":10,"keyIdea":"Semantic search is three operations (embed, normalise, take the dot product) and building it once teaches you more about what embeddings can and cannot do than any explanation."},{"slug":"position-and-order","title":"How the model knows what order the words were in","url":"https://addaly.com/learn/how-llms-work/position-and-order","api":"https://addaly.com/api/lesson/how-llms-work/position-and-order","minutes":8,"keyIdea":"Attention has no built-in sense of order, so position is injected as extra information, and the way it is injected sets the ceiling on how far a model can usefully read."},{"slug":"the-shape-of-a-model","title":"Counting the parameters yourself","url":"https://addaly.com/learn/how-llms-work/the-shape-of-a-model","api":"https://addaly.com/api/lesson/how-llms-work/the-shape-of-a-model","minutes":9,"keyIdea":"Parameter count, memory footprint and cost per token all follow from four numbers on a config page, and doing the arithmetic once makes model comparisons concrete rather than vibes."},{"slug":"what-is-in-a-model-file","title":"What is actually inside a model you download","url":"https://addaly.com/learn/how-llms-work/what-is-in-a-model-file","api":"https://addaly.com/api/lesson/how-llms-work/what-is-in-a-model-file","minutes":8,"keyIdea":"A model is a folder of numbers plus a configuration and a tokenizer, with no code, no data and no knowledge you can inspect by opening it."}]},{"slug":"inside-the-block","title":"Inside the block","summary":"The transformer is one small design repeated dozens of times. This block opens it up: attention written out in code you can run, the mask that makes training parallel, the feed-forward half where most of the parameters sit, and the engineering (grouped-query attention, key-value caching, sparse experts) that decides what a model costs to serve.","outcome":"Implement single-head attention from scratch in NumPy, explain which half of a block holds most of the parameters and which half moves information between positions, and predict how grouped-query attention, key-value caching and a mixture-of-experts design each change memory and speed.","lessons":[{"slug":"attention","title":"Attention, without a single matrix","url":"https://addaly.com/learn/how-llms-work/attention","api":"https://addaly.com/api/lesson/how-llms-work/attention","minutes":8,"keyIdea":"Attention blends information from earlier positions into the current one; it selects nothing and replaces nothing."},{"slug":"attention-in-forty-lines","title":"Attention in forty lines of NumPy","url":"https://addaly.com/learn/how-llms-work/attention-in-forty-lines","api":"https://addaly.com/api/lesson/how-llms-work/attention-in-forty-lines","minutes":10,"keyIdea":"Writing attention once, with real numbers, converts it from an analogy into an operation you can predict the behaviour of."},{"slug":"the-causal-mask-and-parallel-training","title":"Why training is parallel and generation is not","url":"https://addaly.com/learn/how-llms-work/the-causal-mask-and-parallel-training","api":"https://addaly.com/api/lesson/how-llms-work/the-causal-mask-and-parallel-training","minutes":8,"keyIdea":"The causal mask lets one pass over a document supply as many training examples as it has tokens, which is why training scales with hardware while generation is stuck at one token at a time."},{"slug":"the-block","title":"What one transformer block actually does","url":"https://addaly.com/learn/how-llms-work/the-block","api":"https://addaly.com/api/lesson/how-llms-work/the-block","minutes":8,"keyIdea":"Every layer adds to a running total rather than replacing it, and most parameters sit in the feed-forward half."},{"slug":"many-heads-and-what-they-do","title":"Many heads, and what has actually been found inside them","url":"https://addaly.com/learn/how-llms-work/many-heads-and-what-they-do","api":"https://addaly.com/api/lesson/how-llms-work/many-heads-and-what-they-do","minutes":9,"keyIdea":"Some attention heads have been shown to implement identifiable algorithms, most have not, and reading attention weights as an explanation of an output is a documented mistake."},{"slug":"the-feed-forward-half","title":"The feed-forward half, where most of the model is","url":"https://addaly.com/learn/how-llms-work/the-feed-forward-half","api":"https://addaly.com/api/lesson/how-llms-work/the-feed-forward-half","minutes":9,"keyIdea":"Two-thirds of the parameters sit in a per-position network that acts something like a large set of pattern-triggered lookups, and its neurons respond to many unrelated things at once."},{"slug":"normalisation-and-stability","title":"Normalisation, and why training is fragile","url":"https://addaly.com/learn/how-llms-work/normalisation-and-stability","api":"https://addaly.com/api/lesson/how-llms-work/normalisation-and-stability","minutes":8,"keyIdea":"Normalisation layers exist to keep numbers in a workable range, and where they are placed determines whether a very deep model can be trained at all."},{"slug":"from-final-vector-to-logits","title":"From the final vector to a score for every word","url":"https://addaly.com/learn/how-llms-work/from-final-vector-to-logits","api":"https://addaly.com/api/lesson/how-llms-work/from-final-vector-to-logits","minutes":8,"keyIdea":"The last step compares the final vector against every vocabulary entry, and doing that comparison at intermediate layers lets you watch an answer form."},{"slug":"mixture-of-experts","title":"Mixture of experts: big model, small bill","url":"https://addaly.com/learn/how-llms-work/mixture-of-experts","api":"https://addaly.com/api/lesson/how-llms-work/mixture-of-experts","minutes":9,"keyIdea":"A sparse mixture-of-experts model has a large parameter count but activates only a fraction per token, which decouples what it knows from what it costs to run."},{"slug":"kv-cache-and-attention-variants","title":"The key-value cache, and the engineering built around it","url":"https://addaly.com/learn/how-llms-work/kv-cache-and-attention-variants","api":"https://addaly.com/api/lesson/how-llms-work/kv-cache-and-attention-variants","minutes":9,"keyIdea":"Generation is fast only because every earlier token's keys and values are cached, and that cache (not the weights) is what usually limits how many users a GPU can serve."}]},{"slug":"turning-scores-into-text","title":"Turning scores into text","summary":"The model hands over a list of scores; something else has to turn that into words. This block covers the decoding layer (greedy and beam search, penalties, stop tokens, grammar-constrained output, speculative drafting) and the operational facts that follow, including why temperature zero is not actually deterministic.","outcome":"Choose and justify a decoding strategy for a given task, read raw log-probabilities to get a usable confidence signal, force structurally valid output without prompt-begging, and explain why identical requests at temperature zero can still differ.","lessons":[{"slug":"next-token-prediction","title":"Next-token prediction, and where the reasoning comes from","url":"https://addaly.com/learn/how-llms-work/next-token-prediction","api":"https://addaly.com/api/lesson/how-llms-work/next-token-prediction","minutes":8,"keyIdea":"Reasoning that appears in the output is partly reasoning being done in the output, one token of compute at a time."},{"slug":"greedy-beam-and-degeneration","title":"Greedy, beam search, and why chat models refuse both","url":"https://addaly.com/learn/how-llms-work/greedy-beam-and-degeneration","api":"https://addaly.com/api/lesson/how-llms-work/greedy-beam-and-degeneration","minutes":9,"keyIdea":"Always taking the most likely token produces text that is more probable and less human, which is why generation samples instead of maximising."},{"slug":"temperature-and-sampling","title":"Temperature and sampling: what the knob really does","url":"https://addaly.com/learn/how-llms-work/temperature-and-sampling","api":"https://addaly.com/api/lesson/how-llms-work/temperature-and-sampling","minutes":6,"keyIdea":"Temperature reshapes a distribution the model already produced; it cannot add knowledge the model lacks."},{"slug":"reading-logprobs","title":"Reading the numbers the model will give you","url":"https://addaly.com/learn/how-llms-work/reading-logprobs","api":"https://addaly.com/api/lesson/how-llms-work/reading-logprobs","minutes":9,"keyIdea":"Log-probabilities are the only quantitative signal a model exposes about its own output, and they are useful for ranking even though they are unreliable as absolute confidence."},{"slug":"stop-tokens-and-chat-templates","title":"Special tokens, stop conditions, and where a turn ends","url":"https://addaly.com/learn/how-llms-work/stop-tokens-and-chat-templates","api":"https://addaly.com/api/lesson/how-llms-work/stop-tokens-and-chat-templates","minutes":8,"keyIdea":"A conversation is one long string containing learned boundary markers, and most \"the model went haywire\" reports are a boundary marker that was missing or wrong."},{"slug":"constrained-decoding","title":"Making output structurally valid, without asking nicely","url":"https://addaly.com/learn/how-llms-work/constrained-decoding","api":"https://addaly.com/api/lesson/how-llms-work/constrained-decoding","minutes":9,"keyIdea":"Structure can be enforced by masking impossible tokens at each step, which makes invalid output impossible rather than unlikely."},{"slug":"sampling-many-answers","title":"Asking the same question several times","url":"https://addaly.com/learn/how-llms-work/sampling-many-answers","api":"https://addaly.com/api/lesson/how-llms-work/sampling-many-answers","minutes":8,"keyIdea":"Sampling several answers and aggregating them buys accuracy with compute at inference time, and the gain is largest where the model is nearly right and inconsistent."},{"slug":"speculative-decoding","title":"Speculative decoding: a small model guesses, a big model checks","url":"https://addaly.com/learn/how-llms-work/speculative-decoding","api":"https://addaly.com/api/lesson/how-llms-work/speculative-decoding","minutes":8,"keyIdea":"A large model can verify several drafted tokens in one pass for almost the cost of producing one, so a small draft model makes generation faster with no change to the output distribution."},{"slug":"temperature-zero-is-not-deterministic","title":"Why temperature zero still gives you different answers","url":"https://addaly.com/learn/how-llms-work/temperature-zero-is-not-deterministic","api":"https://addaly.com/api/lesson/how-llms-work/temperature-zero-is-not-deterministic","minutes":8,"keyIdea":"Floating-point addition is not associative, so a request batched differently produces slightly different logits, and a near-tie between two tokens can flip."},{"slug":"streaming-and-latency","title":"Streaming, and the two latencies users feel","url":"https://addaly.com/learn/how-llms-work/streaming-and-latency","api":"https://addaly.com/api/lesson/how-llms-work/streaming-and-latency","minutes":8,"keyIdea":"Time to first token and time between tokens have different causes and different fixes, and conflating them produces optimisation work that users never notice."}]},{"slug":"the-context-window","title":"What the model can see","summary":"The context window is the model's entire world for one call, and almost every practical decision about building with these systems is a decision about what goes into it. This block covers the budget, the position bias, caching, retrieval, tools, and the security consequence of there being no boundary between instructions and data.","outcome":"Budget a context window across system prompt, history, retrieved material and output; predict where in a long prompt information is most likely to be missed; and explain why prompt injection is a structural property of the input format rather than a bug awaiting a patch.","lessons":[{"slug":"context-is-not-memory","title":"The context window is not memory","url":"https://addaly.com/learn/how-llms-work/context-is-not-memory","api":"https://addaly.com/api/lesson/how-llms-work/context-is-not-memory","minutes":7,"keyIdea":"The model is stateless; anything it appears to remember was re-sent to it as text this turn."},{"slug":"what-fills-the-window","title":"Budgeting the window, line by line","url":"https://addaly.com/learn/how-llms-work/what-fills-the-window","api":"https://addaly.com/api/lesson/how-llms-work/what-fills-the-window","minutes":8,"keyIdea":"A context window is a budget shared by the system prompt, tool definitions, history, retrieved material and the response, and every one of those competes with the others."},{"slug":"position-bias-and-effective-context","title":"Where in a long prompt things get missed","url":"https://addaly.com/learn/how-llms-work/position-bias-and-effective-context","api":"https://addaly.com/api/lesson/how-llms-work/position-bias-and-effective-context","minutes":9,"keyIdea":"A model's advertised context length is a capacity, and the length over which it actually uses information reliably is a separate number you have to measure."},{"slug":"prompt-caching","title":"Prompt caching, and the ordering it demands","url":"https://addaly.com/learn/how-llms-work/prompt-caching","api":"https://addaly.com/api/lesson/how-llms-work/prompt-caching","minutes":8,"keyIdea":"A server can reuse the stored keys and values for a prompt prefix it has seen before, but only if the prefix is byte-identical, which turns prompt ordering into an engineering decision."},{"slug":"retrieval-mechanically","title":"Retrieval, as a pipeline that can break in six places","url":"https://addaly.com/learn/how-llms-work/retrieval-mechanically","api":"https://addaly.com/api/lesson/how-llms-work/retrieval-mechanically","minutes":9,"keyIdea":"Retrieval-augmented generation is a search system with a model on the end, and most of its failures are search failures that get blamed on the model."},{"slug":"chunking-decisions","title":"Chunking: the decision that quietly sets your ceiling","url":"https://addaly.com/learn/how-llms-work/chunking-decisions","api":"https://addaly.com/api/lesson/how-llms-work/chunking-decisions","minutes":8,"keyIdea":"A chunk must be small enough to be a precise retrieval unit and complete enough to be a usable answer, and those two demands pull in opposite directions."},{"slug":"tools-and-function-calling","title":"Tool use, with the magic removed","url":"https://addaly.com/learn/how-llms-work/tools-and-function-calling","api":"https://addaly.com/api/lesson/how-llms-work/tools-and-function-calling","minutes":8,"keyIdea":"A model does not call a function; it emits text describing a call, and your code decides whether to run it."},{"slug":"the-system-prompt-is-just-tokens","title":"Why there is no boundary between instructions and data","url":"https://addaly.com/learn/how-llms-work/the-system-prompt-is-just-tokens","api":"https://addaly.com/api/lesson/how-llms-work/the-system-prompt-is-just-tokens","minutes":9,"keyIdea":"Everything in the context is the same kind of thing (tokens) so text from a document or a web page can act on the model exactly as an instruction does."},{"slug":"images-and-audio-as-tokens","title":"Images and audio, as more tokens in the same stream","url":"https://addaly.com/learn/how-llms-work/images-and-audio-as-tokens","api":"https://addaly.com/api/lesson/how-llms-work/images-and-audio-as-tokens","minutes":8,"keyIdea":"A multimodal model converts an image into a sequence of vectors placed in the same context as text, which explains both what it does well and its specific blindness to fine detail."}]},{"slug":"where-the-weights-come-from","title":"Where the weights come from","summary":"Every capability and every bias in a model was put there by a training process with a specific objective, a specific corpus and a specific budget. This block covers all three: what the data is, what the loss actually measures, how the numbers get updated, what the run costs, and what the later stages (supervised tuning, preference training, and reinforcement learning against checkable answers) each change and each fail to change.","outcome":"Explain what each training stage optimises and what it cannot fix, estimate the compute cost of a training run from parameter and token counts, and choose between prompting, retrieval and fine-tuning by what each one actually changes.","lessons":[{"slug":"pretraining-finetuning-rlhf","title":"Pretraining, fine-tuning, and preference training","url":"https://addaly.com/learn/how-llms-work/pretraining-finetuning-rlhf","api":"https://addaly.com/api/lesson/how-llms-work/pretraining-finetuning-rlhf","minutes":8,"keyIdea":"Pretraining is where knowledge comes from; the later stages mostly shape behaviour, not facts."},{"slug":"what-is-in-the-training-data","title":"What is actually in the training data","url":"https://addaly.com/learn/how-llms-work/what-is-in-the-training-data","api":"https://addaly.com/api/lesson/how-llms-work/what-is-in-the-training-data","minutes":9,"keyIdea":"Pretraining corpora are mostly filtered web text, and the filtering decisions (what counts as quality, what gets deduplicated, what gets removed) shape the model as much as the architecture does."},{"slug":"the-loss-and-perplexity","title":"What the training objective actually measures","url":"https://addaly.com/learn/how-llms-work/the-loss-and-perplexity","api":"https://addaly.com/api/lesson/how-llms-work/the-loss-and-perplexity","minutes":8,"keyIdea":"Cross-entropy loss measures how surprised the model is by the true next token, and the entire capability of the system is a side effect of driving that one number down."},{"slug":"how-weights-get-updated","title":"How a number inside the model gets changed","url":"https://addaly.com/learn/how-llms-work/how-weights-get-updated","api":"https://addaly.com/api/lesson/how-llms-work/how-weights-get-updated","minutes":9,"keyIdea":"Training is a loop of measure the error, compute how each parameter contributed, nudge every parameter slightly, repeat, and the memory needed for the nudging is why training costs far more than inference."},{"slug":"scaling-laws","title":"Scaling laws, and the correction that changed everything","url":"https://addaly.com/learn/how-llms-work/scaling-laws","api":"https://addaly.com/api/lesson/how-llms-work/scaling-laws","minutes":9,"keyIdea":"Loss falls predictably as a power law in parameters, data and compute, and the 2022 correction showing most models were badly undertrained is why small, capable models exist."},{"slug":"what-training-costs","title":"What a training run actually costs","url":"https://addaly.com/learn/how-llms-work/what-training-costs","api":"https://addaly.com/api/lesson/how-llms-work/what-training-costs","minutes":8,"keyIdea":"Two formulas (6ND for training compute and 2N per token for inference) let you estimate the cost of any model from public numbers and check any claim you read."},{"slug":"fine-tuning-in-practice","title":"Fine-tuning: what it changes and what it cannot","url":"https://addaly.com/learn/how-llms-work/fine-tuning-in-practice","api":"https://addaly.com/api/lesson/how-llms-work/fine-tuning-in-practice","minutes":9,"keyIdea":"Fine-tuning is good at teaching form and poor at adding facts, and confusing the two is the commonest expensive mistake in applied work."},{"slug":"preference-training","title":"Preference training, from reward models to DPO","url":"https://addaly.com/learn/how-llms-work/preference-training","api":"https://addaly.com/api/lesson/how-llms-work/preference-training","minutes":9,"keyIdea":"Preference training optimises a learned proxy for what humans approve of, and every characteristic behaviour of chat assistants (the hedging, the length, the agreeableness) comes from optimising that proxy rather than truth."},{"slug":"reinforcement-learning-on-checkable-answers","title":"Training against answers you can check","url":"https://addaly.com/learn/how-llms-work/reinforcement-learning-on-checkable-answers","api":"https://addaly.com/api/lesson/how-llms-work/reinforcement-learning-on-checkable-answers","minutes":9,"keyIdea":"When correctness can be verified by a program, the reward is exact rather than a learned proxy, and models trained this way learn to spend more tokens working before answering."},{"slug":"emergence-and-the-argument","title":"Emergent abilities, and the argument about whether they exist","url":"https://addaly.com/learn/how-llms-work/emergence-and-the-argument","api":"https://addaly.com/api/lesson/how-llms-work/emergence-and-the-argument","minutes":8,"keyIdea":"A capability that appears to switch on abruptly with scale may be a smoothly improving capability measured with an all-or-nothing metric, and the disagreement matters for anyone forecasting what models will do next."}]},{"slug":"why-it-goes-wrong","title":"Why it goes wrong, by mechanism","summary":"Every characteristic failure of a language model (invention, agreement, forgetting what it was told, brittleness, drift, being talked out of its rules, being worse in your language) traced back to a specific part of the machinery from the first five modules, with the test that tells you which one you are looking at.","outcome":"Diagnose a wrong or unreliable answer by naming the mechanism behind it (sampling, training signal, tokenisation, knowledge conflict, position, version change or data share) run the two-minute test that confirms the diagnosis, and choose the mitigation that acts on that mechanism rather than on the prompt.","lessons":[{"slug":"hallucination-by-design","title":"Why hallucination is a property of the method","url":"https://addaly.com/learn/how-llms-work/hallucination-by-design","api":"https://addaly.com/api/lesson/how-llms-work/hallucination-by-design","minutes":8,"keyIdea":"The model always outputs a plausible continuation; nothing in the mechanism checks whether it is true."},{"slug":"measuring-uncertainty","title":"Measuring what the model does not know","url":"https://addaly.com/learn/how-llms-work/measuring-uncertainty","api":"https://addaly.com/api/lesson/how-llms-work/measuring-uncertainty","minutes":9,"keyIdea":"Uncertainty has to be measured at the level of meaning rather than tokens, it only becomes a probability after calibration against labelled outcomes, and no measure of uncertainty can catch an answer the model is confidently wrong about."},{"slug":"sycophancy","title":"Sycophancy: agreement as a trained reflex","url":"https://addaly.com/learn/how-llms-work/sycophancy","api":"https://addaly.com/api/lesson/how-llms-work/sycophancy","minutes":8,"keyIdea":"A model agrees with the user because raters rewarded agreement and the user's belief sits in the context as tokens the model conditions on, so the fix is to keep your view out of the prompt rather than to instruct the model harder."},{"slug":"knowledge-in-weights-versus-context","title":"Two places a fact can live, and what happens when they disagree","url":"https://addaly.com/learn/how-llms-work/knowledge-in-weights-versus-context","api":"https://addaly.com/api/lesson/how-llms-work/knowledge-in-weights-versus-context","minutes":9,"keyIdea":"A memorised fact and a fact in the context reach the output as two contributions added into the same vector, so the larger one wins and nothing in the architecture prefers what the model was told over what it remembers."},{"slug":"the-reversal-curse","title":"What it means to know a fact: the reversal curse","url":"https://addaly.com/learn/how-llms-work/the-reversal-curse","api":"https://addaly.com/api/lesson/how-llms-work/the-reversal-curse","minutes":8,"keyIdea":"A fact in the weights is a one-way association written in the direction the training text ran, so a model can know that A is B without being able to answer what B is, while a fact in the context works in both directions."},{"slug":"reasoning-by-pattern","title":"Reasoning that is pattern matching, and how to tell","url":"https://addaly.com/learn/how-llms-work/reasoning-by-pattern","api":"https://addaly.com/api/lesson/how-llms-work/reasoning-by-pattern","minutes":9,"keyIdea":"A benchmark score mixes recognising a familiar template with executing a procedure, and the drop in accuracy when names, numbers and an irrelevant sentence are changed is the measurement that separates the two."},{"slug":"prompt-sensitivity","title":"Why a comma changes the answer","url":"https://addaly.com/learn/how-llms-work/prompt-sensitivity","api":"https://addaly.com/api/lesson/how-llms-work/prompt-sensitivity","minutes":8,"keyIdea":"Format is part of the input distribution (through tokens, learned layouts, position and near-ties) so a score is a range across equivalent formats, and a design that permutes, constrains and ensembles is more robust than a search for the one prompt that works."},{"slug":"drift-between-versions","title":"Drift: the same name, a different model","url":"https://addaly.com/learn/how-llms-work/drift-between-versions","api":"https://addaly.com/api/lesson/how-llms-work/drift-between-versions","minutes":8,"keyIdea":"A model name is a pointer that providers move, so behaviour changes have to be separated into jitter, version drift and input drift by test rather than by guess, and only a pinned snapshot with a scheduled canary set makes a change attributable."},{"slug":"why-jailbreaks-work","title":"Why jailbreaks work: two failures of safety training","url":"https://addaly.com/learn/how-llms-work/why-jailbreaks-work","api":"https://addaly.com/api/lesson/how-llms-work/why-jailbreaks-work","minutes":9,"keyIdea":"Refusal is a trained behaviour covering a narrow slice of inputs, so jailbreaks work either by pitting it against other trained objectives or by moving the request to a region (an encoding, a language, a fiction) where capability generalised and the refusal did not."},{"slug":"language-imbalance","title":"Why it is worse in Hindi, and costs more","url":"https://addaly.com/learn/how-llms-work/language-imbalance","api":"https://addaly.com/api/lesson/how-llms-work/language-imbalance","minutes":9,"keyIdea":"A tokenizer trained mostly on English splits Devanagari into several times as many tokens, which multiplies cost, halves the usable context and slows every response, and the same data imbalance that caused it also thins the model's knowledge and safety training in that language."}]},{"slug":"running-it","title":"Running it: memory, speed and money","summary":"What it takes to run a model rather than call one: the hardware limit that sets every speed you will ever see, the memory arithmetic that says whether it fits, what quantisation does to the numbers, how a server keeps a hundred people on one card, what a token really costs, and the architectures being built to escape the transformer's bill.","outcome":"Predict the tokens-per-second a given model will produce on a given machine from memory bandwidth alone, say whether a model and context will fit in a stated amount of memory, choose a quantisation level and defend it with a measurement, estimate the cost of a token from a GPU's hourly price, and explain the trade an alternative architecture is making.","lessons":[{"slug":"the-bandwidth-wall","title":"The bandwidth wall: why decode speed is a division","url":"https://addaly.com/learn/how-llms-work/the-bandwidth-wall","api":"https://addaly.com/api/lesson/how-llms-work/the-bandwidth-wall","minutes":9,"keyIdea":"Single-stream generation reads every weight once per token, so its speed is memory bandwidth divided by model bytes, which is why quantisation, mixture-of-experts and batching help and why a faster-compute GPU with the same bandwidth does not."},{"slug":"will-it-fit","title":"Will it fit: the memory budget of a running model","url":"https://addaly.com/learn/how-llms-work/will-it-fit","api":"https://addaly.com/api/lesson/how-llms-work/will-it-fit","minutes":9,"keyIdea":"A running model's memory is weights plus a key-value cache that grows with every token of every concurrent user, so the context and concurrency you can afford is free memory after the weights load divided by the per-token cache cost."},{"slug":"quantisation-mechanics","title":"Quantisation: what the numbers lose","url":"https://addaly.com/learn/how-llms-work/quantisation-mechanics","api":"https://addaly.com/api/lesson/how-llms-work/quantisation-mechanics","minutes":10,"keyIdea":"Quantisation works because rounding errors average out across long dot products, which is exactly why it fails where they cannot (small models, multi-step arithmetic, long-context recall and weakly represented languages) and why perplexity is the wrong number to choose a level by."},{"slug":"running-on-your-own-machine","title":"Running a model on your own machine","url":"https://addaly.com/learn/how-llms-work/running-on-your-own-machine","api":"https://addaly.com/api/lesson/how-llms-work/running-on-your-own-machine","minutes":9,"keyIdea":"A local model is chosen from the memory you have at 0.6 gigabytes per billion parameters, runs at the bandwidth division, and is undone most often by a model that spills into swap or a chat template that does not match the file."},{"slug":"serving-many-users","title":"Serving a hundred people from one card","url":"https://addaly.com/learn/how-llms-work/serving-many-users","api":"https://addaly.com/api/lesson/how-llms-work/serving-many-users","minutes":9,"keyIdea":"A server fills the compute that single-stream decode leaves idle by scheduling at the token step with a paged cache, so throughput rises almost free with concurrency until compute saturates, and the capacity of a card is the concurrency at which it stops meeting your latency target."},{"slug":"splitting-a-model-across-gpus","title":"Splitting a model across GPUs","url":"https://addaly.com/learn/how-llms-work/splitting-a-model-across-gpus","api":"https://addaly.com/api/lesson/how-llms-work/splitting-a-model-across-gpus","minutes":8,"keyIdea":"The three ways to cut a model across cards differ in what crosses the wire (a small activation vector for a layer split, an all-reduce per block for a tensor split, routed tokens for an expert split) and only the tensor split adds bandwidth and therefore speed."},{"slug":"the-price-of-a-token","title":"The price of a token, from both sides","url":"https://addaly.com/learn/how-llms-work/the-price-of-a-token","api":"https://addaly.com/api/lesson/how-llms-work/the-price-of-a-token","minutes":9,"keyIdea":"Every line on a price list is a serving mechanism invoiced (output costs more because decode is bandwidth-bound, cached input is cheap because prefill is skipped, batch is half price because idle capacity is already paid for) and self-hosting beats the API only at high, steady utilisation."},{"slug":"distillation-and-small-models","title":"Distillation: how small models got good","url":"https://addaly.com/learn/how-llms-work/distillation-and-small-models","api":"https://addaly.com/api/lesson/how-llms-work/distillation-and-small-models","minutes":9,"keyIdea":"A small model trained to match a large model's full next-token distribution learns from the ranking of every wrong answer as well as the right one, which transfers behaviour and reasoning habits well and long-tail knowledge poorly."},{"slug":"cascades-and-routing","title":"Cascades and routers: paying for the hard cases only","url":"https://addaly.com/learn/how-llms-work/cascades-and-routing","api":"https://addaly.com/api/lesson/how-llms-work/cascades-and-routing","minutes":8,"keyIdea":"A cascade is only as good as the signal that decides to escalate, so prefer a deterministic check, then a calibrated score, then consistency, and measure the routed system by re-running a sample of cheap-routed requests through the expensive model."},{"slug":"beyond-the-transformer","title":"Beyond the transformer: what the alternatives trade","url":"https://addaly.com/learn/how-llms-work/beyond-the-transformer","api":"https://addaly.com/api/lesson/how-llms-work/beyond-the-transformer","minutes":9,"keyIdea":"Every alternative to attention replaces an exact, growing cache with a fixed-size summary, buying constant per-token cost at the price of exact long-range recall, and none of them changes the failure modes, because those come from the training setup rather than the attention layer."}]},{"slug":"looking-inside","title":"Looking inside: what the weights actually hold","summary":"The methods researchers use to read a model from the inside (probes, sparse dictionaries, patching, steering, causal tracing), what each has actually found, what each cannot show, and what that evidence says about memorisation, unlearning, the faithfulness of a model's stated reasoning, and the disputes that hang on those questions.","outcome":"Explain how a probe, a sparse autoencoder, an activation patch and a steering vector each extract evidence about what a model represents, state what each finding does and does not prove, run a steering experiment on an open model, and say where the questions of memorisation, unlearning and faithful reasoning currently stand.","lessons":[{"slug":"superposition-and-features","title":"Superposition: more features than dimensions","url":"https://addaly.com/learn/how-llms-work/superposition-and-features","api":"https://addaly.com/api/lesson/how-llms-work/superposition-and-features","minutes":9,"keyIdea":"A model stores more features than it has dimensions by placing them along nearly orthogonal directions that rarely fire together, which is why single neurons look meaningless and why every method for reading a model has to find directions instead."},{"slug":"probing-what-is-represented","title":"Probing: asking the activations a question","url":"https://addaly.com/learn/how-llms-work/probing-what-is-represented","api":"https://addaly.com/api/lesson/how-llms-work/probing-what-is-represented","minutes":9,"keyIdea":"A linear probe shows that a property is decodable from a layer's activations, which is necessary but not sufficient for the model using it: only an intervention that changes the direction and moves the output shows use."},{"slug":"sparse-autoencoders","title":"Sparse autoencoders: a dictionary for the residual stream","url":"https://addaly.com/learn/how-llms-work/sparse-autoencoders","api":"https://addaly.com/api/lesson/how-llms-work/sparse-autoencoders","minutes":10,"keyIdea":"A wide autoencoder trained to reconstruct activations under a sparsity penalty pulls superposed directions apart into thousands of single-meaning features without labels: a real advance in discovering what a model represents, and not yet a reliable instrument for auditing it."},{"slug":"activation-patching-and-circuits","title":"Patching: finding which parts do the work","url":"https://addaly.com/learn/how-llms-work/activation-patching-and-circuits","api":"https://addaly.com/api/lesson/how-llms-work/activation-patching-and-circuits","minutes":9,"keyIdea":"Copying one activation from a clean run into a corrupted run and measuring the recovery is the only method here that yields a causal claim, and a circuit is the set of components that patching shows to be sufficient and necessary for one narrow behaviour."},{"slug":"steering-with-directions","title":"Steering: pushing on a direction","url":"https://addaly.com/learn/how-llms-work/steering-with-directions","api":"https://addaly.com/api/lesson/how-llms-work/steering-with-directions","minutes":9,"keyIdea":"Adding a feature's direction to the residual stream changes behaviour in the way the feature's meaning predicts, and the discovery that refusal in open chat models is one such direction (removable in an afternoon) is why the model's own refusals cannot be the safety boundary."},{"slug":"where-facts-live","title":"Where a fact lives, and whether you can edit it","url":"https://addaly.com/learn/how-llms-work/where-facts-live","api":"https://addaly.com/api/lesson/how-llms-work/where-facts-live","minutes":9,"keyIdea":"Causal tracing shows a fact is retrieved by mid-layer feed-forward blocks at the subject's position and copied forward by attention, and editing that lookup works on its own terms while failing on the reverse question, on neighbours, and after a few dozen edits."},{"slug":"is-the-reasoning-faithful","title":"Is the written reasoning what the model did?","url":"https://addaly.com/learn/how-llms-work/is-the-reasoning-faithful","api":"https://addaly.com/api/lesson/how-llms-work/is-the-reasoning-faithful","minutes":9,"keyIdea":"A model's stated reasoning is partly the computation and partly a plausible account generated afterwards, with no training signal that rewards reporting the real cause, so a rationale is a set of claims to verify, never evidence of process."},{"slug":"memorisation-and-regurgitation","title":"Memorisation, regurgitation, and the dispute that hangs on them","url":"https://addaly.com/learn/how-llms-work/memorisation-and-regurgitation","api":"https://addaly.com/api/lesson/how-llms-work/memorisation-and-regurgitation","minutes":10,"keyIdea":"A model stores no copies, yet text duplicated many times in the corpus gets a path through the weights that a prefix can retrieve verbatim: memorisation is driven by duplication, measurable by extraction tests, and distinct from the stylistic imitation it is usually confused with."},{"slug":"unlearning","title":"Unlearning: why removing something is harder than adding it","url":"https://addaly.com/learn/how-llms-work/unlearning","api":"https://addaly.com/api/lesson/how-llms-work/unlearning","minutes":9,"keyIdea":"Knowledge is not stored in a place that can be deleted, so current unlearning methods mostly disconnect the prompt from the lookup rather than erase it, and a little fine-tuning, or even quantisation, reconnects it."},{"slug":"what-interpretability-can-tell-you","title":"What interpretability can and cannot yet tell you","url":"https://addaly.com/learn/how-llms-work/what-interpretability-can-tell-you","api":"https://addaly.com/api/lesson/how-llms-work/what-interpretability-can-tell-you","minutes":9,"keyIdea":"Models demonstrably build partial, task-shaped internal models of what their text describes, and no current method can show that a model lacks a property, so a claim of verified absence is a claim nobody can yet make."}]}]},{"slug":"ai-actually-explained","title":"AI, Actually Explained","tagline":"For someone who was never told what this thing is.","description":"You have heard that AI matters. Nobody has told you what it is. This course starts from nothing: no maths, no code, no assumed background. By the end you will know what the word actually names, how a trained model differs from a program someone wrote, what a chatbot is doing when it answers you, why it can be badly wrong while sounding certain, where this technology already sits in your day without a label on it, what changed around 2022, and how to think about AI and work without either panic or dismissal.","level":"beginner","track":"start","url":"https://addaly.com/learn/ai-actually-explained","lessons":92,"minutes":811,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-actually-explained.pdf","pages":478,"bytes":5018771,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-actually-explained.pdf","cover":"https://addaly.com/textbooks/look/ai-actually-explained/1.webp?v=2026-10-07-5018771"},"film":{"url":"https://addaly.com/learn/ai-actually-explained#film","video":"https://addaly.com/videos/ai-actually-explained.mp4","captions":"https://addaly.com/videos/ai-actually-explained.vtt","poster":"https://addaly.com/videos/ai-actually-explained.jpg","seconds":851,"bytes":87769028,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"what-the-word-names","title":"What this word actually names","summary":"Before anything else, the vocabulary has to stop being fog. This block separates the thing people mean from the four or five different things the word covers, shows you what a trained model physically is, and gives you a reliable question to ask about any system anyone calls AI.","outcome":"Place any system somebody calls AI inside the nested family of AI, machine learning, deep learning and generative AI, say whether its behaviour was written by a person or learned from examples, and describe what the trained thing physically is.","lessons":[{"slug":"the-word-ai","title":"What the word actually names","url":"https://addaly.com/learn/ai-actually-explained/the-word-ai","api":"https://addaly.com/api/lesson/ai-actually-explained/the-word-ai","minutes":6,"keyIdea":"AI names whatever machines have only just learned to do, so ask what a system does instead."},{"slug":"the-family-tree","title":"Four rings, one inside the next","url":"https://addaly.com/learn/ai-actually-explained/the-family-tree","api":"https://addaly.com/api/lesson/ai-actually-explained/the-family-tree","minutes":9,"keyIdea":"AI, machine learning, deep learning and generative AI are four rings inside each other, and naming the ring tells you which question to ask: show me the rules, show me the data, or show me how you know the output is true."},{"slug":"written-versus-trained","title":"Written by a person, or grown from examples","url":"https://addaly.com/learn/ai-actually-explained/written-versus-trained","api":"https://addaly.com/api/lesson/ai-actually-explained/written-versus-trained","minutes":7,"keyIdea":"A written program follows rules a person can read; a trained model follows patterns nobody ever wrote down."},{"slug":"what-training-means","title":"What training on data actually means","url":"https://addaly.com/learn/ai-actually-explained/what-training-means","api":"https://addaly.com/api/lesson/ai-actually-explained/what-training-means","minutes":7,"keyIdea":"Training nudges billions of numbers toward the examples, so the examples decide what the model becomes."},{"slug":"what-a-model-actually-is","title":"It is a file, and here is how big","url":"https://addaly.com/learn/ai-actually-explained/what-a-model-actually-is","api":"https://addaly.com/api/lesson/ai-actually-explained/what-a-model-actually-is","minutes":9,"keyIdea":"A trained model is a static file of billions of numbers, containing no sentences and no lookup table, which is why it has a cut-off date, cannot check anything, and does not change when you correct it."},{"slug":"prediction-is-the-engine","title":"Nearly all of it is prediction","url":"https://addaly.com/learn/ai-actually-explained/prediction-is-the-engine","api":"https://addaly.com/api/lesson/ai-actually-explained/prediction-is-the-engine","minutes":8,"keyIdea":"Training is guess, compare, adjust, repeated at scale, so a model can only learn to reproduce whatever was recorded as the right answer, including the parts of that record nobody would defend."},{"slug":"why-it-is-called-learning","title":"Why \"learning\" is a borrowed word","url":"https://addaly.com/learn/ai-actually-explained/why-it-is-called-learning","api":"https://addaly.com/api/lesson/ai-actually-explained/why-it-is-called-learning","minutes":8,"keyIdea":"Training and use are separate phases, so nothing you tell a model is learned by it: corrections live in the conversation and vanish with it."},{"slug":"pattern-or-understanding","title":"Does it understand anything? The honest answer","url":"https://addaly.com/learn/ai-actually-explained/pattern-or-understanding","api":"https://addaly.com/api/lesson/ai-actually-explained/pattern-or-understanding","minutes":9,"keyIdea":"Whether a model understands anything is genuinely unsettled, so judge it by whether its failures look like the failures of something that understood: invented citations and reversals under pressure say no."},{"slug":"the-words-people-use-wrongly","title":"Five words that hide more than they say","url":"https://addaly.com/learn/ai-actually-explained/the-words-people-use-wrongly","api":"https://addaly.com/api/lesson/ai-actually-explained/the-words-people-use-wrongly","minutes":8,"keyIdea":"Algorithm, neural network, AGI, \"the AI\" and \"trained on your data\" each cover two or more different things, and asking which one is meant turns most vague claims into checkable ones."}]},{"slug":"where-it-already-is","title":"Where it already is, without a label","summary":"Long before anyone typed a prompt, trained models were deciding what you saw, whether your card went through, and what your photographs looked like. This block walks through the systems already in your day, what each one is optimising for, and which of them can cost you something that matters.","outcome":"Identify the trained models already running in a phone, a feed, a bank and a clinic, state what quantity each one is optimising for, and separate a use where a mistake costs a second from one where it costs a loan or a diagnosis.","lessons":[{"slug":"already-around-you","title":"Where it already is, without the label","url":"https://addaly.com/learn/ai-actually-explained/already-around-you","api":"https://addaly.com/api/lesson/ai-actually-explained/already-around-you","minutes":6,"keyIdea":"Most AI in your life is unlabelled, and what matters is who pays when it is wrong."},{"slug":"the-feed-that-learns-you","title":"The feed is a prediction machine","url":"https://addaly.com/learn/ai-actually-explained/the-feed-that-learns-you","api":"https://addaly.com/api/lesson/ai-actually-explained/the-feed-that-learns-you","minutes":9,"keyIdea":"A feed predicts what you will do next, not what is good or true, so watch time steers it far more than likes and the only real control you have is what you finish watching."},{"slug":"spam-fraud-and-the-oldest-ai","title":"The models that have been working since 2002","url":"https://addaly.com/learn/ai-actually-explained/spam-fraud-and-the-oldest-ai","api":"https://addaly.com/api/lesson/ai-actually-explained/spam-fraud-and-the-oldest-ai","minutes":9,"keyIdea":"When the thing being detected is rare, even a 99% accurate model produces mostly false alarms, so ask what fraction of flagged cases are real rather than how accurate the model is."},{"slug":"the-camera-in-your-pocket","title":"Your photographs are partly predicted","url":"https://addaly.com/learn/ai-actually-explained/the-camera-in-your-pocket","api":"https://addaly.com/api/lesson/ai-actually-explained/the-camera-in-your-pocket","minutes":9,"keyIdea":"A phone photograph is a merged, model-enhanced prediction of a good picture rather than a straight recording, so shoot RAW when the image has to serve as evidence."},{"slug":"autocomplete-maps-and-the-keyboard","title":"Typing, routing, and systems that change what they measure","url":"https://addaly.com/learn/ai-actually-explained/autocomplete-maps-and-the-keyboard","api":"https://addaly.com/api/lesson/ai-actually-explained/autocomplete-maps-and-the-keyboard","minutes":8,"keyIdea":"A prediction that people act on alters the world it was predicting, which is why a navigation app's quiet shortcut stops being quiet and why models trained on their own past decisions drift."},{"slug":"machine-translation","title":"Translation, and the fluency trap","url":"https://addaly.com/learn/ai-actually-explained/machine-translation","api":"https://addaly.com/api/lesson/ai-actually-explained/machine-translation","minutes":9,"keyIdea":"Translation quality tracks how much parallel text existed for that language pair, and quality degrades without fluency degrading, so a wrong translation reads as smoothly as a right one."},{"slug":"speech-to-text","title":"Machines that write down what you said","url":"https://addaly.com/learn/ai-actually-explained/speech-to-text","api":"https://addaly.com/api/lesson/ai-actually-explained/speech-to-text","minutes":8,"keyIdea":"Speech recognition trained on unevenly distributed voices has roughly double the error rate for some speakers, and models such as Whisper invent plausible sentences during silence because they were never trained to output nothing."},{"slug":"decisions-made-about-you","title":"When a model decides something that matters","url":"https://addaly.com/learn/ai-actually-explained/decisions-made-about-you","api":"https://addaly.com/api/lesson/ai-actually-explained/decisions-made-about-you","minutes":10,"keyIdea":"The damage in automated decisions comes from scale, presumed correctness, no explanation and asymmetric cost, not from the sophistication of the method: Robodebt was arithmetic."},{"slug":"factories-fields-and-clinics","title":"The uses that are not on a screen","url":"https://addaly.com/learn/ai-actually-explained/factories-fields-and-clinics","api":"https://addaly.com/api/lesson/ai-actually-explained/factories-fields-and-clinics","minutes":9,"keyIdea":"Field deployments fail on conditions the test set never contained (light, dust, hurry and bandwidth) which is why the successful clinical systems triage for a human rather than decide."},{"slug":"spotting-ai-in-a-product","title":"How to tell whether a model is involved","url":"https://addaly.com/learn/ai-actually-explained/spotting-ai-in-a-product","api":"https://addaly.com/api/lesson/ai-actually-explained/spotting-ai-in-a-product","minutes":8,"keyIdea":"Varying wording, a mistakes disclaimer, a feedback widget and word-by-word latency mark a generative model, but the useful questions are what it predicts, what a mistake costs, and who pays for it."}]},{"slug":"how-a-chatbot-works","title":"What a chatbot is actually doing","summary":"The machinery, with no maths. Text becomes chunks, chunks become positions in a space of meaning, one chunk at a time comes back, and a second round of training turns a text-continuer into something that behaves like an assistant. Every quirk you have noticed is downstream of one of these steps.","outcome":"Trace a sentence from characters to tokens to a next-token prediction and back, and explain from that path why the model costs what it costs, forgets what it forgets, answers differently twice, and cannot reliably cite its own sources.","lessons":[{"slug":"what-a-chatbot-does","title":"What a chatbot is doing when it answers","url":"https://addaly.com/learn/ai-actually-explained/what-a-chatbot-does","api":"https://addaly.com/api/lesson/ai-actually-explained/what-a-chatbot-does","minutes":8,"keyIdea":"A chatbot writes one likely chunk at a time, so sounding right and being right come from the same place."},{"slug":"words-into-tokens","title":"Text is chopped up before the model sees it","url":"https://addaly.com/learn/ai-actually-explained/words-into-tokens","api":"https://addaly.com/api/lesson/ai-actually-explained/words-into-tokens","minutes":9,"keyIdea":"Text is split into tokens before the model sees it, which is why it cannot count letters reliably and why the same sentence costs three to five times as much in Hindi as in English."},{"slug":"the-next-word-game","title":"One chunk at a time, and it cannot take it back","url":"https://addaly.com/learn/ai-actually-explained/the-next-word-game","api":"https://addaly.com/api/lesson/ai-actually-explained/the-next-word-game","minutes":9,"keyIdea":"Each token is generated from everything before it and can never be retracted, so a wrong opening produces confident elaboration rather than a correction: edit and regenerate instead of arguing."},{"slug":"attention-what-it-does","title":"Attention, without a single equation","url":"https://addaly.com/learn/ai-actually-explained/attention-what-it-does","api":"https://addaly.com/api/lesson/ai-actually-explained/attention-what-it-does","minutes":9,"keyIdea":"Attention lets every token look directly at every other token, which made training parallel and huge models possible, and which costs work growing with the square of the length."},{"slug":"embeddings-meaning-as-position","title":"Meaning as a position in space","url":"https://addaly.com/learn/ai-actually-explained/embeddings-meaning-as-position","api":"https://addaly.com/api/lesson/ai-actually-explained/embeddings-meaning-as-position","minutes":10,"keyIdea":"An embedding places text as a point in space so that things used similarly sit close together, which makes it excellent for retrieval and unreliable for polarity, since praise and abuse occupy the same neighbourhood."},{"slug":"the-context-window","title":"The desk it works on, and what falls off it","url":"https://addaly.com/learn/ai-actually-explained/the-context-window","api":"https://addaly.com/api/lesson/ai-actually-explained/the-context-window","minutes":9,"keyIdea":"The context window is a desk that everything competes for, the oldest items fall off silently, and material in the middle is attended to least reliably, so restate what matters late and start fresh threads."},{"slug":"why-answers-differ","title":"Why the same question gives different answers","url":"https://addaly.com/learn/ai-actually-explained/why-answers-differ","api":"https://addaly.com/api/lesson/ai-actually-explained/why-answers-differ","minutes":8,"keyIdea":"A sampler, not the model, chooses each token, so answers vary by design, and because even temperature zero is not reproducible, never judge a prompt from a single run."},{"slug":"what-it-read","title":"What was in the pile","url":"https://addaly.com/learn/ai-actually-explained/what-it-read","api":"https://addaly.com/api/lesson/ai-actually-explained/what-it-read","minutes":9,"keyIdea":"A model is a compression of what was written down, in public, in that language, before the cut-off, and its fluency stays uniform even where its knowledge is thin."},{"slug":"taught-to-be-helpful","title":"The second training, where the assistant is made","url":"https://addaly.com/learn/ai-actually-explained/taught-to-be-helpful","api":"https://addaly.com/api/lesson/ai-actually-explained/taught-to-be-helpful","minutes":9,"keyIdea":"The assistant persona comes from a second training stage optimised on what people preferred rather than what was true, which is why sycophancy is the objective being met rather than a bug."},{"slug":"the-invisible-instructions","title":"The text you never see","url":"https://addaly.com/learn/ai-actually-explained/the-invisible-instructions","api":"https://addaly.com/api/lesson/ai-actually-explained/the-invisible-instructions","minutes":8,"keyIdea":"The hidden system prompt is ordinary text in the same context as your message, so it can be revealed, outweighed and diluted: treat it as a request and enforce anything critical in software outside the model."},{"slug":"not-a-search-engine","title":"Why it is not a search engine, and what changes when you bolt one on","url":"https://addaly.com/learn/ai-actually-explained/not-a-search-engine","api":"https://addaly.com/api/lesson/ai-actually-explained/not-a-search-engine","minutes":9,"keyIdea":"A model generates rather than retrieves, so citations from memory are fabricated shapes, and even with search bolted on, a link proves the page was used, not that it says what the answer claims."}]},{"slug":"why-it-goes-wrong","title":"Why it gets things wrong","summary":"Not a list of complaints, a set of mechanisms. Each failure in this block is explained by something you already know about how the machine works, which means each one can be predicted before it happens rather than discovered afterwards.","outcome":"Predict in advance which parts of a model's answer are most likely to be invented, explain each failure from the mechanism that causes it rather than by naming it, and say which of them can be fixed by better training and which cannot.","lessons":[{"slug":"confidently-wrong","title":"Why it can be wrong and sound completely sure","url":"https://addaly.com/learn/ai-actually-explained/confidently-wrong","api":"https://addaly.com/api/lesson/ai-actually-explained/confidently-wrong","minutes":7,"keyIdea":"Nothing in the model checks anything, and invention clusters exactly where the details get specific."},{"slug":"anatomy-of-a-hallucination","title":"Where invention concentrates, and why it never says \"I don't know\"","url":"https://addaly.com/learn/ai-actually-explained/anatomy-of-a-hallucination","api":"https://addaly.com/api/lesson/ai-actually-explained/anatomy-of-a-hallucination","minutes":9,"keyIdea":"There is no separate inventing mode: the same next-token operation produces truth where training was dense and plausible fiction where it was thin, and invention clusters in specific details inside familiar structures."},{"slug":"what-it-cannot-do","title":"What it cannot do, honestly","url":"https://addaly.com/learn/ai-actually-explained/what-it-cannot-do","api":"https://addaly.com/api/lesson/ai-actually-explained/what-it-cannot-do","minutes":8,"keyIdea":"Everything a model seems to know about you or about today was handed to it by the product, not held by the model."},{"slug":"counting-and-arithmetic","title":"Why it cannot count, and what to do instead","url":"https://addaly.com/learn/ai-actually-explained/counting-and-arithmetic","api":"https://addaly.com/api/lesson/ai-actually-explained/counting-and-arithmetic","minutes":8,"keyIdea":"Counting fails because the model sees tokens rather than letters and arithmetic fails because it predicts rather than computes, so hand the deterministic part to a program and keep the judgement for the model."},{"slug":"the-cut-off-and-the-clock","title":"It has no clock, and its knowledge thins before it stops","url":"https://addaly.com/learn/ai-actually-explained/the-cut-off-and-the-clock","api":"https://addaly.com/api/lesson/ai-actually-explained/the-cut-off-and-the-clock","minutes":8,"keyIdea":"A model's knowledge fades over the year before its cut-off rather than stopping at a wall, and it has no clock and no reliable knowledge of its own cut-off, so time-sensitive answers need an explicit date and a dated source."},{"slug":"bias-in-the-output","title":"Bias, and the difference between fixing it and hiding it","url":"https://addaly.com/learn/ai-actually-explained/bias-in-the-output","api":"https://addaly.com/api/lesson/ai-actually-explained/bias-in-the-output","minutes":10,"keyIdea":"Safety training removed overt bias while covert associations triggered by dialect and names survived, which shows that fixing what you measure moves the problem into what you do not measure."},{"slug":"the-reasoning-models","title":"Models that think out loud, and what that does not prove","url":"https://addaly.com/learn/ai-actually-explained/the-reasoning-models","api":"https://addaly.com/api/lesson/ai-actually-explained/the-reasoning-models","minutes":9,"keyIdea":"Reasoning models genuinely improve multi-step accuracy by generating working before answering, but experiments show the written trace can omit what actually changed the answer, so it is not an audit trail."},{"slug":"text-that-gives-it-orders","title":"When the document tells the model what to do","url":"https://addaly.com/learn/ai-actually-explained/text-that-gives-it-orders","api":"https://addaly.com/api/lesson/ai-actually-explained/text-that-gives-it-orders","minutes":9,"keyIdea":"Instructions and information arrive in one undifferentiated stream, so text inside any document a model reads can act as a command, which is why access should be narrow and consequential actions should need confirmation."},{"slug":"the-model-changed-under-you","title":"The thing you tested is not the thing running today","url":"https://addaly.com/learn/ai-actually-explained/the-model-changed-under-you","api":"https://addaly.com/api/lesson/ai-actually-explained/the-model-changed-under-you","minutes":8,"keyIdea":"Consumer AI products change silently and route between models, so \"it got worse\" is unsettleable without your own small set of real test cases run before and after."},{"slug":"deepfakes-and-evidence","title":"Fakes, detectors that do not work, and what is left","url":"https://addaly.com/learn/ai-actually-explained/deepfakes-and-evidence","api":"https://addaly.com/api/lesson/ai-actually-explained/deepfakes-and-evidence","minutes":9,"keyIdea":"Detection is unreliable and text detectors misclassify non-native English writing at high rates, so verification has to rest on source, corroboration and provenance rather than on inspecting the file."},{"slug":"weaker-in-your-language","title":"It is measurably weaker in most languages","url":"https://addaly.com/learn/ai-actually-explained/weaker-in-your-language","api":"https://addaly.com/api/lesson/ai-actually-explained/weaker-in-your-language","minutes":9,"keyIdea":"Models are measurably less accurate, less current and less safety-tuned outside English, and nothing in the interface signals it, so state your country, verify more, and use models built for your language where they exist."}]},{"slug":"how-it-got-here","title":"How it got here, and what changed in 2022","summary":"The technology looked sudden in 2022 and was seventy years in the making. This block walks the actual history (a name coined at a summer workshop, two winters and what froze in each, the 1990s turn from rules to statistics, the 2012 photograph competition that turned the field, the chip built for games, the 2017 design that could be scaled) and then puts real numbers on what the present generation cost, what it read, and what \"open\" means when a lab says it.","outcome":"Explain why the AI of 2022 arrived when it did (name the ingredients of data, chips and one architecture that had to coincide) put an order-of-magnitude figure on what a frontier model cost to train and how much text it read, distinguish open weights from open source, and say which ingredient is now the binding constraint.","lessons":[{"slug":"seventy-years-in-one-page","title":"Seventy years in one page","url":"https://addaly.com/learn/ai-actually-explained/seventy-years-in-one-page","api":"https://addaly.com/api/lesson/ai-actually-explained/seventy-years-in-one-page","minutes":8,"keyIdea":"The field has run in three booms and two winters since 1956, and each boom was the same two ideas (write the rules or learn them from examples) taking their turn."},{"slug":"the-two-winters","title":"Two winters, and what actually froze","url":"https://addaly.com/learn/ai-actually-explained/the-two-winters","api":"https://addaly.com/api/lesson/ai-actually-explained/the-two-winters","minutes":9,"keyIdea":"A winter is what happens when a system that works on the demonstration meets the long tail of real cases, and its cost of maintenance outruns its value."},{"slug":"rules-give-way-to-data","title":"The quiet turn: from rules to statistics","url":"https://addaly.com/learn/ai-actually-explained/rules-give-way-to-data","api":"https://addaly.com/api/lesson/ai-actually-explained/rules-give-way-to-data","minutes":8,"keyIdea":"The field switched from writing rules to counting examples when parliaments and the web supplied enough text to count, and the person's job shrank to choosing what the model measured."},{"slug":"the-2012-moment","title":"The photograph competition that turned the field","url":"https://addaly.com/learn/ai-actually-explained/the-2012-moment","api":"https://addaly.com/api/lesson/ai-actually-explained/the-2012-moment","minutes":9,"keyIdea":"In 2012 a network trained on two gaming cards halved the error rate of a labelled-image competition, and the result proved that the old idea worked once data and compute were large enough."},{"slug":"the-chip-built-for-games","title":"The chip that was built for games","url":"https://addaly.com/learn/ai-actually-explained/the-chip-built-for-games","api":"https://addaly.com/api/lesson/ai-actually-explained/the-chip-built-for-games","minutes":9,"keyIdea":"Training a network is almost entirely multiplying large grids of numbers, and a graphics chip is thousands of small cores built to do exactly that at once, which is why one games company came to sit under the whole industry."},{"slug":"one-architecture-ate-everything","title":"One architecture ate everything","url":"https://addaly.com/learn/ai-actually-explained/one-architecture-ate-everything","api":"https://addaly.com/api/lesson/ai-actually-explained/one-architecture-ate-everything","minutes":9,"keyIdea":"The 2017 transformer replaced reading a sentence one word at a time with looking at every word at once, which let thousands of chips share the work, and the same design then took over images, speech and proteins."},{"slug":"bigger-kept-working","title":"Bigger kept working, and the argument about why","url":"https://addaly.com/learn/ai-actually-explained/bigger-kept-working","api":"https://addaly.com/api/lesson/ai-actually-explained/bigger-kept-working","minutes":10,"keyIdea":"Between 2018 and 2022 a model's quality improved as a smooth, predictable function of parameters, data and compute; and the argument about whether new abilities \"emerge\" is largely an argument about how they are scored."},{"slug":"what-changed-in-2022","title":"What changed around 2022","url":"https://addaly.com/learn/ai-actually-explained/what-changed-in-2022","api":"https://addaly.com/api/lesson/ai-actually-explained/what-changed-in-2022","minutes":7,"keyIdea":"The 2022 breakthrough everyone noticed was access; the breakthrough underneath it was scale."},{"slug":"what-it-cost-to-build","title":"What it cost to build one","url":"https://addaly.com/learn/ai-actually-explained/what-it-cost-to-build","api":"https://addaly.com/api/lesson/ai-actually-explained/what-it-cost-to-build","minutes":9,"keyIdea":"The published cost of a model is usually the electricity and rented chips for the final run only, and the research, the failed runs and the years of serving it each cost more."},{"slug":"where-the-text-came-from","title":"Where the text came from, and whether it is running out","url":"https://addaly.com/learn/ai-actually-explained/where-the-text-came-from","api":"https://addaly.com/api/lesson/ai-actually-explained/where-the-text-came-from","minutes":10,"keyIdea":"A model's voice is the filtered residue of the web, and the stock of public human text is finite enough that the labs expect to have used it within a few years."},{"slug":"open-weights-and-closed","title":"Open weights, closed weights, and what \"open\" is hiding","url":"https://addaly.com/learn/ai-actually-explained/open-weights-and-closed","api":"https://addaly.com/api/lesson/ai-actually-explained/open-weights-and-closed","minutes":9,"keyIdea":"When a lab calls a model open it almost always means the weights can be downloaded, not that the data, code or licence are open, and the difference decides what you can audit, run and rely on."}]},{"slug":"beyond-text","title":"Beyond text: pictures, voices and video","summary":"The chatbot is one kind of generative model. The same idea (learn the patterns, then produce a likely new example) now draws pictures, speaks in a borrowed voice, composes music and renders video. This block explains each from its mechanism, without equations: why a picture starts as noise, how a sentence steers it, why the hands were wrong, what a model sees when it looks at a photograph, why three seconds of audio can clone a voice, why video is so much harder than a still, how a watermark is hidden inside the output, and what \"one model, many senses\" actually means.","outcome":"Explain how a diffusion model turns a prompt into an image and why negation in a prompt fails, account for the early failures at hands and lettering from the training data and the text encoder, describe what a vision model sees when it reads a photograph and where it is reliably blind, explain why a voice can be cloned from seconds of audio while video stays inconsistent across time, and state what a sampling-time watermark can and cannot survive.","lessons":[{"slug":"a-picture-from-noise","title":"A picture, out of noise","url":"https://addaly.com/learn/ai-actually-explained/a-picture-from-noise","api":"https://addaly.com/api/lesson/ai-actually-explained/a-picture-from-noise","minutes":9,"keyIdea":"An image model is trained to remove a little noise from a picture, and generating an image is running that skill backwards from pure static, step by step, until a picture appears."},{"slug":"how-the-prompt-reaches-the-picture","title":"How words steer the picture","url":"https://addaly.com/learn/ai-actually-explained/how-the-prompt-reaches-the-picture","api":"https://addaly.com/api/lesson/ai-actually-explained/how-the-prompt-reaches-the-picture","minutes":9,"keyIdea":"The prompt is turned into a bag of concept-positions by a separate model, which is why an image prompt behaves like a list of nouns, why \"no elephants\" draws elephants, and why a stronger text reader fixed most of it."},{"slug":"why-the-hands-were-wrong","title":"Why the hands were wrong","url":"https://addaly.com/learn/ai-actually-explained/why-the-hands-were-wrong","api":"https://addaly.com/api/lesson/ai-actually-explained/why-the-hands-were-wrong","minutes":8,"keyIdea":"Hands and lettering failed because the training photographs rarely show either clearly and the text reader saw words rather than letters, and both improved when the data and the reader changed rather than when the models got cleverer."},{"slug":"the-model-that-looks-at-pictures","title":"When the model looks at a picture","url":"https://addaly.com/learn/ai-actually-explained/the-model-that-looks-at-pictures","api":"https://addaly.com/api/lesson/ai-actually-explained/the-model-that-looks-at-pictures","minutes":9,"keyIdea":"A vision model cuts a photograph into a grid of patches and feeds them in as tokens beside the words, which is why it describes a scene fluently, costs hundreds of tokens per image, and is reliably blind to counting, position and fine detail."},{"slug":"cloning-a-voice","title":"A voice from three seconds","url":"https://addaly.com/learn/ai-actually-explained/cloning-a-voice","api":"https://addaly.com/api/lesson/ai-actually-explained/cloning-a-voice","minutes":9,"keyIdea":"A voice model separates who is speaking from what is said into a handful of numbers, so a few seconds of audio is enough to place a new speaker in a space learned from thousands, and that is why the scam calls work."},{"slug":"music-from-a-prompt","title":"Music from a prompt","url":"https://addaly.com/learn/ai-actually-explained/music-from-a-prompt","api":"https://addaly.com/api/lesson/ai-actually-explained/music-from-a-prompt","minutes":8,"keyIdea":"A music model turns sound into tokens and predicts the next one, which is why it produces a convincing three-minute song in a genre and cannot hold a motif, follow a chord chart or edit one bar."},{"slug":"why-video-is-harder","title":"Why video is so much harder than a still","url":"https://addaly.com/learn/ai-actually-explained/why-video-is-harder","api":"https://addaly.com/api/lesson/ai-actually-explained/why-video-is-harder","minutes":9,"keyIdea":"Video asks hundreds of frames to agree about objects, light and physics the model never learned as rules, so the failures are objects that flicker into existence and liquids that behave impossibly, at tens of cents a second."},{"slug":"how-a-watermark-is-hidden","title":"How a watermark is hidden inside the output","url":"https://addaly.com/learn/ai-actually-explained/how-a-watermark-is-hidden","api":"https://addaly.com/api/lesson/ai-actually-explained/how-a-watermark-is-hidden","minutes":9,"keyIdea":"A generator can tilt its own random choices (which pixel value, which token) toward a secret pattern that a paired detector can count, which proves the generator's origin when it cooperates and proves nothing when it does not."},{"slug":"one-model-many-senses","title":"One model, many senses","url":"https://addaly.com/learn/ai-actually-explained/one-model-many-senses","api":"https://addaly.com/api/lesson/ai-actually-explained/one-model-many-senses","minutes":9,"keyIdea":"A \"multimodal\" model is either several models glued together at the text or one model trained on tokens from every sense, and the difference decides whether it hears your tone, how long it takes to reply, and what \"watching a video\" actually means."}]},{"slug":"putting-it-to-work","title":"Putting it to work without getting burned","summary":"You know what it is and where it fails. This block is about using it: the shape of a task it is reliably good at and why, how to hand it material rather than questions, what happens to the words you type and how to stop them being used for training, what the free tiers give and quietly take away, how to run a model on your own laptop or phone so nothing leaves it, what a query costs in money and electricity, what an assistant inside your email can and cannot see, what changes when it stops answering and starts acting, what never to hand it, and how to keep your own judgement while using it.","outcome":"Choose a task a model is reliably good at and one it is not and explain the difference from its mechanism; state where a typed conversation goes and how to stop it being used for training; run a small open model on your own hardware; estimate the cost and energy of a query to within an order of magnitude; and explain why an agent that acts on your behalf fails differently from a chatbot that only answers.","lessons":[{"slug":"the-shape-of-a-good-task","title":"The shape of a task it is good at","url":"https://addaly.com/learn/ai-actually-explained/the-shape-of-a-good-task","api":"https://addaly.com/api/lesson/ai-actually-explained/the-shape-of-a-good-task","minutes":9,"keyIdea":"A model is reliable when the answer is in the material you gave it, cheap to check, and tolerant of occasional error; and unreliable when the answer has to come from its memory, which is the same mechanism as hallucination seen from the other side."},{"slug":"giving-it-what-it-needs","title":"Give it the material, not the question","url":"https://addaly.com/learn/ai-actually-explained/giving-it-what-it-needs","api":"https://addaly.com/api/lesson/ai-actually-explained/giving-it-what-it-needs","minutes":8,"keyIdea":"The model can only work on what is in its context window, so the reliable way to use it is to hand it the document, the draft, the examples and the audience, and ask for work on those rather than facts from memory."},{"slug":"where-your-words-go","title":"Where your words go","url":"https://addaly.com/learn/ai-actually-explained/where-your-words-go","api":"https://addaly.com/api/lesson/ai-actually-explained/where-your-words-go","minutes":10,"keyIdea":"A consumer chat is stored, may be read by a person, and by default may be used to train the next model, and each of those is a setting or a product tier you can change, once you know that \"deleted\" carries a legal asterisk."},{"slug":"getting-it-for-free","title":"Free tiers, and what they quietly ration","url":"https://addaly.com/learn/ai-actually-explained/getting-it-for-free","api":"https://addaly.com/api/lesson/ai-actually-explained/getting-it-for-free","minutes":8,"keyIdea":"A free tier rations the model, the message count and the context rather than the interface, and the commonest surprise is being moved to a smaller model mid-conversation without being told clearly."},{"slug":"running-one-on-your-own-machine","title":"A model on your own laptop or phone","url":"https://addaly.com/learn/ai-actually-explained/running-one-on-your-own-machine","api":"https://addaly.com/api/lesson/ai-actually-explained/running-one-on-your-own-machine","minutes":10,"keyIdea":"Shrinking each of a model's numbers from sixteen bits to four makes an eight-billion-parameter model fit in five gigabytes and run on an ordinary laptop, where it is slower and thinner on facts than the frontier and sends nothing anywhere."},{"slug":"what-a-query-costs","title":"What a query costs, in rupees and watt-hours","url":"https://addaly.com/learn/ai-actually-explained/what-a-query-costs","api":"https://addaly.com/api/lesson/ai-actually-explained/what-a-query-costs","minutes":9,"keyIdea":"A page in and a page out costs a few paise on a small model and about a rupee on a frontier one, and around a third of a watt-hour of electricity: small per query, and the total is not small."},{"slug":"the-assistant-inside-your-apps","title":"The assistant inside your email and spreadsheet","url":"https://addaly.com/learn/ai-actually-explained/the-assistant-inside-your-apps","api":"https://addaly.com/api/lesson/ai-actually-explained/the-assistant-inside-your-apps","minutes":9,"keyIdea":"An assistant built into a product is the same model plus a search over what the product has indexed under your permissions, so it sees exactly what you could find and nothing else, and an email can give it orders."},{"slug":"when-it-starts-to-act","title":"When it starts to act","url":"https://addaly.com/learn/ai-actually-explained/when-it-starts-to-act","api":"https://addaly.com/api/lesson/ai-actually-explained/when-it-starts-to-act","minutes":10,"keyIdea":"An agent is a model in a loop that reads, decides and acts, so its errors compound across steps and some of its actions cannot be undone, which is why the rule is read freely, act with confirmation."},{"slug":"the-things-to-never-hand-it","title":"What not to hand it","url":"https://addaly.com/learn/ai-actually-explained/the-things-to-never-hand-it","api":"https://addaly.com/api/lesson/ai-actually-explained/the-things-to-never-hand-it","minutes":9,"keyIdea":"A chatbot is not a confidant, a professional or a record-keeper (it has no duty of confidentiality, no accountability and no way to know your jurisdiction) so the things to keep from it are identities, secrets, other people's data and the final word."},{"slug":"keeping-your-own-judgement","title":"Keeping your own judgement","url":"https://addaly.com/learn/ai-actually-explained/keeping-your-own-judgement","api":"https://addaly.com/api/lesson/ai-actually-explained/keeping-your-own-judgement","minutes":9,"keyIdea":"Fluent answers are trusted more than they deserve and a skill you stop practising decays, so the habit that keeps you competent is to draft first, review its draft second, and sometimes work without it at all."}]},{"slug":"ai-and-jobs","title":"AI and work, with the evidence","summary":"Every conversation about AI eventually arrives at work. This block brings the evidence rather than the mood: how exposure is measured and what the figures do not say, what the controlled experiments found when people actually used the tools and for whom, the study where the experts got slower, the entry rung that is going missing, what the cash machine and the spreadsheet did to the trades they touched, the freelance markets where the effect showed up first, the hidden labour that trains the models, six trades as they stood in 2025, and what an early-career person can actually do with all of it.","outcome":"Distinguish a task from a job when reading a claim about automation, quote the size of the productivity effect the controlled studies actually found and for whom, explain from the elasticity of demand why automating a task can grow or shrink an occupation, say why entry-level roles are exposed before senior ones and what that does to a trade's training ladder, and describe the human labour a trained model depends on that its price does not show.","lessons":[{"slug":"ai-and-work","title":"AI and jobs, without panic or dismissal","url":"https://addaly.com/learn/ai-actually-explained/ai-and-work","api":"https://addaly.com/api/lesson/ai-actually-explained/ai-and-work","minutes":8,"keyIdea":"Models take tasks, not jobs, but a job whose learnable tasks all go is a job in trouble."},{"slug":"the-exposure-studies","title":"Measuring exposure, and what the numbers do not say","url":"https://addaly.com/learn/ai-actually-explained/the-exposure-studies","api":"https://addaly.com/api/lesson/ai-actually-explained/the-exposure-studies","minutes":9,"keyIdea":"Exposure figures count the share of a job's tasks a model could in principle do faster, not the share that will be automated, and they concentrate in clerical, educated, well-paid work because that is where the language-shaped tasks are."},{"slug":"what-the-experiments-found","title":"What the controlled experiments found","url":"https://addaly.com/learn/ai-actually-explained/what-the-experiments-found","api":"https://addaly.com/api/lesson/ai-actually-explained/what-the-experiments-found","minutes":10,"keyIdea":"When people were randomly given the tools and measured, output rose by a seventh to a half on well-specified tasks, quality rose, and the gains went mostly to the least experienced: on tasks inside the frontier."},{"slug":"the-study-that-found-a-slowdown","title":"The study where it made experts slower","url":"https://addaly.com/learn/ai-actually-explained/the-study-that-found-a-slowdown","api":"https://addaly.com/api/lesson/ai-actually-explained/the-study-that-found-a-slowdown","minutes":9,"keyIdea":"Experienced developers on their own large codebases were nineteen per cent slower with AI tools while believing they were twenty per cent faster, because the tasks sat outside the tool's support and the feeling of help tracked the fluency of the suggestions, not their value."},{"slug":"who-gains-first","title":"Novices gain first, and what that means for everyone else","url":"https://addaly.com/learn/ai-actually-explained/who-gains-first","api":"https://addaly.com/api/lesson/ai-actually-explained/who-gains-first","minutes":9,"keyIdea":"A model supplies the median of good practice, so it raises the floor toward the middle, narrows the gap between workers, and flattens the variety of what they produce, which is a gift to a novice and a different problem for an expert."},{"slug":"the-training-ladder","title":"The rung that goes missing","url":"https://addaly.com/learn/ai-actually-explained/the-training-ladder","api":"https://addaly.com/api/lesson/ai-actually-explained/the-training-ladder","minutes":10,"keyIdea":"Professions have always made their seniors by giving juniors the routine tasks a model now does, and payroll data since 2022 shows employment for the youngest workers in the most exposed occupations falling while their older colleagues' holds, and nobody has yet shown how the next seniors get made."},{"slug":"what-the-atm-did","title":"What the cash machine did to bank tellers","url":"https://addaly.com/learn/ai-actually-explained/what-the-atm-did","api":"https://addaly.com/api/lesson/ai-actually-explained/what-the-atm-did","minutes":9,"keyIdea":"Automating a task grows or shrinks an occupation depending on whether cheaper output makes people buy much more of it, and the cash machine, the spreadsheet and the power loom each show both halves of that rule in sequence."},{"slug":"the-freelance-canary","title":"The first place it showed up in pay","url":"https://addaly.com/learn/ai-actually-explained/the-freelance-canary","api":"https://addaly.com/api/lesson/ai-actually-explained/the-freelance-canary","minutes":8,"keyIdea":"Freelance writing, translation and illustration felt the effect first and most sharply because piecework is the task without the job (specified, priced, unaccountable and text-in, text-out) and the drop in jobs and earnings was measurable within months."},{"slug":"the-hands-that-trained-it","title":"The labour that trained it","url":"https://addaly.com/learn/ai-actually-explained/the-hands-that-trained-it","api":"https://addaly.com/api/lesson/ai-actually-explained/the-hands-that-trained-it","minutes":9,"keyIdea":"The second training that makes a model helpful and safe is done by people ranking answers and labelling harm, much of it paid by the task in Kenya, the Philippines, Venezuela and India, and the price of a query hides that labour the way it hides the electricity."},{"slug":"six-trades-honestly","title":"Six trades, as they stood in 2025","url":"https://addaly.com/learn/ai-actually-explained/six-trades-honestly","api":"https://addaly.com/api/lesson/ai-actually-explained/six-trades-honestly","minutes":10,"keyIdea":"In software, writing, support, translation, illustration and law, the same three things happened by 2025 (the routine task moved to the model, the entry rung thinned, and at least one firm that replaced people reversed course) with the details differing by how far demand stretched."},{"slug":"what-to-do-about-it","title":"What an early-career person can actually do","url":"https://addaly.com/learn/ai-actually-explained/what-to-do-about-it","api":"https://addaly.com/api/lesson/ai-actually-explained/what-to-do-about-it","minutes":9,"keyIdea":"The evidence points at five moves (learn to check before you can be replaced at producing, go deep in a domain rather than wide in tools, use the tools harder than your peers, aim for the role with a name on it, and keep the skills the tool does not touch) and the honest caveat is that no one has done this before."}]},{"slug":"who-decides","title":"Who controls it, and what is unsettled","summary":"The last block is about power and the open questions. Who owns each layer of the stack, from the one Dutch company that makes the lithography machines to the dozen labs that can afford a frontier run; what the laws that have arrived in Europe, India, Britain, the United States and China actually require; the copyright fight in five jurisdictions, presented as a fight and not resolved; who owns what a model makes; the electricity and the water in real units; the safety argument between people who agree on the facts and disagree on the risk; why a refusal can be trained in but not guaranteed; what \"AGI\" means to the people who use the word; the questions nobody has answered; and how to read the next headline.","outcome":"Name who controls each layer of the stack and where the chokepoints are; state what the EU AI Act and the current Indian, British, American and Chinese positions require of a chatbot and of a high-risk system; lay out the copyright and authorship disputes as disagreements between named positions without resolving them; put a figure on the electricity a data centre draws and say what the per-query number leaves out; explain from the mechanism why a refusal can be trained but not guaranteed; and read a claim about AI with the questions that separate a demonstration from a deployment.","lessons":[{"slug":"the-stack-and-its-chokepoints","title":"Four layers and their chokepoints","url":"https://addaly.com/learn/ai-actually-explained/the-stack-and-its-chokepoints","api":"https://addaly.com/api/lesson/ai-actually-explained/the-stack-and-its-chokepoints","minutes":9,"keyIdea":"Every frontier model depends on one Dutch machine-maker, one Taiwanese fabricator, one American chip designer and a handful of clouds, so control of AI is control of a few physical chokepoints that governments have already begun to use."},{"slug":"the-laws-that-have-arrived","title":"The laws that have arrived","url":"https://addaly.com/learn/ai-actually-explained/the-laws-that-have-arrived","api":"https://addaly.com/api/lesson/ai-actually-explained/the-laws-that-have-arrived","minutes":10,"keyIdea":"Europe regulates AI by the risk of its use, in tiers with dates; India, Britain and the United States apply existing law with advisories and state-by-state rules; China licenses providers and requires labels; and none of them can reach a model file on a laptop."},{"slug":"the-copyright-fight","title":"The copyright fight, as a fight","url":"https://addaly.com/learn/ai-actually-explained/the-copyright-fight","api":"https://addaly.com/api/lesson/ai-actually-explained/the-copyright-fight","minutes":12,"keyIdea":"Whether training a model on copyrighted work is lawful is being answered differently in the United States, Britain, the EU, Japan and India, around three separable questions (the copying at training, the output, and the market) and none of it is settled."},{"slug":"who-owns-what-it-makes","title":"Who owns what it makes","url":"https://addaly.com/learn/ai-actually-explained/who-owns-what-it-makes","api":"https://addaly.com/api/lesson/ai-actually-explained/who-owns-what-it-makes","minutes":9,"keyIdea":"Most jurisdictions require a human author for copyright, so a purely generated work may belong to nobody and anyone may copy it; India and Britain have an older clause naming the person who \"caused\" the work; and China has begun protecting outputs with substantial human input."},{"slug":"the-electricity-and-the-water","title":"The electricity and the water","url":"https://addaly.com/learn/ai-actually-explained/the-electricity-and-the-water","api":"https://addaly.com/api/lesson/ai-actually-explained/the-electricity-and-the-water","minutes":10,"keyIdea":"Data centres drew about one and a half per cent of the world's electricity in 2024 and are expected to double by 2030 with AI the fastest-growing part, and the per-query figures are small because they leave out the grid, the water behind the power and the concentration in a few places."},{"slug":"the-safety-argument","title":"The safety argument, both sides fairly","url":"https://addaly.com/learn/ai-actually-explained/the-safety-argument","api":"https://addaly.com/api/lesson/ai-actually-explained/the-safety-argument","minutes":10,"keyIdea":"The people who built these systems disagree about whether the largest risk is the harm happening now or a loss of control later, they agree on more than either side's press suggests, and the disagreement is about probabilities nobody can measure."},{"slug":"why-it-cannot-be-made-to-refuse","title":"Why a refusal can be trained but not guaranteed","url":"https://addaly.com/learn/ai-actually-explained/why-it-cannot-be-made-to-refuse","api":"https://addaly.com/api/lesson/ai-actually-explained/why-it-cannot-be-made-to-refuse","minutes":9,"keyIdea":"A model's refusal is a learned tendency rather than a rule, encoded so simply that it can be located and subtracted from open weights in minutes, which is why every jailbreak works for a while and why the durable defences sit outside the model."},{"slug":"what-agi-means","title":"What \"AGI\" means, to whom","url":"https://addaly.com/learn/ai-actually-explained/what-agi-means","api":"https://addaly.com/api/lesson/ai-actually-explained/what-agi-means","minutes":9,"keyIdea":"\"AGI\" has no agreed definition (a charter, a contract, a research taxonomy and a benchmark each mean something different by it) and every test proposed for it has been passed or saturated without the question feeling answered, which is what happens when a measure becomes a target."},{"slug":"the-questions-still-open","title":"Questions nobody has answered yet","url":"https://addaly.com/learn/ai-actually-explained/the-questions-still-open","api":"https://addaly.com/api/lesson/ai-actually-explained/the-questions-still-open","minutes":10,"keyIdea":"Whether scaling continues, whether the data lasts, whether it stays cheap, whether it understands, whether the money adds up and whose values it carries are all open, and each is open for a mechanical reason you now know."},{"slug":"how-to-read-the-next-headline","title":"How to read the next headline","url":"https://addaly.com/learn/ai-actually-explained/how-to-read-the-next-headline","api":"https://addaly.com/api/lesson/ai-actually-explained/how-to-read-the-next-headline","minutes":9,"keyIdea":"Every claim about AI can be sorted with six questions (demo or product, benchmark or task, could or does, who benefits, is there a model in it at all, and what was the control) and the same six apply to this course."}]}]},{"slug":"building-with-ai","title":"Building with AI","tagline":"From your first API call to a feature you can trust","description":"You can write some code. You have used a chat model. Now you want to put one inside something real (a support triage tool, a search box that answers questions, a feature your users hit a thousand times a day), and you have found that the gap between a good demo and a working feature is wide. This course closes that gap. It covers the HTTP call underneath everything and what it costs, how system prompts really behave, structured output and its limits, tool use and who is actually running the code, retrieval done properly, chunking and embeddings with real numbers, what an \"agent\" is once the marketing is removed, how to evaluate your own feature instead of guessing, and the failure modes to design for before launch. Every lesson has code you can run. The course is honest about what does not work: schemas do not make answers true, retrieval does not stop hallucination, and most agent demos fail for reasons no bigger model will fix. It does not cover training or fine-tuning models. This is about building with them.","level":"intermediate","track":"build","url":"https://addaly.com/learn/building-with-ai","lessons":80,"minutes":701,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/building-with-ai.pdf","pages":454,"bytes":4675131,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/building-with-ai.pdf","cover":"https://addaly.com/textbooks/look/building-with-ai/1.webp?v=2026-10-07-4675131"},"film":null,"modules":[{"slug":"the-call-underneath-everything","title":"The call underneath everything","summary":"One HTTP request, priced in tokens. What you send, what comes back, what it costs, what it does when it fails, and how to run the same thing on a laptop with no GPU.","outcome":"Send the same request to a hosted model and to a model running on your own machine, read every field of the response including token counts and stop reason, and predict within a factor of two what a proposed feature will cost per thousand users before you write it.","lessons":[{"slug":"first-api-call","title":"The call underneath everything","url":"https://addaly.com/learn/building-with-ai/first-api-call","api":"https://addaly.com/api/lesson/building-with-ai/first-api-call","minutes":6,"keyIdea":"The API is stateless: every turn you pay to resend the entire conversation."},{"slug":"system-prompts-and-turns","title":"System prompts, user turns, and who the model listens to","url":"https://addaly.com/learn/building-with-ai/system-prompts-and-turns","api":"https://addaly.com/api/lesson/building-with-ai/system-prompts-and-turns","minutes":6,"keyIdea":"A system prompt is the strongest thing you say, not a rule the model cannot break."},{"slug":"tokens-and-the-context-window","title":"Tokens, and why a Hindi bot costs three times an English one","url":"https://addaly.com/learn/building-with-ai/tokens-and-the-context-window","api":"https://addaly.com/api/lesson/building-with-ai/tokens-and-the-context-window","minutes":10,"keyIdea":"Cost, limits and latency are all measured in tokens, and the same sentence in Hindi can cost three times what it costs in English because the vocabulary was fitted to English."},{"slug":"sampling-and-determinism","title":"Temperature, sampling, and why the same input gives a different answer","url":"https://addaly.com/learn/building-with-ai/sampling-and-determinism","api":"https://addaly.com/api/lesson/building-with-ai/sampling-and-determinism","minutes":9,"keyIdea":"Sampling settings live in your code, not the model, and temperature 0 still varies because floating-point reductions and shared batching change which of two near-tied tokens wins."},{"slug":"streaming-and-perceived-speed","title":"Streaming, and the difference between fast and feeling fast","url":"https://addaly.com/learn/building-with-ai/streaming-and-perceived-speed","api":"https://addaly.com/api/lesson/building-with-ai/streaming-and-perceived-speed","minutes":9,"keyIdea":"Streaming does not make generation faster; it replaces total latency with time-to-first-token as the number the user feels, and it costs you the ability to validate or moderate before the text is on screen."},{"slug":"reading-the-response","title":"Every field in the response, and the two that catch bugs","url":"https://addaly.com/learn/building-with-ai/reading-the-response","api":"https://addaly.com/api/lesson/building-with-ai/reading-the-response","minutes":8,"keyIdea":"Check stop_reason before you parse and log the returned model string and usage on every call, because a truncated answer and a silently swapped model version both look like a working response until they do not."},{"slug":"retries-that-do-not-make-it-worse","title":"Errors, retries, and how a retry loop takes down your own service","url":"https://addaly.com/learn/building-with-ai/retries-that-do-not-make-it-worse","api":"https://addaly.com/api/lesson/building-with-ai/retries-that-do-not-make-it-worse","minutes":9,"keyIdea":"Retry only what a second attempt could fix, with jittered backoff under a wall-clock deadline and a concurrency cap, or your retry logic will convert a slow provider into your own outage."},{"slug":"choosing-a-model","title":"Choosing a model, and designing so you can change your mind","url":"https://addaly.com/learn/building-with-ai/choosing-a-model","api":"https://addaly.com/api/lesson/building-with-ai/choosing-a-model","minutes":9,"keyIdea":"The price gap between model tiers is 30-100x, benchmarks do not transfer to your task, so route cheap-first against twenty of your own cases and keep the provider behind one narrow interface."},{"slug":"a-model-on-your-own-machine","title":"Running a model on a laptop with no GPU","url":"https://addaly.com/learn/building-with-ai/a-model-on-your-own-machine","api":"https://addaly.com/api/lesson/building-with-ai/a-model-on-your-own-machine","minutes":10,"keyIdea":"A quantised 7B model is about 4 GB, runs on an ordinary laptop through an OpenAI-compatible endpoint on localhost, and is close to hosted quality on classification, extraction and rewriting while clearly behind on multi-step reasoning."},{"slug":"images-files-and-audio-in","title":"Sending images, PDFs and audio, and what they cost","url":"https://addaly.com/learn/building-with-ai/images-files-and-audio-in","api":"https://addaly.com/api/lesson/building-with-ai/images-files-and-audio-in","minutes":9,"keyIdea":"Images cost roughly width times height over 750 in tokens, PDFs need a text-layer-then-render fallback, and every extracted value should carry a verbatim quote you can find in the source, because a model asked to read something illegible will invent something plausible instead of refusing."}]},{"slug":"prompting-as-engineering","title":"Prompting as engineering","summary":"A prompt in production is not a clever sentence. It is a versioned interface with inputs, a contract, a cache strategy, a defined behaviour when it has no answer, and a test suite.","outcome":"Turn a prompt that works once into a versioned, cached, example-driven interface with a stated behaviour when the model does not know, and justify with cost and latency numbers whether a given task needs a longer prompt, a chain of smaller ones, a reasoning budget, or a fine-tune.","lessons":[{"slug":"the-prompt-is-an-interface","title":"A prompt is an interface, not a paragraph","url":"https://addaly.com/learn/building-with-ai/the-prompt-is-an-interface","api":"https://addaly.com/api/lesson/building-with-ai/the-prompt-is-an-interface","minutes":9,"keyIdea":"Write rules you could assert on, always define an explicit sentinel for I-do-not-know, and prune the prompt by deleting lines and re-running your cases, because unread instructions still bill on every call and compete with the ones that matter."},{"slug":"examples-that-teach","title":"Examples that teach, and examples that mislead","url":"https://addaly.com/learn/building-with-ai/examples-that-teach","api":"https://addaly.com/api/lesson/building-with-ai/examples-that-teach","minutes":9,"keyIdea":"Choose examples that cover the boundary rather than the typical case, balance the labels, and remember that examples fix shape and consistency but never fix missing knowledge."},{"slug":"decomposition-and-chaining","title":"One big prompt, or four small ones","url":"https://addaly.com/learn/building-with-ai/decomposition-and-chaining","api":"https://addaly.com/api/lesson/building-with-ai/decomposition-and-chaining","minutes":9,"keyIdea":"Split a prompt when the pieces need different models, different tests or a checkable intermediate, put a deterministic check between every link, and stop at three or four steps because accuracy multiplies down the chain."},{"slug":"thinking-budgets","title":"Reasoning models, thinking budgets, and when they are a waste of money","url":"https://addaly.com/learn/building-with-ai/thinking-budgets","api":"https://addaly.com/api/lesson/building-with-ai/thinking-budgets","minutes":9,"keyIdea":"Extended thinking is the model buying itself more forward passes by emitting more output tokens, so it helps when the difficulty is deciding the answer and not when the difficulty is knowing a fact or producing a format."},{"slug":"prompt-caching","title":"Prompt caching, and the ordering rule that pays for itself","url":"https://addaly.com/learn/building-with-ai/prompt-caching","api":"https://addaly.com/api/lesson/building-with-ai/prompt-caching","minutes":8,"keyIdea":"Prompt caching matches an exact byte prefix from position zero, so every static part must come before every variable part, and one timestamp near the top destroys the entire discount."},{"slug":"grounding-and-citations","title":"Making the model quote before it answers","url":"https://addaly.com/learn/building-with-ai/grounding-and-citations","api":"https://addaly.com/api/lesson/building-with-ai/grounding-and-citations","minutes":9,"keyIdea":"Require verbatim quotes before the answer and check in code that each quote appears in the passage it cites, which converts fabrication from invisible to detectable without claiming the answer is therefore true."},{"slug":"steering-refusals-and-tone","title":"Scope, refusals, and a voice that stays put","url":"https://addaly.com/learn/building-with-ai/steering-refusals-and-tone","api":"https://addaly.com/api/lesson/building-with-ai/steering-refusals-and-tone","minutes":8,"keyIdea":"Define scope as an explicit list of what the assistant does not do plus what to offer instead, express tone as constraints you could assert on, and test over-refusal as carefully as you test refusal."},{"slug":"prompts-in-version-control","title":"Prompts belong in version control","url":"https://addaly.com/learn/building-with-ai/prompts-in-version-control","api":"https://addaly.com/api/lesson/building-with-ai/prompts-in-version-control","minutes":8,"keyIdea":"A prompt is source code that ships behaviour, so version it in files, render it through a strict template that escapes your own delimiters, log the rendered bytes with the model string, and diff two versions over the same cases before switching."},{"slug":"writing-for-many-languages","title":"Building for users who do not write in one language","url":"https://addaly.com/learn/building-with-ai/writing-for-many-languages","api":"https://addaly.com/api/lesson/building-with-ai/writing-for-many-languages","minutes":9,"keyIdea":"Reply in the user's script and not merely their language, translate the query for retrieval rather than translating your instructions, and score quality separately per language because an average hides the languages you are failing."},{"slug":"when-prompting-stops-working","title":"When prompting stops working: the fine-tuning decision","url":"https://addaly.com/learn/building-with-ai/when-prompting-stops-working","api":"https://addaly.com/api/lesson/building-with-ai/when-prompting-stops-working","minutes":10,"keyIdea":"Fine-tuning teaches format, style and compression, never facts, so ask first whether the model can do the task when shown the answer, and treat a tuned model as a permanent dependency rather than a one-off project."}]},{"slug":"structure-tools-and-the-loop","title":"Structure, tools and the loop","summary":"Getting a machine-readable answer out, giving the model things it can ask you to run, and building the loop that ties them together without letting it run away.","outcome":"Design a schema and a tool surface a model can actually follow, write an agent loop with a step budget and a validated boundary at every hop, and say for each failure in that loop whether it should be retried, escalated to a human, or must stop the run.","lessons":[{"slug":"structured-output","title":"Structured output, and what a schema cannot promise","url":"https://addaly.com/learn/building-with-ai/structured-output","api":"https://addaly.com/api/lesson/building-with-ai/structured-output","minutes":7,"keyIdea":"Schemas guarantee shape, never truth: a perfectly valid object can be perfectly wrong."},{"slug":"schemas-models-can-follow","title":"Designing a schema a model can actually fill","url":"https://addaly.com/learn/building-with-ai/schemas-models-can-follow","api":"https://addaly.com/api/lesson/building-with-ai/schemas-models-can-follow","minutes":9,"keyIdea":"Flat, enum-heavy, explicitly nullable schemas with units in the field names and rules in the descriptions succeed where deeply nested ones fail, and constrained decoding guarantees the shape of a wrong answer just as firmly as a right one."},{"slug":"extraction-at-scale","title":"Extraction that runs on ten thousand documents","url":"https://addaly.com/learn/building-with-ai/extraction-at-scale","api":"https://addaly.com/api/lesson/building-with-ai/extraction-at-scale","minutes":9,"keyIdea":"Locate the region before extracting from it, verify repeating rows with arithmetic rather than prompting, and design the review queue and its override log as the actual product, because the corrections are your evaluation set and your training data."},{"slug":"tool-use","title":"Tool use: the model never runs anything","url":"https://addaly.com/learn/building-with-ai/tool-use","api":"https://addaly.com/api/lesson/building-with-ai/tool-use","minutes":8,"keyIdea":"The model can only ask for a tool call; your code runs it, so your code must authorise it."},{"slug":"designing-a-tool-surface","title":"Designing tools a model can use correctly","url":"https://addaly.com/learn/building-with-ai/designing-a-tool-surface","api":"https://addaly.com/api/lesson/building-with-ai/designing-a-tool-surface","minutes":9,"keyIdea":"Tool descriptions are the model's only interface, so shape tools around user questions rather than API endpoints, say explicitly when not to use each one, and never let identity be a parameter the model can choose."},{"slug":"what-an-agent-is","title":"What an agent actually is, and why the demos fail","url":"https://addaly.com/learn/building-with-ai/what-an-agent-is","api":"https://addaly.com/api/lesson/building-with-ai/what-an-agent-is","minutes":8,"keyIdea":"An agent is a loop with a step budget; reliability multiplies, so short chains beat clever ones."},{"slug":"writing-the-agent-loop","title":"Writing the loop, with the stopping conditions","url":"https://addaly.com/learn/building-with-ai/writing-the-agent-loop","api":"https://addaly.com/api/lesson/building-with-ai/writing-the-agent-loop","minutes":10,"keyIdea":"An agent loop needs three independent budgets (steps, cost and wall clock) because context growth makes cost quadratic in run length, and it must sort every failure into recoverable, retryable or fatal, since handing a permission denial back to the model turns it into a search for a way around your access control."},{"slug":"mcp-and-tool-protocols","title":"MCP: what a tool protocol buys you, and what it costs","url":"https://addaly.com/learn/building-with-ai/mcp-and-tool-protocols","api":"https://addaly.com/api/lesson/building-with-ai/mcp-and-tool-protocols","minutes":9,"keyIdea":"MCP standardises tool discovery so capabilities become a deployment concern rather than a code change, at the cost of a new trust boundary: server-supplied descriptions enter your prompt and can change after you approved them."},{"slug":"running-code-safely","title":"Letting a model run code without letting it run your machine","url":"https://addaly.com/learn/building-with-ai/running-code-safely","api":"https://addaly.com/api/lesson/building-with-ai/running-code-safely","minutes":9,"keyIdea":"A code tool is a shell rather than a tool, so isolate it in a disposable container with no network and no credentials, and always show the generated code beside the result because inspectable working is the only real check on it."},{"slug":"multi-agent-when-worth-it","title":"Multiple agents, and the honest cost","url":"https://addaly.com/learn/building-with-ai/multi-agent-when-worth-it","api":"https://addaly.com/api/lesson/building-with-ai/multi-agent-when-worth-it","minutes":9,"keyIdea":"The real benefit of multiple agents is context isolation and parallelism on genuinely independent subtasks, paid for with roughly an order of magnitude more tokens, lossy summaries at each boundary and ordinary concurrency bugs."},{"slug":"human-in-the-loop-handoff","title":"Approval gates, undo, and handing over to a person","url":"https://addaly.com/learn/building-with-ai/human-in-the-loop-handoff","api":"https://addaly.com/api/lesson/building-with-ai/human-in-the-loop-handoff","minutes":8,"keyIdea":"Gate on reversibility rather than importance, put the gate in the tool where the model cannot argue past it, and watch the approval and override rates because a gate approved 99% of the time is theatre."}]},{"slug":"retrieval-and-the-knowledge-problem","title":"Retrieval and the knowledge problem","summary":"A model knows what was in its training data and what is in its context window, and nothing else. This block is about filling the window well: what an embedding actually measures, which model to use and how to test it, where to store vectors and when you need no database at all, why keyword search is still half the answer, reranking, rewriting the question, the ingestion work that decides everything, permissions and freshness, and when a long context window makes the whole pipeline unnecessary.","outcome":"Build a retrieval pipeline from raw documents to a ranked set of chunks (embed, index, fuse with keyword search, rerank, filter by permission) measure its recall on a gold set of your own questions, and say from cost and quality numbers whether a given corpus should be retrieved or simply placed in the context window.","lessons":[{"slug":"retrieval-that-helps","title":"Retrieval: what it fixes and what it does not","url":"https://addaly.com/learn/building-with-ai/retrieval-that-helps","api":"https://addaly.com/api/lesson/building-with-ai/retrieval-that-helps","minutes":8,"keyIdea":"Retrieval decides what the model can know; when RAG fails, it is usually search that failed."},{"slug":"embeddings-what-the-numbers-mean","title":"What an embedding is, and what \"close\" actually means","url":"https://addaly.com/learn/building-with-ai/embeddings-what-the-numbers-mean","api":"https://addaly.com/api/lesson/building-with-ai/embeddings-what-the-numbers-mean","minutes":10,"keyIdea":"An embedding's closeness means only what the model's training pairs meant by closeness, so similarity thresholds are model-specific, exact identifiers blur, negation nearly vanishes, and calibrating on your own data is the step that cannot be skipped."},{"slug":"chunking-and-embeddings","title":"Chunking and embeddings in practice","url":"https://addaly.com/learn/building-with-ai/chunking-and-embeddings","api":"https://addaly.com/api/lesson/building-with-ai/chunking-and-embeddings","minutes":8,"keyIdea":"Embeddings rank what a chunk is about, not whether it answers you, so rerank before trusting the top hit."},{"slug":"choosing-an-embedding-model","title":"Choosing an embedding model: dimensions, languages and the leaderboard trap","url":"https://addaly.com/learn/building-with-ai/choosing-an-embedding-model","api":"https://addaly.com/api/lesson/building-with-ai/choosing-an-embedding-model","minutes":9,"keyIdea":"Shortlist embedding models from the leaderboard but choose on recall over your own fifty queries, and check the embedder's context limit before anything else, because a chunk longer than that limit is silently cut and the cut half is never searched."},{"slug":"vector-search-without-a-vector-database","title":"Vector search: when NumPy is enough, and what an index trades away","url":"https://addaly.com/learn/building-with-ai/vector-search-without-a-vector-database","api":"https://addaly.com/api/lesson/building-with-ai/vector-search-without-a-vector-database","minutes":9,"keyIdea":"Below about a million vectors a brute-force dot product on a CPU is exact and fast enough, and above it an approximate index buys speed by giving up a measurable fraction of recall, which you must measure against exact results rather than assume away."},{"slug":"hybrid-search-keywords-still-win","title":"Hybrid search: why keyword search is still half the answer","url":"https://addaly.com/learn/building-with-ai/hybrid-search-keywords-still-win","api":"https://addaly.com/api/lesson/building-with-ai/hybrid-search-keywords-still-win","minutes":9,"keyIdea":"Embeddings blur exact strings and keyword search cannot see paraphrase, so a production search runs both and fuses them by rank rather than score, because BM25 and cosine scores live on scales that cannot be added."},{"slug":"reranking-and-how-many-chunks","title":"Reranking, and how many chunks to actually send","url":"https://addaly.com/learn/building-with-ai/reranking-and-how-many-chunks","api":"https://addaly.com/api/lesson/building-with-ai/reranking-and-how-many-chunks","minutes":9,"keyIdea":"A cross-encoder reads the query and passage together and so can judge whether the passage answers the question, which a bi-encoder's separate vectors never can, and the number of chunks you then send is a measured trade between recall, distraction and tokens per query rather than \"as many as fit\"."},{"slug":"rewriting-the-question","title":"Rewriting the question before you search it","url":"https://addaly.com/learn/building-with-ai/rewriting-the-question","api":"https://addaly.com/api/lesson/building-with-ai/rewriting-the-question","minutes":9,"keyIdea":"The text a user typed is rarely the best search query, because follow-up turns omit the topic, terse questions omit the vocabulary and mixed-language questions miss the corpus, so a cheap rewriting call before retrieval (condensing, expanding, decomposing or extracting filters) is usually the largest single improvement available."},{"slug":"ingestion-pdfs-tables-and-scans","title":"Ingestion: PDFs, tables and scans, where most retrieval actually fails","url":"https://addaly.com/learn/building-with-ai/ingestion-pdfs-tables-and-scans","api":"https://addaly.com/api/lesson/building-with-ai/ingestion-pdfs-tables-and-scans","minutes":10,"keyIdea":"Most retrieval failures are ingestion failures (interleaved columns, repeated headers, tables flattened into rows that have lost their column names, OCR noise and chunks cut from their headings) and the first diagnostic is always to read twenty chunks with your own eyes."},{"slug":"permissions-freshness-and-metadata","title":"Permissions, freshness and metadata: the boring half that leaks data","url":"https://addaly.com/learn/building-with-ai/permissions-freshness-and-metadata","api":"https://addaly.com/api/lesson/building-with-ai/permissions-freshness-and-metadata","minutes":9,"keyIdea":"An index is a copy of every document with its access controls stripped off, so permissions must travel with each chunk and be enforced by your query code, never by an instruction to the model, and deletions must reach every index and cache or the document lives on."},{"slug":"long-context-instead-of-retrieval","title":"Long context instead of retrieval: the arithmetic of skipping the pipeline","url":"https://addaly.com/learn/building-with-ai/long-context-instead-of-retrieval","api":"https://addaly.com/api/lesson/building-with-ai/long-context-instead-of-retrieval","minutes":9,"keyIdea":"A million-token window can replace a retrieval pipeline for a small, stable corpus, and whether it should is decided by arithmetic (tokens per query times queries per day, with and without prompt caching) plus a measured check of multi-fact accuracy, not by the size of the window."}]},{"slug":"conversation-memory-and-the-interface","title":"Conversation, memory and the interface","summary":"The single call from the first module has no memory and no screen. This block builds both: where a conversation's state lives and how it is trimmed, how to condense a long history without losing the fact that mattered, what to keep across sessions and what a user must be able to see and delete, when to ask a question instead of guessing, the parts of a chat interface that are load-bearing, voice in and out within a latency budget, AI placed inside an existing screen rather than a chat box, the pipeline behind a file upload, and what the feedback buttons actually measure.","outcome":"Build the stateful, user-facing half of an AI feature: a conversation store with a trimming and compaction policy, cross-session memory a user can inspect and delete, clarifying questions only where they pay for themselves, a chat or inline interface whose controls match what the model can and cannot do, a voice path with a stated latency budget, an upload pipeline with limits, and feedback capture whose numbers you can interpret rather than merely collect.","lessons":[{"slug":"where-the-conversation-lives","title":"Where the conversation lives","url":"https://addaly.com/learn/building-with-ai/where-the-conversation-lives","api":"https://addaly.com/api/lesson/building-with-ai/where-the-conversation-lives","minutes":9,"keyIdea":"Because the API forgets everything between calls, the conversation is your data structure, and the client that sends it is an untrusted party: store history server-side, trim by token budget without ever splitting a tool call from its result, and let nothing in the history carry authority."},{"slug":"compacting-history","title":"Compacting history: sliding windows, summaries and what gets lost","url":"https://addaly.com/learn/building-with-ai/compacting-history","api":"https://addaly.com/api/lesson/building-with-ai/compacting-history","minutes":9,"keyIdea":"A summary of dropped turns keeps a long conversation coherent but loses specifics by its nature (numbers, exact wording, negations) so hard constraints and facts the user stated must be extracted into a separate list that is appended and never summarised."},{"slug":"memory-across-sessions","title":"Memory across sessions, and what a user must be able to see","url":"https://addaly.com/learn/building-with-ai/memory-across-sessions","api":"https://addaly.com/api/lesson/building-with-ai/memory-across-sessions","minutes":10,"keyIdea":"Cross-session memory turns conversations into a profile, so it must be extracted only from the user's own words and never from documents or tool results, restricted to categories you chose in advance, and visible and deletable by the user, because a remembered instruction is a persistent injection and a remembered inference is personal data nobody consented to."},{"slug":"asking-instead-of-guessing","title":"Asking instead of guessing: clarifying questions, slot filling and when a form beats a chat","url":"https://addaly.com/learn/building-with-ai/asking-instead-of-guessing","api":"https://addaly.com/api/lesson/building-with-ai/asking-instead-of-guessing","minutes":8,"keyIdea":"A model's default is to resolve ambiguity by guessing, so decide explicitly when a missing detail changes the action and cannot be safely defaulted, ask then, one question at a time, and otherwise state the assumption aloud, and recognise that fixed, structured input is a form's job, not a conversation's."},{"slug":"the-chat-interface-honestly","title":"The chat interface: the controls that are load-bearing","url":"https://addaly.com/learn/building-with-ai/the-chat-interface-honestly","api":"https://addaly.com/api/lesson/building-with-ai/the-chat-interface-honestly","minutes":9,"keyIdea":"The text box is the trivial part of a chat interface; what matters is that every control tells the truth about the model: a stop button that cancels the upstream request, edits that branch the history, visible tool calls and sources, sanitised rendering of untrusted output, and an AI disclosure on the surface itself."},{"slug":"voice-in-and-out","title":"Voice in and out: transcription, speech and the latency budget","url":"https://addaly.com/learn/building-with-ai/voice-in-and-out","api":"https://addaly.com/api/lesson/building-with-ai/voice-in-and-out","minutes":9,"keyIdea":"A voice assistant is a cascade of endpointing, transcription, generation and speech whose delays add up, so a reply that feels natural comes from streaming every stage (partial transcripts, a model prompted for spoken register, and speech started on the first sentence) rather than from any one faster component."},{"slug":"ai-inside-the-existing-ui","title":"AI inside the existing screen: ghost text, drafts and the acceptance rate","url":"https://addaly.com/learn/building-with-ai/ai-inside-the-existing-ui","api":"https://addaly.com/api/lesson/building-with-ai/ai-inside-the-existing-ui","minutes":8,"keyIdea":"Most AI features belong inside the screen the user is already on (a proposed completion, a draft in the field, a summary at the top) where the model proposes and the person disposes, the cost is driven by call count rather than call size, and acceptance and edit distance replace thumbs as the measure."},{"slug":"handling-uploads","title":"Handling uploads: the pipeline behind \"attach a file\"","url":"https://addaly.com/learn/building-with-ai/handling-uploads","api":"https://addaly.com/api/lesson/building-with-ai/handling-uploads","minutes":8,"keyIdea":"An attached file is an unvalidated request, an untrusted document and a piece of personal data at once, so it needs a type check by content, a route decided by size (into context or into retrieval) a delimited place in the prompt where its text is data, and a deletion that reaches every derived artefact, not just the original."},{"slug":"feedback-signals-and-what-they-measure","title":"Thumbs up, thumbs down, and what the buttons actually measure","url":"https://addaly.com/learn/building-with-ai/feedback-signals-and-what-they-measure","api":"https://addaly.com/api/lesson/building-with-ai/feedback-signals-and-what-they-measure","minutes":8,"keyIdea":"Feedback buttons are clicked on a few per cent of responses by people who are not representative, so treat them as a source of cases for review rather than a metric, prefer implicit signals that cover every response, and never optimise a model towards thumbs-up directly, because the shortest route to approval is agreement."}]},{"slug":"evaluating-and-iterating","title":"Evaluating and iterating","summary":"A prompt change is a code change, and an earlier lesson said so. This block makes that practical for the person shipping the feature rather than the person studying measurement: the first fifty cases and where they come from, cheap assertions before any judge, a model judge you have checked against people, retrieval measured on its own, a harness that runs in CI without going red at random, traces complete enough to debug from, a weekly error-analysis habit, and a release that a number can stop.","outcome":"Stand up an evaluation loop for a feature you own (a fifty-case set with provenance, deterministic assertions, a calibrated model judge with a stated agreement figure, a separate retrieval recall number, a CI harness with a threshold that tolerates a stochastic model, per-request traces, and a staged release with a stopping metric) and use it to decide whether a change ships.","lessons":[{"slug":"evaluating-your-feature","title":"Evaluating your own AI feature","url":"https://addaly.com/learn/building-with-ai/evaluating-your-feature","api":"https://addaly.com/api/lesson/building-with-ai/evaluating-your-feature","minutes":8,"keyIdea":"A prompt change is a code change; if you cannot re-run fifty saved cases, you are guessing."},{"slug":"the-first-fifty-cases","title":"The first fifty cases, and where they come from","url":"https://addaly.com/learn/building-with-ai/the-first-fifty-cases","api":"https://addaly.com/api/lesson/building-with-ai/the-first-fifty-cases","minutes":8,"keyIdea":"An evaluation set for a feature is fifty cases with provenance (drawn from logs, from failures, and from the specification in roughly equal parts) each with an expectation precise enough to check by code or rubric, kept in version control beside the prompt it tests."},{"slug":"assertions-before-judges","title":"Assertions before judges: the checks that cost nothing","url":"https://addaly.com/learn/building-with-ai/assertions-before-judges","api":"https://addaly.com/api/lesson/building-with-ai/assertions-before-judges","minutes":8,"keyIdea":"Most regressions in an AI feature are caught by deterministic checks (schema validity, forbidden strings, resolvable citations, length, language, code that runs, cost and latency bounds) which cost nothing per run and fail for a stated reason, so they go underneath any model judge, never instead of one."},{"slug":"a-judge-you-have-checked","title":"A model judge you have checked against people","url":"https://addaly.com/learn/building-with-ai/a-judge-you-have-checked","api":"https://addaly.com/api/lesson/building-with-ai/a-judge-you-have-checked","minutes":9,"keyIdea":"A model can grade your feature's answers at scale only once you have measured its agreement with human labels on a sample, written the rubric as binary criteria rather than a score, swapped the order to expose position bias, and used a different model from the one being judged."},{"slug":"measuring-retrieval-on-its-own","title":"Measuring retrieval on its own","url":"https://addaly.com/learn/building-with-ai/measuring-retrieval-on-its-own","api":"https://addaly.com/api/lesson/building-with-ai/measuring-retrieval-on-its-own","minutes":8,"keyIdea":"In a system that retrieves and then generates, a wrong answer has two possible causes, and only a gold set of question-to-chunk pairs with a recall number tells you which, so build that set of forty questions in an afternoon and report retrieval and generation failures separately."},{"slug":"the-harness-in-ci","title":"The harness in CI, and why temperature zero is not deterministic","url":"https://addaly.com/learn/building-with-ai/the-harness-in-ci","api":"https://addaly.com/api/lesson/building-with-ai/the-harness-in-ci","minutes":9,"keyIdea":"A model at temperature zero still returns different tokens on different runs, because GPU arithmetic under batching is not bit-for-bit repeatable and providers change models under the same name, so a CI harness must judge by pass rate over repeated runs with cached responses for unchanged cases, or it goes red at random and gets switched off."},{"slug":"traces-you-can-debug-from","title":"Traces you can debug from","url":"https://addaly.com/learn/building-with-ai/traces-you-can-debug-from","api":"https://addaly.com/api/lesson/building-with-ai/traces-you-can-debug-from","minutes":9,"keyIdea":"A wrong answer you cannot reproduce is diagnosable only from a trace that recorded, at the time, the prompt version, the retrieved ids and scores, every tool call with its arguments and result, and the usage and latency per stage, and because that trace is a copy of the user's words, it needs a retention rule and a deletion path of its own."},{"slug":"error-analysis-as-a-weekly-habit","title":"Error analysis as a weekly habit","url":"https://addaly.com/learn/building-with-ai/error-analysis-as-a-weekly-habit","api":"https://addaly.com/api/lesson/building-with-ai/error-analysis-as-a-weekly-habit","minutes":8,"keyIdea":"One person reading fifty failures a week and labelling each with a root cause from a short fixed list produces the only number that tells you which stage to work on next, turns every failure into a regression case, and keeps a team from fixing examples when the fault is a class."},{"slug":"shipping-a-change-that-can-be-stopped","title":"Shipping a change that can be stopped","url":"https://addaly.com/learn/building-with-ai/shipping-a-change-that-can-be-stopped","api":"https://addaly.com/api/lesson/building-with-ai/shipping-a-change-that-can-be-stopped","minutes":8,"keyIdea":"A prompt or model change goes out behind a flag, is run in shadow against real traffic first, then reaches a sticky canary slice with a stopping metric decided in advance, because the evaluation set catches small regressions and the canary catches disasters, and neither does the other's job."}]},{"slug":"safety-security-and-the-adversary","title":"Safety, security and the adversary","summary":"The failure-modes lesson said that text you did not write is data. This block is what follows from taking that seriously once real people, some of them hostile, are on the other end: how injection actually works and why filters for it fail, the channels through which a model leaks what it was shown, model output as untrusted input to everything downstream, moderation before and after the model, what you send to a provider and what you can verify about it, attacks on your bill, reducing hallucination by mechanism rather than instruction, attacking your own feature before someone else does, and the disclosures the law is beginning to require.","outcome":"Threat-model an AI feature and defend it by architecture: name every channel by which untrusted text reaches the model and every channel by which its output reaches a privileged action or the outside world, restrict each with a control that does not depend on the model's obedience, layer moderation and abstention with measured false-positive costs, and state plainly what a user must be told and what you cannot promise about a provider's handling of their data.","lessons":[{"slug":"designing-for-failure","title":"The failure modes to design for","url":"https://addaly.com/learn/building-with-ai/designing-for-failure","api":"https://addaly.com/api/lesson/building-with-ai/designing-for-failure","minutes":9,"keyIdea":"Text you did not write is data; it must never be able to trigger a privileged action."},{"slug":"how-prompt-injection-actually-works","title":"How prompt injection actually works, and why filters for it fail","url":"https://addaly.com/learn/building-with-ai/how-prompt-injection-actually-works","api":"https://addaly.com/api/lesson/building-with-ai/how-prompt-injection-actually-works","minutes":10,"keyIdea":"A language model has no privilege separation in its input (system prompt, user message and a retrieved web page are all tokens of equal standing) so an instruction in untrusted text competes with yours on merit, pattern filters fail by paraphrase, and the only defences that hold are limits on what the model can do and a human between it and anything that matters."},{"slug":"the-channels-that-leak","title":"The channels that leak: how a model sends data out","url":"https://addaly.com/learn/building-with-ai/the-channels-that-leak","api":"https://addaly.com/api/lesson/building-with-ai/the-channels-that-leak","minutes":9,"keyIdea":"A model leaks what it was shown through whatever exit exists (an image tag it writes, a link it offers, a tool it calls with attacker-shaped arguments, a record it stores) so the defence is to enumerate every exit and close or gate each one, because the trifecta of private data, untrusted content and an open exit cannot be made safe by filtering."},{"slug":"model-output-as-untrusted-input","title":"Model output as untrusted input to everything downstream","url":"https://addaly.com/learn/building-with-ai/model-output-as-untrusted-input","api":"https://addaly.com/api/lesson/building-with-ai/model-output-as-untrusted-input","minutes":9,"keyIdea":"Whatever the model writes (HTML, SQL, a shell command, a file path, code) is untrusted input to the system that consumes it, and the classic web defences apply unchanged: sanitise before rendering, parameterise and restrict before querying, sandbox before executing, and never let generated text choose a path or a privilege."},{"slug":"moderation-before-and-after","title":"Moderation before and after the model","url":"https://addaly.com/learn/building-with-ai/moderation-before-and-after","api":"https://addaly.com/api/lesson/building-with-ai/moderation-before-and-after","minutes":9,"keyIdea":"A moderation layer is cheap classifiers on the input and the output, arranged so that rules and small models handle the clear cases and a large model handles only the grey zone, with false-positive rates measured on your own traffic, and with distress routed to support rather than to a block, because a refusal is the wrong answer to a person in trouble."},{"slug":"what-you-send-to-the-provider","title":"What you send to the provider, and what you can actually verify","url":"https://addaly.com/learn/building-with-ai/what-you-send-to-the-provider","api":"https://addaly.com/api/lesson/building-with-ai/what-you-send-to-the-provider","minutes":9,"keyIdea":"Every request is a disclosure of your prompt, your users' words and your customers' documents to a third party whose retention and training terms you can read but not audit, so minimise what leaves (redact, pseudonymise, strip) and tell users only what you know to be true."},{"slug":"denial-of-wallet","title":"Denial of wallet: attacks on your bill","url":"https://addaly.com/learn/building-with-ai/denial-of-wallet","api":"https://addaly.com/api/lesson/building-with-ai/denial-of-wallet","minutes":8,"keyIdea":"A public endpoint that calls a paid model can be made to spend a thousand dollars an hour by one script, so the defences (authentication before the model, per-user token budgets claimed before the call, caps on input and output, a spend alert and a kill switch) are part of the feature, not an operational afterthought."},{"slug":"reducing-hallucination-by-mechanism","title":"Reducing hallucination by mechanism, not by instruction","url":"https://addaly.com/learn/building-with-ai/reducing-hallucination-by-mechanism","api":"https://addaly.com/api/lesson/building-with-ai/reducing-hallucination-by-mechanism","minutes":9,"keyIdea":"Telling a model not to hallucinate does nothing measurable because it cannot tell which of its outputs are unsupported, so the rate is lowered by mechanisms (better retrieval, abstention below a score, claims that must cite and are checked against their source, constrained output) and it goes down, not to zero, which decides where a person must sign."},{"slug":"red-teaming-your-own-feature","title":"Red-teaming your own feature before someone else does","url":"https://addaly.com/learn/building-with-ai/red-teaming-your-own-feature","api":"https://addaly.com/api/lesson/building-with-ai/red-teaming-your-own-feature","minutes":9,"keyIdea":"An afternoon spent attacking your own feature through every input channel (with a fixed category list, a severity grid and free automated probes) finds the failures before users do, and the findings become harness cases; assume the system prompt is public, and fix the blast radius where a refusal cannot be made perfect."},{"slug":"disclosure-consent-and-the-law-as-it-stands","title":"Disclosure, consent and the law as it stands","url":"https://addaly.com/learn/building-with-ai/disclosure-consent-and-the-law-as-it-stands","api":"https://addaly.com/api/lesson/building-with-ai/disclosure-consent-and-the-law-as-it-stands","minutes":10,"keyIdea":"The law on AI features differs by country and is still being written, but a set of minimums is safe everywhere (say it is AI on the surface, get specific consent for data use, offer a route to a person, make deletion real, keep records) while liability for wrong answers and copyright of outputs remain unresolved and must be presented as such."}]},{"slug":"cost-latency-and-running-it","title":"Cost, latency and running it in production","summary":"The first module priced a single call. This block prices a feature and keeps it running: the full cost model per thousand users, where the milliseconds go and which ones users feel, caching at three levels, the batch window at half price, routing between models by difficulty, the break-even arithmetic of running your own inference, rate limits in both directions, what breaks when a provider goes down or you switch, model deprecations and the pinning problem, and one feature walked from an empty repository to launch with every number filled in.","outcome":"Produce a cost and latency budget for an AI feature at a stated scale, defend each line of it with a measurement, and operate the feature through a provider outage, a model deprecation and a tenfold traffic increase without an unplanned bill or an unplanned outage.","lessons":[{"slug":"the-cost-model-of-a-feature","title":"The cost model of a feature, line by line","url":"https://addaly.com/learn/building-with-ai/the-cost-model-of-a-feature","api":"https://addaly.com/api/lesson/building-with-ai/the-cost-model-of-a-feature","minutes":9,"keyIdea":"A feature's cost is calls per user per day times tokens per call, split into cached input, uncached input and output at their three different prices, plus the fixed costs of indexing and evaluation, and once written as a spreadsheet, one variable usually dominates and that is the one to engineer."},{"slug":"where-the-milliseconds-go","title":"Where the milliseconds go","url":"https://addaly.com/learn/building-with-ai/where-the-milliseconds-go","api":"https://addaly.com/api/lesson/building-with-ai/where-the-milliseconds-go","minutes":9,"keyIdea":"A user feels time to first token and total time, and each is a sum of stages you can measure from traces (network, retrieval, reranking, the model's prefill, its generation, and a full extra round trip for every tool call) so the cheapest wins are prefix caching, a smaller model for the first token, parallel tools and streaming, not a faster provider."},{"slug":"caching-at-three-levels","title":"Caching at three levels: exact, prefix and semantic","url":"https://addaly.com/learn/building-with-ai/caching-at-three-levels","api":"https://addaly.com/api/lesson/building-with-ai/caching-at-three-levels","minutes":9,"keyIdea":"Three caches do three different jobs (an exact-match response cache for repeated requests, the provider's prefix cache for repeated context, and a semantic cache that serves similar questions and is the one that can return a wrong answer) and every cache must be keyed on prompt version, model and corpus version, and must never serve one user's content to another."},{"slug":"the-batch-window","title":"The batch window: half price for anything that can wait","url":"https://addaly.com/learn/building-with-ai/the-batch-window","api":"https://addaly.com/api/lesson/building-with-ai/the-batch-window","minutes":8,"keyIdea":"Providers sell a batch endpoint at around half the interactive price in exchange for results within a day rather than seconds, so every model call that is not a person waiting (classification, backfills, evaluation runs, embedding, summaries) belongs in a queue that drains through it, with idempotent items and per-item failure handling."},{"slug":"routing-and-cascades","title":"Routing and cascades: paying the high price only where it is needed","url":"https://addaly.com/learn/building-with-ai/routing-and-cascades","api":"https://addaly.com/api/lesson/building-with-ai/routing-and-cascades","minutes":9,"keyIdea":"Most requests are easy and a cheap model handles them, so a router that sends easy traffic to the small model and escalates on a measurable signal (a failed validation, a refusal, low judge confidence, a hard-intent label) cuts cost by more than half, provided the escalation rule actually fires and each route is evaluated on its own slice."},{"slug":"running-your-own-inference","title":"Running your own inference: the break-even arithmetic","url":"https://addaly.com/learn/building-with-ai/running-your-own-inference","api":"https://addaly.com/api/lesson/building-with-ai/running-your-own-inference","minutes":9,"keyIdea":"Self-hosted inference is priced by the GPU hour, not the token, so its cost per million tokens is the hourly price divided by throughput times utilisation, and at the bursty, daytime utilisation most products have, a rented card costs several times the per-token price of the same open model from an API, unless data, capability or sustained load forces the choice."},{"slug":"rate-limits-in-both-directions","title":"Rate limits in both directions","url":"https://addaly.com/learn/building-with-ai/rate-limits-in-both-directions","api":"https://addaly.com/api/lesson/building-with-ai/rate-limits-in-both-directions","minutes":8,"keyIdea":"The provider limits your requests and tokens per minute by tier and raises limits only on request over days, so a feature must be planned at half its allowance to survive bursts, must throttle itself client-side rather than discover the limit through 429s, and must set its own ceiling for users below the provider's so that refusals are yours, clear and recoverable."},{"slug":"outages-and-switching-providers","title":"Outages, fallbacks and what does not port","url":"https://addaly.com/learn/building-with-ai/outages-and-switching-providers","api":"https://addaly.com/api/lesson/building-with-ai/outages-and-switching-providers","minutes":9,"keyIdea":"A fallback to a second provider must be tested by deliberately breaking the primary, because tool-call formats, structured-output modes, tokenisers, stop reasons and prompt behaviour all differ beneath any abstraction layer, and because falling back also sends user data to another company, the privacy notice must already name it."},{"slug":"deprecations-and-the-pinning-problem","title":"Deprecations and the pinning problem","url":"https://addaly.com/learn/building-with-ai/deprecations-and-the-pinning-problem","api":"https://addaly.com/api/lesson/building-with-ai/deprecations-and-the-pinning-problem","minutes":8,"keyIdea":"An undated model alias changes behaviour silently whenever the provider ships a new version, and dated snapshots retire on a published schedule, so production pins a snapshot, a quarterly check reads the deprecation page, and every upgrade goes through the harness, shadow and canary before the provider's date forces it."},{"slug":"one-feature-end-to-end","title":"One feature, end to end, with every number filled in","url":"https://addaly.com/learn/building-with-ai/one-feature-end-to-end","api":"https://addaly.com/api/lesson/building-with-ai/one-feature-end-to-end","minutes":12,"keyIdea":"A support-triage assistant for a small company, built with every lesson in this course, costs about a hundred dollars a month, drafts a reply before the agent opens the ticket, and is bounded against injection not by any prompt but by having no tool that can act, and the walk-through shows which lessons were used and which features were deliberately left out."}]}]},{"slug":"ai-at-work","title":"AI at Work","tagline":"The tasks it genuinely helps with, the ones it quietly ruins, and the line you must never cross.","description":"Eight modules and seventy-three lessons on using AI in a real job, without pretending it is magic and without pretending it is useless. Written for accountants, teachers, nurses, lawyers, shopkeepers, marketers and civil servants anywhere in the world. Covers which of your tasks AI is actually good at, how to draft and summarise well, working with your own documents and spreadsheets, meetings and email, the confidentiality lines you must never cross, how to check work you are accountable for, and how to talk about all of this with a sceptical team.","level":"beginner","track":"work","url":"https://addaly.com/learn/ai-at-work","lessons":73,"minutes":663,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-at-work.pdf","pages":414,"bytes":4533762,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-at-work.pdf","cover":"https://addaly.com/textbooks/look/ai-at-work/1.webp?v=2026-10-07-4533762"},"film":null,"modules":[{"slug":"deciding-what-to-hand-over","title":"Deciding what to hand over","summary":"Before any prompt, there is a decision: which of the things you do this week should touch AI at all. This block gives you a sorting rule you can apply to your own job, the evidence on where the help is real and where it reverses, and the mechanism behind the failure that keeps catching careful professionals.","outcome":"Audit a week of your own work and place each recurring task into hand over, assist or never, defending each placement by where the truth lives, what a wrong answer costs, and what checking costs.","lessons":[{"slug":"the-shape-of-the-work","title":"What it is actually good at","url":"https://addaly.com/learn/ai-at-work/the-shape-of-the-work","api":"https://addaly.com/api/lesson/ai-at-work/the-shape-of-the-work","minutes":8,"keyIdea":"If you did not supply the facts, treat every fact it returns as unverified: fluency is not evidence."},{"slug":"what-it-is-doing-when-it-answers","title":"What it is actually doing when it answers you","url":"https://addaly.com/learn/ai-at-work/what-it-is-doing-when-it-answers","api":"https://addaly.com/api/lesson/ai-at-work/what-it-is-doing-when-it-answers","minutes":10,"keyIdea":"The model only predicts the next fragment of text, so it has no memory, no clock, no calculator and no register of what it does not know, and every characteristic failure follows from one of those absences."},{"slug":"the-context-window","title":"The context window, and why a long chat gets worse","url":"https://addaly.com/learn/ai-at-work/the-context-window","api":"https://addaly.com/api/lesson/ai-at-work/the-context-window","minutes":9,"keyIdea":"Every turn resends the entire conversation, so instructions given early can be truncated away, attention is weakest in the middle, and cost grows with the square of the chat's length, which is why one task should mean one conversation."},{"slug":"the-task-audit","title":"The task audit","url":"https://addaly.com/learn/ai-at-work/the-task-audit","api":"https://addaly.com/api/lesson/ai-at-work/the-task-audit","minutes":9,"keyIdea":"Adoption happens task by task, not tool by tool, and any task where checking the output costs more than doing the work yourself is not a candidate, however good the draft looks."},{"slug":"the-jagged-frontier","title":"What the studies actually found","url":"https://addaly.com/learn/ai-at-work/the-jagged-frontier","api":"https://addaly.com/api/lesson/ai-at-work/the-jagged-frontier","minutes":10,"keyIdea":"The measured gains are real, largest for the least experienced, and reverse on tasks just outside the tool's competence, which you cannot feel from inside the task, so you have to time it rather than trust your sense of speed."},{"slug":"why-it-invents-things","title":"Why it invents a case that does not exist","url":"https://addaly.com/learn/ai-at-work/why-it-invents-things","api":"https://addaly.com/api/lesson/ai-at-work/why-it-invents-things","minutes":10,"keyIdea":"Invention is not a malfunction but the same process that produces correct answers, so it arrives in the identical confident register, which is why you check the specifics you did not supply rather than the ones that look shaky."},{"slug":"the-cost-of-checking","title":"The check is the job","url":"https://addaly.com/learn/ai-at-work/the-cost-of-checking","api":"https://addaly.com/api/lesson/ai-at-work/the-cost-of-checking","minutes":9,"keyIdea":"Time saved is writing time minus briefing, checking and fixing, and the cost of checking depends on where the facts came from, which is why supplying the source, rather than asking from memory, is the habit that makes the arithmetic work."},{"slug":"automation-bias","title":"Why a second pair of eyes stops working","url":"https://addaly.com/learn/ai-at-work/automation-bias","api":"https://addaly.com/api/lesson/ai-at-work/automation-bias","minutes":9,"keyIdea":"Trust is calibrated to how often a tool is wrong, so raising its accuracy lowers your attention in step; and two people reading the same generated draft are anchored by the same text rather than checking independently."},{"slug":"choosing-a-tool","title":"Which tool, and what it costs","url":"https://addaly.com/learn/ai-at-work/choosing-a-tool","api":"https://addaly.com/api/lesson/ai-at-work/choosing-a-tool","minutes":9,"keyIdea":"Four product shapes exist (the chat window, the assistant inside your files, the transcriber and the code runner) and using the wrong shape for a task looks like a model failure when it is a category error."}]},{"slug":"producing-text-you-can-sign","title":"Producing text you would put your name on","summary":"Most of what a working day contains is writing something to somebody. This block turns a request into a brief, teaches the one prompting technique that outperforms every adjective, and covers the two document jobs the first version of this course skipped: writing for readers who are not you, and building a report or a deck.","outcome":"Turn a real work situation into a brief with audience, constraint, format and two samples of your own writing, then edit the result to a standard you would sign and name the two changes that made it yours.","lessons":[{"slug":"the-brief-not-the-request","title":"Write a brief, not a request","url":"https://addaly.com/learn/ai-at-work/the-brief-not-the-request","api":"https://addaly.com/api/lesson/ai-at-work/the-brief-not-the-request","minutes":9,"keyIdea":"A prompt that names the audience, the constraint, the format and what a wrong version would look like outperforms any list of style adjectives, because you are supplying the situation the model cannot see."},{"slug":"drafting-that-does-not-sound-like-a-robot","title":"Drafting, rewriting, and the tone problem","url":"https://addaly.com/learn/ai-at-work/drafting-that-does-not-sound-like-a-robot","api":"https://addaly.com/api/lesson/ai-at-work/drafting-that-does-not-sound-like-a-robot","minutes":9,"keyIdea":"Describe the situation, not the deliverable, then rewrite your own words rather than accepting generated ones."},{"slug":"examples-beat-adjectives","title":"Examples beat adjectives","url":"https://addaly.com/learn/ai-at-work/examples-beat-adjectives","api":"https://addaly.com/api/lesson/ai-at-work/examples-beat-adjectives","minutes":9,"keyIdea":"Three of your own past documents pasted in as examples control tone, structure and vocabulary far more precisely than any description of your style, because you are demonstrating the pattern instead of naming it."},{"slug":"iterating-instead-of-restarting","title":"Editing a draft instead of rolling the dice again","url":"https://addaly.com/learn/ai-at-work/iterating-instead-of-restarting","api":"https://addaly.com/api/lesson/ai-at-work/iterating-instead-of-restarting","minutes":8,"keyIdea":"Regenerating re-rolls the same prompt without recording your objection, so progress comes from instructions that name what to keep, what to change and what the change is, and from resetting the anchor to a clean base text once edits start undoing each other."},{"slug":"the-difficult-message","title":"Refusals, bad news and the message you would rather not send","url":"https://addaly.com/learn/ai-at-work/the-difficult-message","api":"https://addaly.com/api/lesson/ai-at-work/the-difficult-message","minutes":9,"keyIdea":"Preference tuning pushes the default register towards warmth and hedging, which is the exact failure mode for a refusal, so the decision goes in sentence one and the prohibitions do as much work in the brief as the instructions."},{"slug":"summarising-without-losing-the-thing-that-mattered","title":"Summarising and the missing sentence","url":"https://addaly.com/learn/ai-at-work/summarising-without-losing-the-thing-that-mattered","api":"https://addaly.com/api/lesson/ai-at-work/summarising-without-losing-the-thing-that-mattered","minutes":8,"keyIdea":"A summary's real risk is omission, not error, so name what must appear and demand it say when something is absent."},{"slug":"plain-language-and-translation","title":"Writing for readers who are not you","url":"https://addaly.com/learn/ai-at-work/plain-language-and-translation","api":"https://addaly.com/api/lesson/ai-at-work/plain-language-and-translation","minutes":10,"keyIdea":"AI is unusually good at moving a document between registers and languages, and the only safe way to use it is to check the translation backwards and to keep numbers, names and negations under your own eye."},{"slug":"slides-and-reports","title":"Reports, decks and the structure problem","url":"https://addaly.com/learn/ai-at-work/slides-and-reports","api":"https://addaly.com/api/lesson/ai-at-work/slides-and-reports","minutes":9,"keyIdea":"Decide the argument and its order yourself, then let the tool expand and format it, because a deck generated from a topic produces balanced-looking slides with no position in them."},{"slug":"using-it-as-a-critic","title":"Making it attack your work instead of writing it","url":"https://addaly.com/learn/ai-at-work/using-it-as-a-critic","api":"https://addaly.com/api/lesson/ai-at-work/using-it-as-a-critic","minutes":9,"keyIdea":"Criticism of text you supplied is the lowest-risk mode there is, but only if you refuse the yes/no question and demand a fixed number of quoted objections, because agreement is what preference training rewards."}]},{"slug":"beyond-the-first-draft","title":"Getting more out of it than a first draft","summary":"The gap between somebody who finds AI mildly useful and somebody who finds it transformative is not a better tool. It is six or seven techniques: cutting a job into steps you drive yourself, teaching a boundary with examples rather than adjectives, pinning the output to a shape you can check, making it commit to a plan you can reject, and knowing which model to reach for. This block is the craft.","outcome":"Take a task too large for one prompt, decompose it into steps whose intermediate results you can inspect, pin each step's output to a fixed shape with an explicit absence marker, and use disagreement between repeated runs to locate the parts of the answer that need your attention.","lessons":[{"slug":"decomposing-a-big-task","title":"Cutting a job into steps you can inspect","url":"https://addaly.com/learn/ai-at-work/decomposing-a-big-task","api":"https://addaly.com/api/lesson/ai-at-work/decomposing-a-big-task","minutes":9,"keyIdea":"Constraints in a single prompt are soft influences that dilute each other, so a job containing several kinds of judgement becomes several calls whose intermediate results you keep, which is what turns a wrong answer into a diagnosable one."},{"slug":"teaching-it-your-categories","title":"Teaching it a boundary it cannot guess","url":"https://addaly.com/learn/ai-at-work/teaching-it-your-categories","api":"https://addaly.com/api/lesson/ai-at-work/teaching-it-your-categories","minutes":9,"keyIdea":"Category names carry almost no information and boundary examples carry all of it, so a sorting prompt is eight to twelve edge cases plus an explicit escape route, because a model offered only three labels will return one of three labels for everything."},{"slug":"asking-for-a-shape-not-a-blob","title":"Fixing the shape of the answer","url":"https://addaly.com/learn/ai-at-work/asking-for-a-shape-not-a-blob","api":"https://addaly.com/api/lesson/ai-at-work/asking-for-a-shape-not-a-blob","minutes":8,"keyIdea":"A demonstrated output format with an explicit NOT FOUND marker and a row count turns a batch of prose into something you can sort, paste and audit, and makes the missing row, the commonest real failure, visible."},{"slug":"making-it-plan-first","title":"Make it commit to a plan you can reject","url":"https://addaly.com/learn/ai-at-work/making-it-plan-first","api":"https://addaly.com/api/lesson/ai-at-work/making-it-plan-first","minutes":8,"keyIdea":"An approved plan is cheap to reject and then conditions everything generated after it, but the written reasoning is text produced the same way as the answer, so it steers the output without explaining it."},{"slug":"the-role-prompt-and-what-it-actually-does","title":"\"You are an expert lawyer\" and what it really does","url":"https://addaly.com/learn/ai-at-work/the-role-prompt-and-what-it-actually-does","api":"https://addaly.com/api/lesson/ai-at-work/the-role-prompt-and-what-it-actually-does","minutes":8,"keyIdea":"A persona changes register without adding knowledge, which raises the apparent authority of an answer while leaving its accuracy where it was, so keep the genre or format specification and drop the biography."},{"slug":"thinking-models-and-when-they-are-worth-it","title":"Reasoning models, and when they earn their cost","url":"https://addaly.com/learn/ai-at-work/thinking-models-and-when-they-are-worth-it","api":"https://addaly.com/api/lesson/ai-at-work/thinking-models-and-when-they-are-worth-it","minutes":9,"keyIdea":"A reasoning model buys revision across interacting constraints and buys nothing on tone or drafting, and no amount of deliberation recovers knowledge the model never had: it only makes a missing fact arrive more elaborately."},{"slug":"making-it-disagree-with-itself","title":"Asking three times, and reading the disagreement","url":"https://addaly.com/learn/ai-at-work/making-it-disagree-with-itself","api":"https://addaly.com/api/lesson/ai-at-work/making-it-disagree-with-itself","minutes":8,"keyIdea":"Divergence between fresh runs of the same prompt marks where the model was effectively choosing, and is the only uncertainty signal an ordinary user gets, but convergence proves stability, never truth."},{"slug":"working-with-images","title":"Screenshots, scans and photographs of paper","url":"https://addaly.com/learn/ai-at-work/working-with-images","api":"https://addaly.com/api/lesson/ai-at-work/working-with-images","minutes":9,"keyIdea":"A vision model reads labels and proportions rather than measuring, so any number not printed in the image comes back as a confident estimate, and the frame and its metadata disclose far more than the part you were looking at."},{"slug":"talking-to-it","title":"Dictation, voice mode and who pays for the errors","url":"https://addaly.com/learn/ai-at-work/talking-to-it","api":"https://addaly.com/api/lesson/ai-at-work/talking-to-it","minutes":8,"keyIdea":"Speaking the substance and having the model organise it is both the fastest and the safest configuration, because every fact came from you, but spoken answers remove the rereading that catches errors, so voice belongs on the input side."}]},{"slug":"working-from-your-own-material","title":"Working from your own material","summary":"The moment you supply the source, the failure mode changes from invention to misreading, and misreading is something your professional judgement already catches. This block covers long documents, messy spreadsheets, recorded meetings and searched sources, and the citation discipline that holds all four together.","outcome":"Answer a real work question entirely from sources you supplied, with a quoted line and a locating reference behind every claim, and treat any claim without one as absent rather than as probably true.","lessons":[{"slug":"your-own-documents","title":"Working with your own documents","url":"https://addaly.com/learn/ai-at-work/your-own-documents","api":"https://addaly.com/api/lesson/ai-at-work/your-own-documents","minutes":9,"keyIdea":"Attaching your documents puts the truth in the text, but demand quoted citations, because general knowledge blends in invisibly."},{"slug":"how-retrieval-actually-works","title":"What \"chat with your documents\" is really doing","url":"https://addaly.com/learn/ai-at-work/how-retrieval-actually-works","api":"https://addaly.com/api/lesson/ai-at-work/how-retrieval-actually-works","minutes":10,"keyIdea":"The model sees only the handful of chunks a similarity search returned, so exact identifiers, split rules and every counting question fail structurally, and a document that fits in the context window should be pasted whole rather than retrieved from."},{"slug":"long-documents-and-notebooks","title":"Long documents, and what gets lost in the middle","url":"https://addaly.com/learn/ai-at-work/long-documents-and-notebooks","api":"https://addaly.com/api/lesson/ai-at-work/long-documents-and-notebooks","minutes":10,"keyIdea":"A long document is not read evenly (material at the start and end is retrieved far more reliably than material in the middle), so ask located questions section by section rather than one question of the whole file."},{"slug":"what-the-columns-actually-mean","title":"Before you analyse it, find out what you have","url":"https://addaly.com/learn/ai-at-work/what-the-columns-actually-mean","api":"https://addaly.com/api/lesson/ai-at-work/what-the-columns-actually-mean","minutes":9,"keyIdea":"Ask what one row is, how missing values are represented, and what each column means before any calculation, because a sentinel like -999 or a join that multiplied the rows produces a confident, precise and arbitrary answer."},{"slug":"numbers-without-being-a-numbers-person","title":"Spreadsheets and data, without being a data person","url":"https://addaly.com/learn/ai-at-work/numbers-without-being-a-numbers-person","api":"https://addaly.com/api/lesson/ai-at-work/numbers-without-being-a-numbers-person","minutes":9,"keyIdea":"Never ask AI for the answer to a calculation; ask for the formula, then test it on rows you can check by hand."},{"slug":"cleaning-a-messy-spreadsheet","title":"Cleaning a spreadsheet somebody else built","url":"https://addaly.com/learn/ai-at-work/cleaning-a-messy-spreadsheet","api":"https://addaly.com/api/lesson/ai-at-work/cleaning-a-messy-spreadsheet","minutes":10,"keyIdea":"Cleaning is where analysis is silently won or lost, so every fix runs in a new column beside the original and the count of changed rows gets checked before the original is touched."},{"slug":"charts-that-say-what-you-meant","title":"Charts, and the choices you did not make","url":"https://addaly.com/learn/ai-at-work/charts-that-say-what-you-meant","api":"https://addaly.com/api/lesson/ai-at-work/charts-that-say-what-you-meant","minutes":8,"keyIdea":"Write the one sentence the reader should leave with, ask for the chart that makes it visible, then read the chart back as a sentence, and prefer generated code over a generated image, because code shows which column was actually plotted."},{"slug":"meetings-and-the-inbox","title":"Meetings and email","url":"https://addaly.com/learn/ai-at-work/meetings-and-the-inbox","api":"https://addaly.com/api/lesson/ai-at-work/meetings-and-the-inbox","minutes":8,"keyIdea":"From a meeting, extract decisions, owners and deadlines, never the discussion, and never let AI hit send."},{"slug":"transcription-and-consent","title":"Recording, transcription and the consent question","url":"https://addaly.com/learn/ai-at-work/transcription-and-consent","api":"https://addaly.com/api/lesson/ai-at-work/transcription-and-consent","minutes":9,"keyIdea":"Transcription fails by inventing fluent sentences during silence and by attributing speech to the wrong person, and in much of the world you may not record at all without everyone's agreement, so ask first and check the transcript against the audio at the timestamps that matter."},{"slug":"research-you-can-cite","title":"Research, search and the citation that does not say that","url":"https://addaly.com/learn/ai-at-work/research-you-can-cite","api":"https://addaly.com/api/lesson/ai-at-work/research-you-can-cite","minutes":10,"keyIdea":"A search-connected tool replaces invented sources with real links attached to claims the pages may not make, so the check moves from 'does this exist' to 'open it and find the sentence'."}]},{"slug":"the-tools-on-your-desk","title":"The tools already on your desk","summary":"Most people will meet AI not in a chat window but as a feature inside the software they already open every morning: the mail client, the document editor, the search box, the notebook, the merge. Those features have their own failure modes (permissions they inherit rather than intend, searches that cannot prove absence, batches that silently lose a row) and their own free equivalents for anyone without a corporate licence.","outcome":"Set up one recurring office job (a mail triage, a document search, a two-hundred-letter merge) so that the generated part is small and checkable, the fixed part is human-written and checked once, and every batch carries a mechanical validation that a missing or unfilled field cannot survive.","lessons":[{"slug":"the-assistant-inside-your-suite","title":"The assistant that reads your files for you","url":"https://addaly.com/learn/ai-at-work/the-assistant-inside-your-suite","api":"https://addaly.com/api/lesson/ai-at-work/the-assistant-inside-your-suite","minutes":9,"keyIdea":"An in-suite assistant inherits your permissions rather than your intentions, so it makes reachable by ordinary question everything that was previously protected only by nobody knowing it was there."},{"slug":"an-inbox-that-triages-itself","title":"Triage, summarise, draft, and never send","url":"https://addaly.com/learn/ai-at-work/an-inbox-that-triages-itself","api":"https://addaly.com/api/lesson/ai-at-work/an-inbox-that-triages-itself","minutes":9,"keyIdea":"Classification is advice and must never move a message out of sight, expensive categories are deliberately over-flagged, and a once-a-day digest you read attentively beats forty suggestions you approve while thinking about something else."},{"slug":"search-across-everything-you-have","title":"Finding the document, and what search cannot tell you","url":"https://addaly.com/learn/ai-at-work/search-across-everything-you-have","api":"https://addaly.com/api/lesson/ai-at-work/search-across-everything-you-have","minutes":8,"keyIdea":"Keyword and semantic search fail in opposite directions, no search proves absence, and ranking answers which document matches your words rather than which one is currently in force, so the date check is a habit, not a setting."},{"slug":"notebooks-and-the-private-corpus","title":"Notebooks that answer only from your sources","url":"https://addaly.com/learn/ai-at-work/notebooks-and-the-private-corpus","api":"https://addaly.com/api/lesson/ai-at-work/notebooks-and-the-private-corpus","minutes":9,"keyIdea":"Source-bound tools convert invention into misreading, which your judgement can catch, but the grounding is a design rather than a proof, so a real citation attached to a claim it does not quite support is the characteristic error."},{"slug":"pdfs-forms-and-the-stack-on-your-desk","title":"PDFs, scans and the black rectangle that hides nothing","url":"https://addaly.com/learn/ai-at-work/pdfs-forms-and-the-stack-on-your-desk","api":"https://addaly.com/api/lesson/ai-at-work/pdfs-forms-and-the-stack-on-your-desk","minutes":9,"keyIdea":"Try to select the text first: a born-digital PDF can be extracted exactly with no model involved, a scan needs OCR whose errors look like errors, and a black box drawn over text leaves the text in the file."},{"slug":"templates-merge-and-the-two-hundred-letters","title":"Two hundred letters, and only one generated paragraph","url":"https://addaly.com/learn/ai-at-work/templates-merge-and-the-two-hundred-letters","api":"https://addaly.com/api/lesson/ai-at-work/templates-merge-and-the-two-hundred-letters","minutes":8,"keyIdea":"Fixed human-written text plus mechanical merge fields plus at most one generated sentence turns two hundred documents to check into one document checked once and two hundred short paragraphs you can sample: with every outlier read and a search for unfilled placeholders run over the whole batch."},{"slug":"the-ai-checkbox-in-software-you-already-pay-for","title":"The AI feature that arrived in an update","url":"https://addaly.com/learn/ai-at-work/the-ai-checkbox-in-software-you-already-pay-for","api":"https://addaly.com/api/lesson/ai-at-work/the-ai-checkbox-in-software-you-already-pay-for","minutes":9,"keyIdea":"A default-on feature in existing software is now the commonest way an organisation acquires a new recipient of its data without deciding to, so the sub-processor, retention, billing and off-switch questions are asked in writing before the evaluation on twenty real items."},{"slug":"keeping-a-record-of-what-the-machine-did","title":"Being able to explain a document six months later","url":"https://addaly.com/learn/ai-at-work/keeping-a-record-of-what-the-machine-did","api":"https://addaly.com/api/lesson/ai-at-work/keeping-a-record-of-what-the-machine-did","minutes":8,"keyIdea":"Keep the inputs, the instruction and the named human who checked it, and keep the output itself, because models and sampling change and rerunning a saved prompt does not reproduce what was sent."},{"slug":"when-the-suite-is-not-an-option","title":"The whole free stack, and what it costs you","url":"https://addaly.com/learn/ai-at-work/when-the-suite-is-not-an-option","api":"https://addaly.com/api/lesson/ai-at-work/when-the-suite-is-not-an-option","minutes":9,"keyIdea":"A local eight-billion model is close to a frontier model on rewriting, summarising supplied text, classification and extraction, and meaningfully worse on hard reasoning and broad knowledge, which happens to match the split between tasks this course endorses and tasks it warns about."}]},{"slug":"the-lines-you-do-not-cross","title":"The lines you do not cross","summary":"This is the block that protects your registration, your job and the people whose information you hold. It covers what the account tier actually changes in law, which rules bind you regardless of what the provider does, the special danger of AI in decisions about people, the free path when nothing may leave your machine, and what to do when your workplace has no policy at all.","outcome":"Decide, for any document in front of you, whether it may go into a given AI tool: naming the account tier, the setting and the professional or legal duty that makes the decision, and naming what you would use instead.","lessons":[{"slug":"what-never-goes-in-the-box","title":"What must never go into the box","url":"https://addaly.com/learn/ai-at-work/what-never-goes-in-the-box","api":"https://addaly.com/api/lesson/ai-at-work/what-never-goes-in-the-box","minutes":10,"keyIdea":"Pasting into a chatbot is disclosure to an outside party: your duty of confidentiality is breached at the moment of sending."},{"slug":"which-account-are-you-using","title":"Which account are you using, and what it changes","url":"https://addaly.com/learn/ai-at-work/which-account-are-you-using","api":"https://addaly.com/api/lesson/ai-at-work/which-account-are-you-using","minutes":9,"keyIdea":"The consumer, business and enterprise tiers of the same product differ in contract, retention and training defaults rather than in intelligence, and the tier (not the model) decides what may be typed into it."},{"slug":"the-rules-that-apply-to-you","title":"The rules that already apply to you","url":"https://addaly.com/learn/ai-at-work/the-rules-that-apply-to-you","api":"https://addaly.com/api/lesson/ai-at-work/the-rules-that-apply-to-you","minutes":10,"keyIdea":"No new AI law is needed to make most workplace misuse unlawful: data protection, confidentiality and sector regulation already bind you, and the AI-specific rules add duties around transparency and decisions about people."},{"slug":"redaction-that-actually-works","title":"Redaction that survives somebody trying","url":"https://addaly.com/learn/ai-at-work/redaction-that-actually-works","api":"https://addaly.com/api/lesson/ai-at-work/redaction-that-actually-works","minutes":9,"keyIdea":"Names are rarely the strongest identifier (a combination of ordinary details usually is), so anonymity comes from generalising the combination, and redaction must happen before anything leaves your machine, never by asking an online model to do it."},{"slug":"decisions-about-people","title":"When the decision is about a person","url":"https://addaly.com/learn/ai-at-work/decisions-about-people","api":"https://addaly.com/api/lesson/ai-at-work/decisions-about-people","minutes":10,"keyIdea":"A model trained on past decisions reproduces the pattern in them, so using it to sift people automates yesterday's discrimination at scale and hides it behind an appearance of neutrality."},{"slug":"copyright-and-who-owns-the-output","title":"Copyright, ownership, and everything that is unresolved","url":"https://addaly.com/learn/ai-at-work/copyright-and-who-owns-the-output","api":"https://addaly.com/api/lesson/ai-at-work/copyright-and-who-owns-the-output","minutes":10,"keyIdea":"Whether training was lawful, whether an output infringes, and whether anyone owns the output are three separate questions with different answers in different countries, and only the second and third normally reach your desk."},{"slug":"keeping-it-on-your-own-machine","title":"Running a model on your own machine","url":"https://addaly.com/learn/ai-at-work/keeping-it-on-your-own-machine","api":"https://addaly.com/api/lesson/ai-at-work/keeping-it-on-your-own-machine","minutes":9,"keyIdea":"An open-weight model running locally sends nothing anywhere, which makes it the honest answer for confidential text, at the price of a real and knowable quality gap on hard reasoning."},{"slug":"telling-people-you-used-it","title":"Disclosure: telling people you used it","url":"https://addaly.com/learn/ai-at-work/telling-people-you-used-it","api":"https://addaly.com/api/lesson/ai-at-work/telling-people-you-used-it","minutes":8,"keyIdea":"Disclose when the reader is paying for or relying on your personal judgement or authorship, not when the tool merely helped you produce something you fully checked and stand behind."},{"slug":"when-there-is-no-policy","title":"When your workplace has no policy","url":"https://addaly.com/learn/ai-at-work/when-there-is-no-policy","api":"https://addaly.com/api/lesson/ai-at-work/when-there-is-no-policy","minutes":9,"keyIdea":"In the absence of a policy the safe default is not abstinence but a written question and a one-page rule you propose yourself, because unwritten practice is what an incident is judged against."}]},{"slug":"the-job-you-actually-have","title":"The job you actually have","summary":"Everything so far has been general. This block applies it, trade by trade, to the work people are actually paid for: the ledger, the classroom, the ward, the file, the counter, the campaign, the van. Each lesson names what genuinely helps in that trade, the failure that catches practitioners there specifically, the duty or regulator that decides the boundary, and the free path for anyone without a licence budget.","outcome":"Produce a one-page written rule for your own trade naming three tasks you will hand over, three you will assist with, three you never will, the professional duty or regulator behind each refusal, and the free tool you would use where the material may not leave your building.","lessons":[{"slug":"finding-the-pattern-in-your-own-trade","title":"Running the method on your own trade","url":"https://addaly.com/learn/ai-at-work/finding-the-pattern-in-your-own-trade","api":"https://addaly.com/api/lesson/ai-at-work/finding-the-pattern-in-your-own-trade","minutes":8,"keyIdea":"Five questions transfer to any job (what you produce in volume, where the truth for it lives, who is harmed if it is wrong, which body has a view, and whether checking is cheaper than doing) and the person who signs is accountable for all of it, not just the parts they wrote."},{"slug":"if-you-work-in-accounts-and-finance","title":"If you work in accounts and finance","url":"https://addaly.com/learn/ai-at-work/if-you-work-in-accounts-and-finance","api":"https://addaly.com/api/lesson/ai-at-work/if-you-work-in-accounts-and-finance","minutes":10,"keyIdea":"Turning figures you established into words is the whole safe territory: nothing generative writes to the ledger, no rate or threshold comes from a model, and a variance explanation you did not establish yourself is a fabrication in a document somebody will act on."},{"slug":"if-you-teach","title":"If you teach","url":"https://addaly.com/learn/ai-at-work/if-you-teach","api":"https://addaly.com/api/lesson/ai-at-work/if-you-teach","minutes":10,"keyIdea":"You form the judgement in bullet points and the model writes the feedback paragraph, never the reverse, and a detector score is not evidence, because false positives fall hardest on non-native writers and on the students least able to contest an accusation."},{"slug":"if-you-work-in-health-and-care","title":"If you work in health and care","url":"https://addaly.com/learn/ai-at-work/if-you-work-in-health-and-care","api":"https://addaly.com/api/lesson/ai-at-work/if-you-work-in-health-and-care","minutes":10,"keyIdea":"Software intended for diagnosis, triage, prognosis or treatment is a regulated medical device wherever you practise, which places documentation and patient communication inside the usable space and clinical decisions outside it; and an error in a health record propagates forward into everything written after it."},{"slug":"if-you-work-in-law-or-compliance","title":"If you work in law or compliance","url":"https://addaly.com/learn/ai-at-work/if-you-work-in-law-or-compliance","api":"https://addaly.com/api/lesson/ai-at-work/if-you-work-in-law-or-compliance","minutes":10,"keyIdea":"Citation formats are among the most regular patterns in text, so well-formed references are trivially generated and carry no evidence of existence, and the harder second check, whether a real authority says what was claimed, is the one that gets skipped."},{"slug":"if-you-work-in-government-or-public-service","title":"If you work in government or public service","url":"https://addaly.com/learn/ai-at-work/if-you-work-in-government-or-public-service","api":"https://addaly.com/api/lesson/ai-at-work/if-you-work-in-government-or-public-service","minutes":10,"keyIdea":"A reason generated after a decision is not the reason for it, prompts held by a public authority may be disclosable under freedom of information, and counting consultation responses requires a full classified pass rather than a question to a retrieval tool."},{"slug":"if-you-run-a-shop-or-a-small-business","title":"If you run a shop or a small business","url":"https://addaly.com/learn/ai-at-work/if-you-run-a-shop-or-a-small-business","api":"https://addaly.com/api/lesson/ai-at-work/if-you-run-a-shop-or-a-small-business","minutes":10,"keyIdea":"Free tiers plus one paid seat plus a local model covers nearly everything a small business needs, and the specifics that must never be generated are product facts, substantiated claims and reviews, because the regulator asks the advertiser for evidence and does not ask who typed it."},{"slug":"if-you-work-in-marketing-or-communications","title":"If you work in marketing or communications","url":"https://addaly.com/learn/ai-at-work/if-you-work-in-marketing-or-communications","api":"https://addaly.com/api/lesson/ai-at-work/if-you-work-in-marketing-or-communications","minutes":10,"keyIdea":"The model produces the centre of the distribution and the centre is where every competitor using the same defaults has already landed, so distinctiveness comes only from material nobody else has: your interviews, your data, a specific example with a name and a date."},{"slug":"if-you-fix-things-for-a-living","title":"If you fix things for a living","url":"https://addaly.com/learn/ai-at-work/if-you-fix-things-for-a-living","api":"https://addaly.com/api/lesson/ai-at-work/if-you-fix-things-for-a-living","minutes":10,"keyIdea":"Torque figures, clearances and part numbers come from the manufacturer's documentation for that exact model and never from the model's memory, because a value drawn from a distribution of similar equipment arrives in the same confident format as a looked-up one and the consequence here is physical."}]},{"slug":"making-it-hold","title":"Making it hold, and keeping what is yours","summary":"The last block is about durability. What to do when an AI-assisted error reaches somebody, how one person's good prompt becomes a team's asset, where automation must stop and ask, how to prove honestly whether any of this helped, and, at the end, the two things worth protecting: your own position, and your own skill.","outcome":"Run a two-week trial of one AI-assisted task against a named before-and-after measure that includes checking time, and report honestly whether to keep it, change it or stop.","lessons":[{"slug":"accountable-and-persuasive","title":"Checking your own work, and talking to a sceptical boss","url":"https://addaly.com/learn/ai-at-work/accountable-and-persuasive","api":"https://addaly.com/api/lesson/ai-at-work/accountable-and-persuasive","minutes":10,"keyIdea":"Your name on the work means you vouch for every line: check hardest on specifics you did not supply."},{"slug":"when-it-goes-wrong","title":"When an error reaches somebody","url":"https://addaly.com/learn/ai-at-work/when-it-goes-wrong","api":"https://addaly.com/api/lesson/ai-at-work/when-it-goes-wrong","minutes":9,"keyIdea":"An organisation is bound by what its AI told a customer, and the recovery is the ordinary one (tell the affected person, correct the record, log the cause) never a quiet fix."},{"slug":"a-prompt-library-for-your-team","title":"Turning one good prompt into everyone's","url":"https://addaly.com/learn/ai-at-work/a-prompt-library-for-your-team","api":"https://addaly.com/api/lesson/ai-at-work/a-prompt-library-for-your-team","minutes":8,"keyIdea":"A prompt that worked is an organisational asset, and writing it down with its context and its failure notes is what turns one person's fluency into a floor everybody stands on."},{"slug":"training-your-colleagues","title":"The hour that actually changes what people do","url":"https://addaly.com/learn/ai-at-work/training-your-colleagues","api":"https://addaly.com/api/lesson/ai-at-work/training-your-colleagues","minutes":9,"keyIdea":"Show a live fabrication on the room's own work before showing anything useful, because a feature tour teaches what the tool can do and only a witnessed failure teaches when to trust it."},{"slug":"agents-and-approval-gates","title":"Automation, and where it must stop and ask","url":"https://addaly.com/learn/ai-at-work/agents-and-approval-gates","api":"https://addaly.com/api/lesson/ai-at-work/agents-and-approval-gates","minutes":10,"keyIdea":"Chaining steps multiplies error rather than adding it, so an automated sequence must pause for a human at every irreversible act: sending, paying, deleting, publishing."},{"slug":"the-bill-and-the-lock-in","title":"What it costs, and what you are tied to","url":"https://addaly.com/learn/ai-at-work/the-bill-and-the-lock-in","api":"https://addaly.com/api/lesson/ai-at-work/the-bill-and-the-lock-in","minutes":9,"keyIdea":"The largest cost is checking time rather than licences, the real lock-in is your prompts and habits rather than the model, and a twenty-item regression set is what turns \"something feels different\" into evidence when a provider updates underneath you."},{"slug":"measuring-whether-it-helped","title":"Proving whether it helped","url":"https://addaly.com/learn/ai-at-work/measuring-whether-it-helped","api":"https://addaly.com/api/lesson/ai-at-work/measuring-whether-it-helped","minutes":9,"keyIdea":"A two-week trial with a baseline, one measure that includes checking time, and a stated stopping condition produces more usable evidence than a year of enthusiasm or a year of scepticism."},{"slug":"your-own-position","title":"Applying all of this to your own job search","url":"https://addaly.com/learn/ai-at-work/your-own-position","api":"https://addaly.com/api/lesson/ai-at-work/your-own-position","minutes":9,"keyIdea":"Use it to research, to structure and to rehearse, and keep every claim in the application literally true, because the interview tests the claim and not the document."},{"slug":"keeping-your-own-skill","title":"Keeping the skill that made you useful","url":"https://addaly.com/learn/ai-at-work/keeping-your-own-skill","api":"https://addaly.com/api/lesson/ai-at-work/keeping-your-own-skill","minutes":9,"keyIdea":"Skill decays without practice, so the tool must sometimes be used as a tutor rather than a substitute, and juniors need the reps that AI is most efficient at removing."}]}]},{"slug":"maths-you-need","title":"The Maths You Actually Need","tagline":"Eight ideas that carry almost all the weight in machine learning.","description":"Most people who avoid machine learning maths were failed by a teacher, not by their own brain. This course teaches the genuine minimum: vectors, dot products, matrices, derivatives, probability, distributions, expectation, and logarithms. Every lesson connects to something a real model does: an attention score, a training step, a loss curve. No proofs, no exercises with the answers in the back, no pretending a definition is an explanation.","level":"intermediate","track":"deep","url":"https://addaly.com/learn/maths-you-need","lessons":76,"minutes":676,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/maths-you-need.pdf","pages":442,"bytes":5128395,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/maths-you-need.pdf","cover":"https://addaly.com/textbooks/look/maths-you-need/1.webp?v=2026-10-07-5128395"},"film":null,"modules":[{"slug":"vectors-and-space","title":"Vectors, and the space they live in","summary":"How a photo, a word, a date and a category all become lists of numbers, and how you measure agreement and distance between them once they are.","outcome":"Turn a real piece of data into a vector and defend the choices made, compute a length, a distance, a projection and a cosine by hand, and explain using the 1/√d rule why a similarity threshold that works in a 3-dimensional picture is meaningless in a 768-dimensional embedding space.","lessons":[{"slug":"turning-things-into-numbers","title":"Everything a model sees is numbers","url":"https://addaly.com/learn/maths-you-need/turning-things-into-numbers","api":"https://addaly.com/api/lesson/maths-you-need/turning-things-into-numbers","minutes":9,"keyIdea":"A model never sees your data, only the numbers you chose to represent it with, and information discarded in that step cannot be recovered by any amount of model capacity."},{"slug":"vector-is-a-list","title":"A vector is just a list","url":"https://addaly.com/learn/maths-you-need/vector-is-a-list","api":"https://addaly.com/api/lesson/maths-you-need/vector-is-a-list","minutes":7,"keyIdea":"A vector is an ordered list of numbers, and in a model its direction carries the meaning, not its length."},{"slug":"dot-products","title":"What a dot product measures","url":"https://addaly.com/learn/maths-you-need/dot-products","api":"https://addaly.com/api/lesson/maths-you-need/dot-products","minutes":7,"keyIdea":"A dot product scores how much two lists agree, but it also grows with their length, so normalise before you compare."},{"slug":"norms-and-distance","title":"How long, and how far","url":"https://addaly.com/learn/maths-you-need/norms-and-distance","api":"https://addaly.com/api/lesson/maths-you-need/norms-and-distance","minutes":8,"keyIdea":"A norm turns a whole vector into one number measuring size, and which norm you pick decides whether outliers dominate your answer or barely register."},{"slug":"cosine-versus-euclidean","title":"Cosine or distance, and why it often does not matter","url":"https://addaly.com/learn/maths-you-need/cosine-versus-euclidean","api":"https://addaly.com/api/lesson/maths-you-need/cosine-versus-euclidean","minutes":9,"keyIdea":"For unit-length vectors, cosine similarity and Euclidean distance are two readings of the same quantity and rank results identically, so the choice only matters when lengths differ."},{"slug":"angles-orthogonality-and-projection","title":"Projection, and the art of removing a direction","url":"https://addaly.com/learn/maths-you-need/angles-orthogonality-and-projection","api":"https://addaly.com/api/lesson/maths-you-need/angles-orthogonality-and-projection","minutes":9,"keyIdea":"Projection splits a vector into the part that lies along a chosen direction and the part that does not, which is how you both read a feature out and attempt to strip one away."},{"slug":"basis-and-coordinates","title":"The same vector, written two different ways","url":"https://addaly.com/learn/maths-you-need/basis-and-coordinates","api":"https://addaly.com/api/lesson/maths-you-need/basis-and-coordinates","minutes":8,"keyIdea":"A vector's numbers depend on the axes you chose to describe it with, which is why an individual dimension of an embedding usually means nothing on its own."},{"slug":"high-dimensional-strangeness","title":"Why your 3-D intuition is wrong in 768 dimensions","url":"https://addaly.com/learn/maths-you-need/high-dimensional-strangeness","api":"https://addaly.com/api/lesson/maths-you-need/high-dimensional-strangeness","minutes":10,"keyIdea":"In high dimensions random vectors are nearly perpendicular and all distances converge, so any similarity threshold has to be measured for your actual model rather than reasoned about from a picture."},{"slug":"sparse-dense-and-one-hot","title":"Sparse and dense, and the memory each costs","url":"https://addaly.com/learn/maths-you-need/sparse-dense-and-one-hot","api":"https://addaly.com/api/lesson/maths-you-need/sparse-dense-and-one-hot","minutes":9,"keyIdea":"Sparse representations record which items are present and dense ones record what they are like, and the arithmetic of storing each explains why serious search systems use both."}]},{"slug":"matrices-and-layers","title":"Matrices, and what a layer really does","summary":"Multiplying by hand, predicting shapes, and the three factorisations (rank, eigenvectors, singular values) that explain why a huge weight matrix can often be replaced by two small ones.","outcome":"Multiply two matrices by hand and predict the output shape of any chain of layers, explain what the rank of a weight matrix costs and buys, and use singular values to justify replacing a 4096x4096 matrix with two thin ones and to state what that replacement gives up.","lessons":[{"slug":"matrix-multiplication-by-hand","title":"Doing a matrix multiplication yourself, once","url":"https://addaly.com/learn/maths-you-need/matrix-multiplication-by-hand","api":"https://addaly.com/api/lesson/maths-you-need/matrix-multiplication-by-hand","minutes":8,"keyIdea":"Every entry of a matrix product is one dot product between a row of the left matrix and a column of the right, which is why the inner dimensions must match and why order cannot be swapped."},{"slug":"matrices-as-transformations","title":"A matrix is a stack of questions","url":"https://addaly.com/learn/maths-you-need/matrices-as-transformations","api":"https://addaly.com/api/lesson/maths-you-need/matrices-as-transformations","minutes":8,"keyIdea":"A matrix is a stack of questions, each row a dot product; without a bend between them, stacked layers collapse into one."},{"slug":"shapes-broadcasting-and-batches","title":"Shapes, batches, and the broadcasting rules","url":"https://addaly.com/learn/maths-you-need/shapes-broadcasting-and-batches","api":"https://addaly.com/api/lesson/maths-you-need/shapes-broadcasting-and-batches","minutes":9,"keyIdea":"Broadcasting silently stretches a dimension of size one to match its neighbour, which makes concise code possible and makes a whole family of bugs run without complaint."},{"slug":"identity-inverse-and-solving","title":"Undoing a matrix, and why you rarely should","url":"https://addaly.com/learn/maths-you-need/identity-inverse-and-solving","api":"https://addaly.com/api/lesson/maths-you-need/identity-inverse-and-solving","minutes":9,"keyIdea":"The inverse exists only when a matrix loses no information, and even then solving a system directly is faster and far more numerically stable than forming the inverse."},{"slug":"determinants-and-volume","title":"The determinant, and what it says about collapse","url":"https://addaly.com/learn/maths-you-need/determinants-and-volume","api":"https://addaly.com/api/lesson/maths-you-need/determinants-and-volume","minutes":8,"keyIdea":"The determinant is the factor by which a transformation multiplies volume, so a determinant of zero means dimensions were flattened away and nothing downstream can restore them."},{"slug":"least-squares-and-the-normal-equations","title":"The best fit, and what \"best\" was defined to mean","url":"https://addaly.com/learn/maths-you-need/least-squares-and-the-normal-equations","api":"https://addaly.com/api/lesson/maths-you-need/least-squares-and-the-normal-equations","minutes":9,"keyIdea":"Least squares finds the point in the space your model can reach that is closest to the data, and it does so by making the residual perpendicular to everything the model can represent."},{"slug":"rank-and-low-rank","title":"Rank, and why a huge matrix can be two small ones","url":"https://addaly.com/learn/maths-you-need/rank-and-low-rank","api":"https://addaly.com/api/lesson/maths-you-need/rank-and-low-rank","minutes":9,"keyIdea":"Rank counts the genuinely independent directions in a matrix, and when it is far below the matrix's size the matrix can be factored into two thin ones at a fraction of the parameters."},{"slug":"eigenvectors-plainly","title":"The directions a matrix does not turn","url":"https://addaly.com/learn/maths-you-need/eigenvectors-plainly","api":"https://addaly.com/api/lesson/maths-you-need/eigenvectors-plainly","minutes":9,"keyIdea":"An eigenvector is a direction a matrix only stretches rather than rotates, and the largest eigenvalue governs what happens when the matrix is applied over and over."},{"slug":"singular-values-and-svd","title":"Singular values, and the honest measure of importance","url":"https://addaly.com/learn/maths-you-need/singular-values-and-svd","api":"https://addaly.com/api/lesson/maths-you-need/singular-values-and-svd","minutes":10,"keyIdea":"Every matrix without exception factors into a rotation, a set of axis stretches, and another rotation, and the sizes of those stretches tell you exactly how much you lose by throwing each one away."}]},{"slug":"change-and-descent","title":"Change, slopes and the walk downhill","summary":"Derivatives from first principles, the chain rule, backpropagation as bookkeeping, and how to read a loss curve for whether the problem is the learning rate, the curvature or the gradient itself.","outcome":"Compute a partial derivative and a chain-rule derivative by hand, trace a gradient backwards through a two-layer network and say where the memory goes, and diagnose from a loss curve and a gradient-norm plot whether the learning rate, the curvature or a vanishing gradient is the cause.","lessons":[{"slug":"rates-of-change-before-derivatives","title":"Slope, before anyone says the word derivative","url":"https://addaly.com/learn/maths-you-need/rates-of-change-before-derivatives","api":"https://addaly.com/api/lesson/maths-you-need/rates-of-change-before-derivatives","minutes":8,"keyIdea":"A derivative is the slope between two points as you shrink the gap between them, and you can compute a usable one with two evaluations and a small number."},{"slug":"derivatives-and-descent","title":"Slopes, and why training is walking downhill","url":"https://addaly.com/learn/maths-you-need/derivatives-and-descent","api":"https://addaly.com/api/lesson/maths-you-need/derivatives-and-descent","minutes":9,"keyIdea":"A derivative says how the loss moves when you nudge one number; training just steps against it, over and over."},{"slug":"partial-derivatives-and-the-gradient","title":"Many knobs, one derivative each","url":"https://addaly.com/learn/maths-you-need/partial-derivatives-and-the-gradient","api":"https://addaly.com/api/lesson/maths-you-need/partial-derivatives-and-the-gradient","minutes":8,"keyIdea":"A partial derivative is the slope in one variable with all others frozen, and the gradient collects them into a vector that points in the direction of steepest increase."},{"slug":"the-chain-rule","title":"The chain rule, which is the whole trick","url":"https://addaly.com/learn/maths-you-need/the-chain-rule","api":"https://addaly.com/api/lesson/maths-you-need/the-chain-rule","minutes":8,"keyIdea":"When functions are nested, their rates of change multiply, which is why a network of many layers is differentiable at all and why signals can shrink or blow up as they pass back."},{"slug":"backpropagation-as-bookkeeping","title":"Backpropagation, and where the memory goes","url":"https://addaly.com/learn/maths-you-need/backpropagation-as-bookkeeping","api":"https://addaly.com/api/lesson/maths-you-need/backpropagation-as-bookkeeping","minutes":10,"keyIdea":"Backpropagation computes every gradient in one backward sweep by reusing stored forward values, which is why training memory is dominated by activations rather than by weights."},{"slug":"convexity-and-local-minima","title":"Convexity, and why nobody promises anything about deep networks","url":"https://addaly.com/learn/maths-you-need/convexity-and-local-minima","api":"https://addaly.com/api/lesson/maths-you-need/convexity-and-local-minima","minutes":9,"keyIdea":"A convex problem has one minimum that gradient descent is guaranteed to find, deep networks are not convex, and what saves them in practice is that most flat points in high dimensions are saddles rather than traps."},{"slug":"curvature-momentum-and-adam","title":"Curvature, and what the optimisers are actually doing","url":"https://addaly.com/learn/maths-you-need/curvature-momentum-and-adam","api":"https://addaly.com/api/lesson/maths-you-need/curvature-momentum-and-adam","minutes":10,"keyIdea":"The ratio between the steepest and shallowest curvature decides how badly plain gradient descent zigzags, and momentum and Adam are two cheap ways of compensating without ever computing that curvature."},{"slug":"when-gradients-vanish-or-explode","title":"Reading a training failure from the numbers","url":"https://addaly.com/learn/maths-you-need/when-gradients-vanish-or-explode","api":"https://addaly.com/api/lesson/maths-you-need/when-gradients-vanish-or-explode","minutes":9,"keyIdea":"Almost every training failure announces itself in the gradient norm, the activation statistics or the loss curve before it announces itself as a bad model, and each pattern has a specific mechanism behind it."},{"slug":"finding-the-learning-rate","title":"The one hyperparameter worth your afternoon","url":"https://addaly.com/learn/maths-you-need/finding-the-learning-rate","api":"https://addaly.com/api/lesson/maths-you-need/finding-the-learning-rate","minutes":9,"keyIdea":"The learning rate is bounded above by the sharpest curvature and below by your patience, and a single sweep across a few orders of magnitude locates the usable band faster than any amount of guessing."}]},{"slug":"probability-you-can-rely-on","title":"Probability you can rely on","summary":"Counting, conditioning, Bayes with real base rates, the distributions that describe real processes, and the specific ways an average misleads when the tail is heavy.","outcome":"Compute a posterior probability from a base rate and a classifier's error rates and explain why a 95%-accurate filter can still be wrong most times it fires, choose a distribution that matches a stated generating process, and predict from the shape of a tail when a mean is the wrong summary.","lessons":[{"slug":"counting-before-probability","title":"Counting, and the size of the spaces involved","url":"https://addaly.com/learn/maths-you-need/counting-before-probability","api":"https://addaly.com/api/lesson/maths-you-need/counting-before-probability","minutes":8,"keyIdea":"Probability is counting favourable cases over possible ones, and in language and search the possible ones outnumber anything that could ever be enumerated."},{"slug":"probability-as-belief","title":"Probability is a degree of belief","url":"https://addaly.com/learn/maths-you-need/probability-as-belief","api":"https://addaly.com/api/lesson/maths-you-need/probability-as-belief","minutes":7,"keyIdea":"A probability states a degree of belief; you judge it by calibration across many cases, never by one outcome."},{"slug":"conditional-probability","title":"Probability once you know something","url":"https://addaly.com/learn/maths-you-need/conditional-probability","api":"https://addaly.com/api/lesson/maths-you-need/conditional-probability","minutes":8,"keyIdea":"Conditioning shrinks the space of possibilities to the cases consistent with what you know, and forgetting to shrink the right one is the source of most probability errors."},{"slug":"bayes-rule-worked","title":"Bayes, done slowly, with real numbers","url":"https://addaly.com/learn/maths-you-need/bayes-rule-worked","api":"https://addaly.com/api/lesson/maths-you-need/bayes-rule-worked","minutes":10,"keyIdea":"Bayes converts a detector's error rates into the probability that a fired alarm is real, and when the thing being detected is rare, most alarms are false however good the detector is."},{"slug":"independence-and-correlation","title":"Correlation, dependence, and the gap between them","url":"https://addaly.com/learn/maths-you-need/independence-and-correlation","api":"https://addaly.com/api/lesson/maths-you-need/independence-and-correlation","minutes":9,"keyIdea":"Correlation measures straight-line association only, so a correlation of zero can sit on top of a perfect relationship, and a strong correlation can sit on top of no relationship at all."},{"slug":"random-variables-and-simulation","title":"When you cannot solve it, simulate it","url":"https://addaly.com/learn/maths-you-need/random-variables-and-simulation","api":"https://addaly.com/api/lesson/maths-you-need/random-variables-and-simulation","minutes":9,"keyIdea":"Any probability you can describe as a procedure can be estimated by running the procedure many times, and the error of that estimate falls with the square root of the number of runs."},{"slug":"distributions-and-the-normal","title":"Distributions, and why the normal one keeps showing up","url":"https://addaly.com/learn/maths-you-need/distributions-and-the-normal","api":"https://addaly.com/api/lesson/maths-you-need/distributions-and-the-normal","minutes":8,"keyIdea":"The normal shape comes from many small independent effects adding up, and most real quantities are not built that way."},{"slug":"the-distributions-you-will-meet","title":"Six distributions, and the process each one describes","url":"https://addaly.com/learn/maths-you-need/the-distributions-you-will-meet","api":"https://addaly.com/api/lesson/maths-you-need/the-distributions-you-will-meet","minutes":10,"keyIdea":"Each standard distribution corresponds to a specific generating story, so choosing one is a claim about how your data was produced rather than a matter of which curve fits best."},{"slug":"expectation-and-variance","title":"Expectation and variance in plain terms","url":"https://addaly.com/learn/maths-you-need/expectation-and-variance","api":"https://addaly.com/api/lesson/maths-you-need/expectation-and-variance","minutes":8,"keyIdea":"An expectation is a weighted average that may never occur, and its noise falls with the square root of the sample size."},{"slug":"covariance-and-the-shape-of-a-cloud","title":"Covariance, and the shape of a cloud of points","url":"https://addaly.com/learn/maths-you-need/covariance-and-the-shape-of-a-cloud","api":"https://addaly.com/api/lesson/maths-you-need/covariance-and-the-shape-of-a-cloud","minutes":9,"keyIdea":"A covariance matrix describes the shape and orientation of a cloud of data, and its eigenvectors are the directions along which that cloud is longest."},{"slug":"heavy-tails-and-why-averages-lie","title":"Heavy tails, and the average that describes nobody","url":"https://addaly.com/learn/maths-you-need/heavy-tails-and-why-averages-lie","api":"https://addaly.com/api/lesson/maths-you-need/heavy-tails-and-why-averages-lie","minutes":9,"keyIdea":"When a distribution has a heavy tail the mean is dragged by rare extremes and describes almost no one, so percentiles rather than averages are what you report and act on."}]},{"slug":"logs-information-and-loss","title":"Logarithms, information and the shape of a loss","summary":"Logs and exponentials as tools rather than tables, surprise measured in bits, entropy and cross-entropy computed by hand, why a loss function is a likelihood in disguise, and the softmax arithmetic that every classifier ends with.","outcome":"Compute a cross-entropy and a KL divergence by hand from two small distributions and say which part of a training loss is irreducible, derive the squared-error and cross-entropy losses from a stated noise assumption, compute a softmax and its gradient for a given set of logits, and explain by the overflow limit of float32 why every library subtracts the maximum before exponentiating.","lessons":[{"slug":"logarithms-from-scratch","title":"What a log is, and why the axis got logged","url":"https://addaly.com/learn/maths-you-need/logarithms-from-scratch","api":"https://addaly.com/api/lesson/maths-you-need/logarithms-from-scratch","minutes":8,"keyIdea":"A logarithm counts how many multiplications reach a number, which turns products into sums and equal ratios into equal spacings, and that is why probabilities are added in log space and why any axis spanning several orders of magnitude should be logged."},{"slug":"exponentials-decay-and-moving-averages","title":"Exponentials, decay, and the memory of a moving average","url":"https://addaly.com/learn/maths-you-need/exponentials-decay-and-moving-averages","api":"https://addaly.com/api/lesson/maths-you-need/exponentials-decay-and-moving-averages","minutes":9,"keyIdea":"An exponential moving average with factor β remembers roughly 1/(1−β) steps and weights the past geometrically, which is where Adam's 0.9 and 0.999 come from, why it needs a bias correction at the start, and why a smoothed loss curve shows a spike late and small."},{"slug":"logs-and-loss","title":"Logs, and why losses are logged","url":"https://addaly.com/learn/maths-you-need/logs-and-loss","api":"https://addaly.com/api/lesson/maths-you-need/logs-and-loss","minutes":8,"keyIdea":"Logs turn products into sums and make confident mistakes expensive, which is exactly what training needs."},{"slug":"surprise-and-bits","title":"Surprise, bits, and why prediction is compression","url":"https://addaly.com/learn/maths-you-need/surprise-and-bits","api":"https://addaly.com/api/lesson/maths-you-need/surprise-and-bits","minutes":9,"keyIdea":"The surprise of an outcome is −log p, additive across independent events and zero for certainty, and because any distribution can be turned into a code of that length, a model's loss in bits per token is literally the size it would compress the text to."},{"slug":"entropy-by-hand","title":"Entropy: the average surprise, computed by hand","url":"https://addaly.com/learn/maths-you-need/entropy-by-hand","api":"https://addaly.com/api/lesson/maths-you-need/entropy-by-hand","minutes":9,"keyIdea":"Entropy is the average surprise of a distribution, largest when outcomes are equally likely and zero when one is certain, and the entropy of your label column is the loss of a model that has learned nothing but the base rate, which is the first number to compute."},{"slug":"cross-entropy-and-kl-divergence","title":"Cross-entropy and KL: the cost of believing the wrong distribution","url":"https://addaly.com/learn/maths-you-need/cross-entropy-and-kl-divergence","api":"https://addaly.com/api/lesson/maths-you-need/cross-entropy-and-kl-divergence","minutes":10,"keyIdea":"Cross-entropy is entropy plus KL divergence, so minimising it against fixed data can only shrink the KL and never go below the data's own entropy, which is why a loss plateau above zero can be the floor rather than a failure."},{"slug":"maximum-likelihood-and-where-losses-come-from","title":"Loss functions are not arbitrary: maximum likelihood","url":"https://addaly.com/learn/maths-you-need/maximum-likelihood-and-where-losses-come-from","api":"https://addaly.com/api/lesson/maths-you-need/maximum-likelihood-and-where-losses-come-from","minutes":10,"keyIdea":"Every standard loss is minus the log-likelihood under a stated noise assumption, so squared error means Gaussian errors of constant variance, absolute error means Laplace, cross-entropy means Bernoulli or categorical, and a loss that fits badly is a noise assumption that was wrong."},{"slug":"softmax-and-its-gradient","title":"Softmax, its gradient, and the shift it cannot see","url":"https://addaly.com/learn/maths-you-need/softmax-and-its-gradient","api":"https://addaly.com/api/lesson/maths-you-need/softmax-and-its-gradient","minutes":9,"keyIdea":"Softmax exponentiates and normalises, so only logit differences matter and a shared shift is invisible, and with cross-entropy its gradient is simply probability minus target, which is why training pushes hard on confident mistakes and barely at all on what is already right."},{"slug":"log-sum-exp-and-stable-softmax","title":"The log-sum-exp trick, and why exp(1000) is not a number","url":"https://addaly.com/learn/maths-you-need/log-sum-exp-and-stable-softmax","api":"https://addaly.com/api/lesson/maths-you-need/log-sum-exp-and-stable-softmax","minutes":9,"keyIdea":"Because float32 overflows at exp(88.7), softmax is computed by subtracting the maximum logit first, and log-probabilities are computed as z minus log-sum-exp rather than as the log of a softmax, which is why a loss function takes raw logits and why passing it probabilities trains toward a ceiling."},{"slug":"power-laws-and-log-log-plots","title":"Power laws, and the straight line on a log-log plot","url":"https://addaly.com/learn/maths-you-need/power-laws-and-log-log-plots","api":"https://addaly.com/api/lesson/maths-you-need/power-laws-and-log-log-plots","minutes":9,"keyIdea":"A power law is a straight line on log-log axes whose slope is the exponent, so a slope of −0.5 means quadrupling the input halves the output, and a straight line over two decades is weak evidence for extrapolating that promise further."}]},{"slug":"estimation-from-samples","title":"Estimation: from a sample to a number you can trust","summary":"What an estimator is and why the variance divides by n − 1, the mechanism behind the square-root law and the bell curve, standard errors and intervals you can compute on paper, what zero failures actually prove, the Beta distribution as a rate that learns, regularisation derived as a prior, and the selection effect that makes every winner look better than it is.","outcome":"Compute a standard error and a confidence interval for an accuracy figure by hand, say from the sample size and base rate whether the textbook interval can be trusted, bound a failure rate from a run with zero failures, derive an L2 or L1 penalty from a stated prior on the weights, and predict how much the best of k noisy candidates will fall back when re-measured.","lessons":[{"slug":"estimators-and-why-n-minus-one","title":"An estimator is a recipe, and why the variance divides by n − 1","url":"https://addaly.com/learn/maths-you-need/estimators-and-why-n-minus-one","api":"https://addaly.com/api/lesson/maths-you-need/estimators-and-why-n-minus-one","minutes":9,"keyIdea":"An estimator is a rule from sample to number with a bias and a variance of its own, and the sample variance divides by n − 1 because distances measured from the sample's own mean are systematically too small by exactly one degree of freedom."},{"slug":"law-of-large-numbers-and-its-speed","title":"The law of large numbers, and how fast it works","url":"https://addaly.com/learn/maths-you-need/law-of-large-numbers-and-its-speed","api":"https://addaly.com/api/lesson/maths-you-need/law-of-large-numbers-and-its-speed","minutes":9,"keyIdea":"Because variances of independent draws add, the spread of an average falls as σ/√n, which is slow, and the law stops applying when the variance is infinite or when correlated rows are counted as independent, in which case the effective n is the row count divided by 1 + (m − 1)ρ."},{"slug":"central-limit-theorem-by-simulation","title":"Why averages look normal, and when they refuse to","url":"https://addaly.com/learn/maths-you-need/central-limit-theorem-by-simulation","api":"https://addaly.com/api/lesson/maths-you-need/central-limit-theorem-by-simulation","minutes":9,"keyIdea":"Averages of independent draws with finite variance become normal because adding smooths and the normal is the shape smoothing leaves alone, but skew slows it, heavy tails defeat it entirely, and the theorem describes the average rather than the data."},{"slug":"standard-error-by-hand","title":"Standard error for a mean and a proportion, by hand","url":"https://addaly.com/learn/maths-you-need/standard-error-by-hand","api":"https://addaly.com/api/lesson/maths-you-need/standard-error-by-hand","minutes":9,"keyIdea":"The standard error of a proportion is √(p(1−p)/n), at most 0.5/√n, so 400 items give about ±5 points; independent errors combine by adding squares, while a paired comparison on shared items depends only on the items the two systems disagree about."},{"slug":"confidence-intervals-mechanics","title":"What a 95 per cent interval promises, and where the textbook one breaks","url":"https://addaly.com/learn/maths-you-need/confidence-intervals-mechanics","api":"https://addaly.com/api/lesson/maths-you-need/confidence-intervals-mechanics","minutes":10,"keyIdea":"A 95 per cent interval is a procedure that captures the truth in 95 per cent of repetitions, and the textbook estimate ± 1.96 SE breaks that promise near 0 or 1, covering only 63 per cent at p = 0.98 and n = 50, which the Wilson interval fixes by solving for the plausible true values instead."},{"slug":"the-rule-of-three","title":"Zero failures in 300 tries, and what that does not prove","url":"https://addaly.com/learn/maths-you-need/the-rule-of-three","api":"https://addaly.com/api/lesson/maths-you-need/the-rule-of-three","minutes":8,"keyIdea":"Zero failures in n independent trials bounds the failure rate at roughly 3/n with 95 per cent confidence, so 300 clean runs are consistent with a one-per-cent failure rate, and observing a failure of rate p reliably needs about 3/p trials."},{"slug":"beta-distributions-and-updating-a-rate","title":"Updating a rate as evidence arrives: the Beta distribution","url":"https://addaly.com/learn/maths-you-need/beta-distributions-and-updating-a-rate","api":"https://addaly.com/api/lesson/maths-you-need/beta-distributions-and-updating-a-rate","minutes":10,"keyIdea":"A Beta(a, b) belief about a rate updates to Beta(a + k, b + m) after k successes and m failures, so the prior is just pseudo-counts that fade as data accumulate, which is why the same arithmetic gives credible intervals, click-rate smoothing and Thompson sampling."},{"slug":"maximum-a-posteriori-and-regularisation","title":"Regularisation is a prior: L2, L1 and the diamond","url":"https://addaly.com/learn/maths-you-need/maximum-a-posteriori-and-regularisation","api":"https://addaly.com/api/lesson/maths-you-need/maximum-a-posteriori-and-regularisation","minutes":10,"keyIdea":"Adding a penalty to a loss is maximising a posterior rather than a likelihood, a Gaussian prior on the weights gives the L2 penalty and a Laplace prior gives L1, and L1 produces exact zeros because its pull stays constant as a weight shrinks while L2's pull fades with the weight."},{"slug":"regression-to-the-mean","title":"Regression to the mean, and the winner's curse in model selection","url":"https://addaly.com/learn/maths-you-need/regression-to-the-mean","api":"https://addaly.com/api/lesson/maths-you-need/regression-to-the-mean","minutes":9,"keyIdea":"Any measurement is truth plus noise, so the best of k candidates was selected partly for lucky noise and falls back on re-measurement by an amount set by the reliability r and the count k, which is why the winner of a hyperparameter search scores lower on a fresh test set through no fault of its own."}]},{"slug":"cost-and-scale","title":"Counting the cost: complexity and the arithmetic of scale","summary":"Growth rates and why n² is the one to fear, counting the floating-point operations in a layer and a training run, the bytes a model needs to exist and to train, why a GPU spends most of its time waiting for memory, and the arithmetic of hashing, graphs, nearest-neighbour search and back-of-the-envelope estimation.","outcome":"Count the FLOPs of a forward pass and a training run from a parameter count, compute the memory a model needs at each precision and in training, say from arithmetic intensity whether a workload is bound by compute or by memory bandwidth, recognise a quadratic cost in a pipeline and name the sub-quadratic replacement, and estimate the time or cost of an ML job to within a factor of three before running it.","lessons":[{"slug":"big-o-in-plain-terms","title":"Big-O, and the four growth rates you will meet","url":"https://addaly.com/learn/maths-you-need/big-o-in-plain-terms","api":"https://addaly.com/api/lesson/maths-you-need/big-o-in-plain-terms","minutes":8,"keyIdea":"Big-O keeps only how work grows as input doubles, and the line that matters runs between n log n, which survives any dataset, and n², which stops working around a million items however fast the hardware."},{"slug":"flops-of-a-matrix-multiply","title":"Counting the floating-point operations in a layer and a training run","url":"https://addaly.com/learn/maths-you-need/flops-of-a-matrix-multiply","api":"https://addaly.com/api/lesson/maths-you-need/flops-of-a-matrix-multiply","minutes":9,"keyIdea":"A matrix multiply costs 2mnk FLOPs, so a forward pass costs about two FLOPs per parameter per token and a training step about six, which lets you compute that seven billion parameters on a trillion tokens is 4.2 × 10²² FLOPs before anyone tells you the price."},{"slug":"quadratic-costs-and-pairwise-work","title":"Anything pairwise is quadratic: distances, attention and deduplication","url":"https://addaly.com/learn/maths-you-need/quadratic-costs-and-pairwise-work","api":"https://addaly.com/api/lesson/maths-you-need/quadratic-costs-and-pairwise-work","minutes":9,"keyIdea":"Any computation that compares every item with every other costs n² in time and memory, which is fine at ten thousand items and impossible at a million, and the fix is always the same: sort, bucket, block or approximate so that most pairs are never formed."},{"slug":"memory-arithmetic","title":"Bytes per parameter, and the arithmetic of what fits on a card","url":"https://addaly.com/learn/maths-you-need/memory-arithmetic","api":"https://addaly.com/api/lesson/maths-you-need/memory-arithmetic","minutes":9,"keyIdea":"Memory is parameters times bytes per parameter, so a seven-billion model is 14 GB in fp16 and 3.5 GB in int4, while training the same model holds about 16 bytes per parameter plus activations that scale with batch and context, which is why fine-tuning needs adapters to fit where inference already did."},{"slug":"arithmetic-intensity-and-the-roofline","title":"Why a GPU idles: memory-bound versus compute-bound","url":"https://addaly.com/learn/maths-you-need/arithmetic-intensity-and-the-roofline","api":"https://addaly.com/api/lesson/maths-you-need/arithmetic-intensity-and-the-roofline","minutes":10,"keyIdea":"A computation runs at the slower of its compute and bandwidth limits, and its arithmetic intensity in FLOPs per byte decides which, so single-token generation at one FLOP per byte is bandwidth-bound and takes weights ÷ bandwidth seconds regardless of how fast the chip's arithmetic is."},{"slug":"hashing-and-the-birthday-bound","title":"Hashing, collisions, and the square-root law behind them","url":"https://addaly.com/learn/maths-you-need/hashing-and-the-birthday-bound","api":"https://addaly.com/api/lesson/maths-you-need/hashing-and-the-birthday-bound","minutes":9,"keyIdea":"Hashing gives constant-time lookup by scattering inputs evenly, and the birthday bound says a repeat is likely after only √(2m) draws from m values, which is why a 32-bit key collides by 77,000 items and why Bloom filters, the hashing trick and locality-sensitive deduplication can each be sized from one formula."},{"slug":"graphs-as-matrices","title":"A graph is a matrix, and its paths are its powers","url":"https://addaly.com/learn/maths-you-need/graphs-as-matrices","api":"https://addaly.com/api/lesson/maths-you-need/graphs-as-matrices","minutes":9,"keyIdea":"A graph's adjacency matrix turns paths into matrix powers and random walks into repeated multiplication whose fixed point is the leading eigenvector, which is PageRank, and a graph neural network layer is simply that matrix averaging each node's neighbours before a learned linear map."},{"slug":"nearest-neighbour-search-arithmetic","title":"Finding the closest vector among ten million: the arithmetic of approximate search","url":"https://addaly.com/learn/maths-you-need/nearest-neighbour-search-arithmetic","api":"https://addaly.com/api/lesson/maths-you-need/nearest-neighbour-search-arithmetic","minutes":10,"keyIdea":"Exact nearest-neighbour search costs n × d per query and n × d × 4 bytes to hold, which is fine to about a hundred thousand vectors and impossible at ten million, so every method past that shrinks the vectors, searches a fraction of them or walks a graph, and each pays for its speed in measured recall."},{"slug":"fermi-estimates-for-ml","title":"Estimating anything to within a factor of three","url":"https://addaly.com/learn/maths-you-need/fermi-estimates-for-ml","api":"https://addaly.com/api/lesson/maths-you-need/fermi-estimates-for-ml","minutes":9,"keyIdea":"Break a question into factors you can guess to within three, multiply, and track the powers of ten; with k independent guesses the result is uncertain by about 3^√k rather than 3^k, so six rough factors still land within an order of magnitude, which is usually enough to decide."}]},{"slug":"numbers-in-a-machine","title":"Numbers inside a machine","summary":"What a float32 actually stores and where its seven digits run out, the half-precision formats and why training keeps a full-precision copy, cancellation and summation order, integer overflow, quantisation as rounding with a scale, condition numbers, the variance that travels through a layer, random numbers that are not, checking a gradient numerically, and reading NaN and Inf for what they are.","outcome":"Predict from the bit layout of float32, fp16 and bf16 which computation will overflow, underflow or lose its digits, explain why a long sum drifts and how to fix it, quantise a weight to int8 by hand and say what an outlier does to the rest of the tensor, derive the initialisation scale that keeps variance constant through a layer, and diagnose a NaN in training back to the operation that produced it.","lessons":[{"slug":"floating-point-anatomy","title":"What a float32 actually stores, and where its seven digits run out","url":"https://addaly.com/learn/maths-you-need/floating-point-anatomy","api":"https://addaly.com/api/lesson/maths-you-need/floating-point-anatomy","minutes":10,"keyIdea":"A float32 is a sign, an 8-bit exponent and a 24-bit mantissa, giving about seven decimal digits and a range near 10^±38, so its spacing grows with the number, an integer counter stalls at 2^24, and equality between computed floats is an accident of rounding rather than a fact."},{"slug":"half-precision-and-mixed-precision","title":"bf16, fp16, and why training keeps a float32 copy","url":"https://addaly.com/learn/maths-you-need/half-precision-and-mixed-precision","api":"https://addaly.com/api/lesson/maths-you-need/half-precision-and-mixed-precision","minutes":9,"keyIdea":"fp16 keeps three digits and a range to 65,504 while bf16 keeps two digits and float32's full range, and because a small update added to a half-precision weight rounds away entirely, training keeps a float32 master copy of every weight and accumulates matrix products in float32."},{"slug":"cancellation-and-summation-order","title":"Catastrophic cancellation, and why a sum depends on its order","url":"https://addaly.com/learn/maths-you-need/cancellation-and-summation-order","api":"https://addaly.com/api/lesson/maths-you-need/cancellation-and-summation-order","minutes":9,"keyIdea":"Subtracting nearly equal floats leaves only their rounding error, and adding a small float to a large one loses it, so variances must subtract the mean before squaring, long sums must accumulate in float64 or pairwise, and because addition is not associative a GPU's varying reduction order makes identical runs diverge."},{"slug":"integers-overflow-and-the-size-of-things","title":"Integers, overflow, and the token id that would not fit","url":"https://addaly.com/learn/maths-you-need/integers-overflow-and-the-size-of-things","api":"https://addaly.com/api/lesson/maths-you-need/integers-overflow-and-the-size-of-things","minutes":8,"keyIdea":"Fixed-width integers are exact inside their range and wrap silently outside it, so counts, offsets and products of sizes belong in int64, pixels and ids belong in the smallest type that fits, and a result of exactly 2,147,483,647, 255 or 16,777,216 is a limit rather than a value."},{"slug":"quantisation-as-rounding","title":"Quantisation is rounding with a scale: int8, int4 and the outlier problem","url":"https://addaly.com/learn/maths-you-need/quantisation-as-rounding","api":"https://addaly.com/api/lesson/maths-you-need/quantisation-as-rounding","minutes":10,"keyIdea":"Quantisation stores each weight as round(w / scale) with the scale set by the largest value in its group, so the error is half a step for everyone and a single outlier can round an entire tensor to zero, which is why scales are kept per channel or per block of 128."},{"slug":"condition-numbers","title":"The condition number, and how many digits a problem throws away","url":"https://addaly.com/learn/maths-you-need/condition-numbers","api":"https://addaly.com/api/lesson/maths-you-need/condition-numbers","minutes":9,"keyIdea":"The condition number σ_max/σ_min says how many digits a problem throws away, about log10(κ) of them, and the usual source of a large one is unscaled or correlated features, which is why standardising columns fixes both a numerically meaningless fit and a slow gradient descent at once."},{"slug":"variance-through-a-layer","title":"How variance travels through a layer, and the initialisation that follows","url":"https://addaly.com/learn/maths-you-need/variance-through-a-layer","api":"https://addaly.com/api/lesson/maths-you-need/variance-through-a-layer","minutes":9,"keyIdea":"Because a unit's output is a sum of fan_in independent products, its variance is fan_in × σ_w² × σ_x², so a weight spread of √(2/fan_in) keeps activations level through every ReLU layer while 0.05 or 0.01 explodes or vanishes them within twenty."},{"slug":"random-numbers-and-seeds","title":"Random numbers that are not, and what a seed does and does not fix","url":"https://addaly.com/learn/maths-you-need/random-numbers-and-seeds","api":"https://addaly.com/api/lesson/maths-you-need/random-numbers-and-seeds","minutes":9,"keyIdea":"A pseudo-random generator is a deterministic recipe started from a seed, so seeding makes shuffles, masks and splits repeat, but it cannot fix a GPU's reduction order, a split that shifts when data grow, or Python's per-process string hashing, each of which needs its own remedy."},{"slug":"checking-a-gradient-numerically","title":"Checking a gradient with finite differences, and the step size that lies","url":"https://addaly.com/learn/maths-you-need/checking-a-gradient-numerically","api":"https://addaly.com/api/lesson/maths-you-need/checking-a-gradient-numerically","minutes":9,"keyIdea":"A two-sided finite difference has truncation error of order h² and rounding error of order ε/h, so the best step is about ε^(1/3), which in float32 leaves only five correct digits and makes gradient checks meaningful only in float64, where a relative error above 10⁻³ means the gradient is wrong."},{"slug":"nan-inf-and-the-statistics-of-a-tensor","title":"NaN, Inf, and the five numbers to print about any tensor","url":"https://addaly.com/learn/maths-you-need/nan-inf-and-the-statistics-of-a-tensor","api":"https://addaly.com/api/lesson/maths-you-need/nan-inf-and-the-statistics-of-a-tensor","minutes":9,"keyIdea":"NaN arises from 0/0, Inf − Inf, sqrt of a negative or log of a negative, propagates through everything, and is unequal even to itself, so it is found with isnan rather than ==, traced upstream rather than where it appears, and prevented by the stable log, variance and normalisation forms the earlier lessons gave."}]}]},{"slug":"agents-and-automation","title":"Agents and Automation","tagline":"What an agent actually is, and when you should build a script instead.","description":"Past the hype: what an agent actually is, how the loop works, why most agent demos collapse in production, and how to build automation that survives contact with real data. Covers no-code tools (n8n, Zapier, Make) and code equally, and is honest about when a plain script is the better answer.","level":"intermediate","track":"build","url":"https://addaly.com/learn/agents-and-automation","lessons":72,"minutes":633,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/agents-and-automation.pdf","pages":396,"bytes":4386174,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/agents-and-automation.pdf","cover":"https://addaly.com/textbooks/look/agents-and-automation/1.webp?v=2026-10-07-4386174"},"film":null,"modules":[{"slug":"deciding-what-to-build","title":"Before you build: script, workflow, or agent","summary":"Most requests that arrive labelled 'we need an AI agent' are a scheduler and thirty lines of code. This block teaches you to take the request apart, price it, and pick the cheapest machine that does the job. It comes first because the most expensive mistake in this subject is building the wrong shape.","outcome":"Given any automation request, choose between a script, a fixed workflow and an agent, and justify the choice with that shape's per-run cost, failure rate and recovery story.","lessons":[{"slug":"chatbot-workflow-agent","title":"Three machines, one word","url":"https://addaly.com/learn/agents-and-automation/chatbot-workflow-agent","api":"https://addaly.com/api/lesson/agents-and-automation/chatbot-workflow-agent","minutes":6,"keyIdea":"An agent is a program where the model, not the author, decides what happens next."},{"slug":"automation-before-agents","title":"The boring stack that already does this","url":"https://addaly.com/learn/agents-and-automation/automation-before-agents","api":"https://addaly.com/api/lesson/agents-and-automation/automation-before-agents","minutes":8,"keyIdea":"Most automation requests are a scheduler and thirty lines of code; put a model only in the one step where the input is genuinely unstructured."},{"slug":"mapping-the-process-first","title":"Watch the process before you automate it","url":"https://addaly.com/learn/agents-and-automation/mapping-the-process-first","api":"https://addaly.com/api/lesson/agents-and-automation/mapping-the-process-first","minutes":9,"keyIdea":"The process on paper is not the one that runs, and the ceiling on any automation is the share of elapsed time held by the steps it actually replaces."},{"slug":"what-work-is-automatable","title":"Which work is worth automating","url":"https://addaly.com/learn/agents-and-automation/what-work-is-automatable","api":"https://addaly.com/api/lesson/agents-and-automation/what-work-is-automatable","minutes":8,"keyIdea":"Automate high-volume, low-variance work whose errors are cheap and visible; the rest costs more in maintenance and supervision than it returns."},{"slug":"the-cost-of-being-wrong","title":"What a wrong answer costs, and who finds it","url":"https://addaly.com/learn/agents-and-automation/the-cost-of-being-wrong","api":"https://addaly.com/api/lesson/agents-and-automation/the-cost-of-being-wrong","minutes":9,"keyIdea":"Classify work by the cost of an error and by whether anyone would notice it; the expensive-and-invisible quadrant needs a detector built before the automation, not after."},{"slug":"why-demos-fail","title":"Why the demo worked and production did not","url":"https://addaly.com/learn/agents-and-automation/why-demos-fail","api":"https://addaly.com/api/lesson/agents-and-automation/why-demos-fail","minutes":8,"keyIdea":"Per-step accuracy compounds, so shortening the chain usually beats upgrading the model."},{"slug":"unit-economics-of-a-run","title":"What one run costs, and what it is worth","url":"https://addaly.com/learn/agents-and-automation/unit-economics-of-a-run","api":"https://addaly.com/api/lesson/agents-and-automation/unit-economics-of-a-run","minutes":9,"keyIdea":"Price one run in tokens, seconds and the human minutes it replaces before you build it: the transcript is re-sent every step, so the fifth step is cheap and the twentieth is not."},{"slug":"buy-build-or-wait","title":"Buy it, build it, or wait for it","url":"https://addaly.com/learn/agents-and-automation/buy-build-or-wait","api":"https://addaly.com/api/lesson/agents-and-automation/buy-build-or-wait","minutes":8,"keyIdea":"Search the tools you already pay for before designing anything, and remember that an API call is about five per cent of the work of an integration."},{"slug":"choosing-code-or-no-code","title":"n8n, Zapier, Make, or a file of Python","url":"https://addaly.com/learn/agents-and-automation/choosing-code-or-no-code","api":"https://addaly.com/api/lesson/agents-and-automation/choosing-code-or-no-code","minutes":8,"keyIdea":"Visual tools win on connectors and time to first run; code wins the moment you need a loop with a condition, a code review, or a rollback."}]},{"slug":"how-the-loop-runs","title":"The machinery: transcript, tools, loop","summary":"Open the box. An agent is a list of messages, a set of tool definitions and a while loop, and everything that makes one good or bad happens in code you own. This block comes second because you cannot debug, budget or secure a machine whose moving parts you have never seen.","outcome":"Trace any agent run from its message list (tool definitions going in, tool results coming back) and explain from the transcript alone why the model chose each step.","lessons":[{"slug":"tools-and-function-calling","title":"A tool call is a request, not an action","url":"https://addaly.com/learn/agents-and-automation/tools-and-function-calling","api":"https://addaly.com/api/lesson/agents-and-automation/tools-and-function-calling","minutes":7,"keyIdea":"A tool call is a request your code fulfils, and the result string is the model's only feedback."},{"slug":"structured-output-and-schemas","title":"A schema constrains the shape, not the truth","url":"https://addaly.com/learn/agents-and-automation/structured-output-and-schemas","api":"https://addaly.com/api/lesson/agents-and-automation/structured-output-and-schemas","minutes":9,"keyIdea":"Constrained decoding guarantees the output parses, and nothing else: a required field the model has no evidence for will be invented, because the sampler is not allowed to leave it out."},{"slug":"the-message-list","title":"What the model actually sees each turn","url":"https://addaly.com/learn/agents-and-automation/the-message-list","api":"https://addaly.com/api/lesson/agents-and-automation/the-message-list","minutes":8,"keyIdea":"An agent's entire state is a list of messages you own and can rewrite; there is no session and no hidden memory between calls."},{"slug":"system-prompts-for-agents","title":"The instruction block that has to survive forty turns","url":"https://addaly.com/learn/agents-and-automation/system-prompts-for-agents","api":"https://addaly.com/api/lesson/agents-and-automation/system-prompts-for-agents","minutes":9,"keyIdea":"A system prompt is text competing with a growing transcript, so anything that must hold on turn forty belongs in the harness or in the tool description, not in a rule at the top."},{"slug":"the-loop","title":"Plan, act, observe, repeat","url":"https://addaly.com/learn/agents-and-automation/the-loop","api":"https://addaly.com/api/lesson/agents-and-automation/the-loop","minutes":7,"keyIdea":"The loop is trivial; deciding what goes back in as the observation is the entire craft."},{"slug":"planning-and-decomposition","title":"Plan first, or just start?","url":"https://addaly.com/learn/agents-and-automation/planning-and-decomposition","api":"https://addaly.com/api/lesson/agents-and-automation/planning-and-decomposition","minutes":9,"keyIdea":"A plan written into the transcript becomes something the model has to stay consistent with, so keep the plan as harness-owned state that is re-derived when evidence contradicts it."},{"slug":"designing-a-tool-surface","title":"Tools that survive being called by a machine","url":"https://addaly.com/learn/agents-and-automation/designing-a-tool-surface","api":"https://addaly.com/api/lesson/agents-and-automation/designing-a-tool-surface","minutes":9,"keyIdea":"Design tools for a caller that retries, invents arguments and never reads the documentation: idempotent, paginated, timed out, enumerated, and safe to dry run."},{"slug":"observations-that-fit","title":"The observation is where runs die","url":"https://addaly.com/learn/agents-and-automation/observations-that-fit","api":"https://addaly.com/api/lesson/agents-and-automation/observations-that-fit","minutes":8,"keyIdea":"Shrink the observation at its source, and when you do cut, say in the text that you cut: silent truncation makes the model confident about a subset."},{"slug":"context-window-management","title":"What to throw away, and when","url":"https://addaly.com/learn/agents-and-automation/context-window-management","api":"https://addaly.com/api/lesson/agents-and-automation/context-window-management","minutes":10,"keyIdea":"Cost grows with the square of the run length because the whole transcript is re-sent every turn, so the harness must keep a working set rather than a history, and never mutate the cached prefix."},{"slug":"agent-memory","title":"Memory is a directory, not a mystery","url":"https://addaly.com/learn/agents-and-automation/agent-memory","api":"https://addaly.com/api/lesson/agents-and-automation/agent-memory","minutes":8,"keyIdea":"Memory that works is a file you can open and a table you can edit; a vector store of everything the agent ever saw is unauditable, undeletable and usually unhelpful."},{"slug":"multi-agent-or-not","title":"When a second agent helps, and when it just costs more","url":"https://addaly.com/learn/agents-and-automation/multi-agent-or-not","api":"https://addaly.com/api/lesson/agents-and-automation/multi-agent-or-not","minutes":9,"keyIdea":"A subagent buys you a separate context window and nothing else; pay for it only when isolation or genuine parallelism is the problem you have."}]},{"slug":"data-plumbing","title":"The data underneath: sources, documents, records","summary":"Every automation that survives contact with a real business spends most of its code on data rather than on models: a supplier who changed their invoice layout, three spellings of the same customer, a date that means two different days depending on who typed it. This block is the plumbing: reading real sources, extracting fields you can defend, matching records, giving the agent something searchable, and writing back into a system other people depend on.","outcome":"Take a messy real source (scanned invoices, an inbox, a spreadsheet a team edits by hand) and build the layer beneath the agent: parsed documents, field extraction with checkable provenance, normalised values, matched records, retrieval the agent can search, and writes that cannot duplicate a row or silently overwrite a person’s edit.","lessons":[{"slug":"where-the-data-lives","title":"Files, inboxes, sheets and APIs","url":"https://addaly.com/learn/agents-and-automation/where-the-data-lives","api":"https://addaly.com/api/lesson/agents-and-automation/where-the-data-lives","minutes":9,"keyIdea":"Land the raw source untouched before you transform anything, and remember that an incremental sync on a timestamp will never show you a deletion."},{"slug":"parsing-real-documents","title":"PDFs, scans and the layout problem","url":"https://addaly.com/learn/agents-and-automation/parsing-real-documents","api":"https://addaly.com/api/lesson/agents-and-automation/parsing-real-documents","minutes":10,"keyIdea":"A PDF has no tables and no reading order, only positioned glyphs, so check first whether there is a text layer at all, because that single fact decides your entire pipeline."},{"slug":"extraction-that-holds-up","title":"Turning a document into a row you can defend","url":"https://addaly.com/learn/agents-and-automation/extraction-that-holds-up","api":"https://addaly.com/api/lesson/agents-and-automation/extraction-that-holds-up","minutes":10,"keyIdea":"Make the model quote its evidence and check the quote appears verbatim in the source, which converts the dangerous failure (a confident wrong value) into the safe one, a blank field."},{"slug":"dates-names-and-numbers","title":"The boring bugs that eat automations","url":"https://addaly.com/learn/agents-and-automation/dates-names-and-numbers","api":"https://addaly.com/api/lesson/agents-and-automation/dates-names-and-numbers","minutes":9,"keyIdea":"Money in floating point, a date without a locale and a name split into first and last are the three defects that survive every review and corrupt data quietly for months."},{"slug":"deduplication-and-matching","title":"The same customer, three times","url":"https://addaly.com/learn/agents-and-automation/deduplication-and-matching","api":"https://addaly.com/api/lesson/agents-and-automation/deduplication-and-matching","minutes":9,"keyIdea":"Most duplicate problems are solved by normalising a key rather than by fuzzy matching, and a wrong merge is far more expensive than a surviving duplicate because merges are hard to undo."},{"slug":"retrieval-for-agents","title":"Grep first, embeddings later","url":"https://addaly.com/learn/agents-and-automation/retrieval-for-agents","api":"https://addaly.com/api/lesson/agents-and-automation/retrieval-for-agents","minutes":9,"keyIdea":"An agent that can search repeatedly needs a good search tool more than it needs a clever index, and lexical search beats vector search on exactly the identifiers that matter most."},{"slug":"embeddings-in-practice","title":"What an embedding actually is","url":"https://addaly.com/learn/agents-and-automation/embeddings-in-practice","api":"https://addaly.com/api/lesson/agents-and-automation/embeddings-in-practice","minutes":10,"keyIdea":"An embedding is a list of numbers whose only meaning is distance to other numbers from the same model, so a similarity score is not comparable across models and changing model means re-encoding everything."},{"slug":"writing-back-safely","title":"Writing into a system somebody depends on","url":"https://addaly.com/learn/agents-and-automation/writing-back-safely","api":"https://addaly.com/api/lesson/agents-and-automation/writing-back-safely","minutes":10,"keyIdea":"Uniqueness must be enforced by a database constraint rather than by checking first and inserting after, because between the check and the insert another attempt can succeed."}]},{"slug":"making-it-reliable","title":"Surviving real data","summary":"Everything so far works on the happy path. This block is about the other path: how runs actually fail, how to see it in a trace, and the four fixes that turn a demo into something that can be left alone overnight. It is the longest block for a reason: reliability is where the work lives.","outcome":"Diagnose a failing agent run from its trace and apply the specific fix it needs: a retry policy, a validator, a shorter chain, or no loop at all.","lessons":[{"slug":"how-agents-fail","title":"The six ways a run goes wrong","url":"https://addaly.com/learn/agents-and-automation/how-agents-fail","api":"https://addaly.com/api/lesson/agents-and-automation/how-agents-fail","minutes":9,"keyIdea":"Every agent failure mode is invisible in the final message, which is why the final message is the last thing you should judge a run by."},{"slug":"observability-and-tracing","title":"You cannot debug what you did not record","url":"https://addaly.com/learn/agents-and-automation/observability-and-tracing","api":"https://addaly.com/api/lesson/agents-and-automation/observability-and-tracing","minutes":9,"keyIdea":"A histogram of steps per run is the most informative agent metric there is: a spike at the step limit means a slice of your runs were cut off, and their final messages will look perfectly normal."},{"slug":"reading-a-trace","title":"Reading a run, step by step","url":"https://addaly.com/learn/agents-and-automation/reading-a-trace","api":"https://addaly.com/api/lesson/agents-and-automation/reading-a-trace","minutes":9,"keyIdea":"Ask three questions of every trace, in order: did it see the right thing, was the next step reasonable given only that, and did the harness do what was asked."},{"slug":"budgets-and-stopping-rules","title":"Budgets belong in the harness, not the prompt","url":"https://addaly.com/learn/agents-and-automation/budgets-and-stopping-rules","api":"https://addaly.com/api/lesson/agents-and-automation/budgets-and-stopping-rules","minutes":7,"keyIdea":"Anything you need guaranteed goes in the harness; a prompt can only ask."},{"slug":"state-machines-over-loops","title":"When the loop should be a graph","url":"https://addaly.com/learn/agents-and-automation/state-machines-over-loops","api":"https://addaly.com/api/lesson/agents-and-automation/state-machines-over-loops","minutes":9,"keyIdea":"Splitting an agent into named states lets each state carry only the tools it needs, which is real containment rather than an instruction not to use the dangerous one."},{"slug":"retries-and-idempotency","title":"Retries, timeouts and doing it twice","url":"https://addaly.com/learn/agents-and-automation/retries-and-idempotency","api":"https://addaly.com/api/lesson/agents-and-automation/retries-and-idempotency","minutes":8,"keyIdea":"Retry only what is transient, back off with jitter, and generate the idempotency key once before the first attempt: a new key per attempt is simply a new request."},{"slug":"validators-not-vibes","title":"The validator is the product","url":"https://addaly.com/learn/agents-and-automation/validators-not-vibes","api":"https://addaly.com/api/lesson/agents-and-automation/validators-not-vibes","minutes":9,"keyIdea":"Check the output in code before anyone sees it: schema, then arithmetic, then every number and identifier traced back to a tool result in the same run."},{"slug":"testing-with-replay","title":"Testing something that is not deterministic","url":"https://addaly.com/learn/agents-and-automation/testing-with-replay","api":"https://addaly.com/api/lesson/agents-and-automation/testing-with-replay","minutes":9,"keyIdea":"Record tool results once and replay them: with the tools held fixed, almost the whole harness becomes an ordinary deterministic test."},{"slug":"golden-tasks-for-agents","title":"Thirty tasks you run before every change","url":"https://addaly.com/learn/agents-and-automation/golden-tasks-for-agents","api":"https://addaly.com/api/lesson/agents-and-automation/golden-tasks-for-agents","minutes":10,"keyIdea":"Score an agent on the state of the world after the run rather than on what it said, and compare per-task results, because a three-point move on forty tasks is about one task."}]},{"slug":"safety-and-blast-radius","title":"Permissions, injection and blast radius","summary":"An agent can do exactly what its credentials allow, for whoever can write into its inputs. This block draws the boundary: what it may touch, what a stranger's text could make it do, what runs in a sandbox, and which actions stop for a person. It comes after reliability because you cannot contain a system you cannot yet observe.","outcome":"Draw the permission boundary for an automation: name what it may touch, what somebody writing into its inputs could make it do, and which actions must stop for a person.","lessons":[{"slug":"prompt-injection-in-agents","title":"The email that tells your agent what to do","url":"https://addaly.com/learn/agents-and-automation/prompt-injection-in-agents","api":"https://addaly.com/api/lesson/agents-and-automation/prompt-injection-in-agents","minutes":10,"keyIdea":"An agent with private data, untrusted input and an outbound channel will eventually do what a stranger wrote; remove one of the three rather than adding a rule to the prompt."},{"slug":"browser-agents-and-the-open-web","title":"The web is the most hostile input there is","url":"https://addaly.com/learn/agents-and-automation/browser-agents-and-the-open-web","api":"https://addaly.com/api/lesson/agents-and-automation/browser-agents-and-the-open-web","minutes":10,"keyIdea":"A browser agent reads the DOM or the accessibility tree, so text a human cannot see is text the agent reads as plainly as the headline."},{"slug":"least-privilege-for-agents","title":"Give it the smallest key that works","url":"https://addaly.com/learn/agents-and-automation/least-privilege-for-agents","api":"https://addaly.com/api/lesson/agents-and-automation/least-privilege-for-agents","minutes":8,"keyIdea":"An agent can do exactly what its credentials allow; scope the database role, the token, the channel and the network egress before you touch the prompt."},{"slug":"data-boundaries-and-redaction","title":"What leaves the building","url":"https://addaly.com/learn/agents-and-automation/data-boundaries-and-redaction","api":"https://addaly.com/api/lesson/agents-and-automation/data-boundaries-and-redaction","minutes":9,"keyIdea":"Sending fewer fields is a control you can verify; stripping names out of free text is a reduction in exposure that should never be described as anonymisation."},{"slug":"sandboxing-what-it-runs","title":"Running code the model wrote","url":"https://addaly.com/learn/agents-and-automation/sandboxing-what-it-runs","api":"https://addaly.com/api/lesson/agents-and-automation/sandboxing-what-it-runs","minutes":9,"keyIdea":"There is no in-process Python sandbox; isolate at the container or virtual-machine boundary, and turn the network off by default."},{"slug":"secrets-and-agent-identity","title":"The agent gets its own account","url":"https://addaly.com/learn/agents-and-automation/secrets-and-agent-identity","api":"https://addaly.com/api/lesson/agents-and-automation/secrets-and-agent-identity","minutes":9,"keyIdea":"A tool that takes an arbitrary URL and headers hands the model your credentials, because anything that can shape a request can send the key somewhere else."},{"slug":"human-in-the-loop","title":"Where the person goes","url":"https://addaly.com/learn/agents-and-automation/human-in-the-loop","api":"https://addaly.com/api/lesson/agents-and-automation/human-in-the-loop","minutes":8,"keyIdea":"Gate on what cannot be undone, never on how confident the model sounds."},{"slug":"irreversible-actions","title":"Money, messages and deletions","url":"https://addaly.com/learn/agents-and-automation/irreversible-actions","api":"https://addaly.com/api/lesson/agents-and-automation/irreversible-actions","minutes":8,"keyIdea":"Anything you cannot undo gets a dry run, a hard numeric limit in code, and a way to stop the whole thing inside thirty seconds."},{"slug":"disclosure-and-audit","title":"Telling people, and keeping the receipts","url":"https://addaly.com/learn/agents-and-automation/disclosure-and-audit","api":"https://addaly.com/api/lesson/agents-and-automation/disclosure-and-audit","minutes":8,"keyIdea":"Record the run, the prompt version and the pinned model id with every action, and name the person accountable: 'the system decided' is not an answer anyone accepts."}]},{"slug":"automation-patterns","title":"Eight patterns that keep working","summary":"Almost all automation that survives in production is one of a small number of shapes. Each has known parts, a characteristic way of failing and a mechanical check that catches it. Learning the shapes saves you from designing every system from first principles, and more usefully it stops you building an agent where a classifier and a queue would have done the job at a fiftieth of the cost.","outcome":"Identify which recurring shape an automation request is, assemble it from that shape’s known parts, and state in advance how it will fail and which mechanical check catches that failure before a person sees the output.","lessons":[{"slug":"the-classifier-router","title":"Pattern: one call, one label, then code","url":"https://addaly.com/learn/agents-and-automation/the-classifier-router","api":"https://addaly.com/api/lesson/agents-and-automation/the-classifier-router","minutes":9,"keyIdea":"Two people labelling the same hundred items set the ceiling for any classifier, so measure human agreement before you measure the model."},{"slug":"the-drafting-assistant","title":"Pattern: it writes, a person sends","url":"https://addaly.com/learn/agents-and-automation/the-drafting-assistant","api":"https://addaly.com/api/lesson/agents-and-automation/the-drafting-assistant","minutes":9,"keyIdea":"A fluent draft raises the chance a reviewer approves something they would not have written, so the interface must make the reviewer do a task rather than a glance."},{"slug":"the-triage-queue","title":"Pattern: sort, enrich, escalate","url":"https://addaly.com/learn/agents-and-automation/the-triage-queue","api":"https://addaly.com/api/lesson/agents-and-automation/the-triage-queue","minutes":9,"keyIdea":"Attaching the relevant evidence to an item is more valuable and far safer than deciding the item, and the human’s final disposition is a free training label you should be capturing."},{"slug":"the-research-agent","title":"Pattern: search, read, cite, and verify the citation","url":"https://addaly.com/learn/agents-and-automation/the-research-agent","api":"https://addaly.com/api/lesson/agents-and-automation/the-research-agent","minutes":10,"keyIdea":"A research agent’s output is prose with real-looking sources, so the only defence that scales is checking mechanically that every quoted span exists in the page it is attributed to."},{"slug":"the-monitor","title":"Pattern: watch something, say when it changes","url":"https://addaly.com/learn/agents-and-automation/the-monitor","api":"https://addaly.com/api/lesson/agents-and-automation/the-monitor","minutes":9,"keyIdea":"A monitor that dies is indistinguishable from a world where nothing is happening, so the first thing to monitor is that the monitor ran."},{"slug":"the-batch-backfill","title":"Pattern: forty thousand rows, once","url":"https://addaly.com/learn/agents-and-automation/the-batch-backfill","api":"https://addaly.com/api/lesson/agents-and-automation/the-batch-backfill","minutes":9,"keyIdea":"Sample randomly and stratify before a backfill, because the first two hundred rows are almost always the oldest or the tidiest, and they will tell you the job is safer than it is."},{"slug":"the-coding-agent","title":"Pattern: the agent that writes and runs code","url":"https://addaly.com/learn/agents-and-automation/the-coding-agent","api":"https://addaly.com/api/lesson/agents-and-automation/the-coding-agent","minutes":10,"keyIdea":"Coding agents work because the feedback signal is objective and cheap; and they fail when the agent can edit the thing producing that signal."},{"slug":"composing-patterns","title":"Joining two automations without joining their failures","url":"https://addaly.com/learn/agents-and-automation/composing-patterns","api":"https://addaly.com/api/lesson/agents-and-automation/composing-patterns","minutes":9,"keyIdea":"The interface between two stages should be a queue, even if the queue is just a status column, so that a slow or broken stage produces a visible backlog instead of failures attributed to the wrong place."}]},{"slug":"shipping-and-operating","title":"Shipping it, and keeping it alive","summary":"The last block is the one most courses skip: how the thing starts, where it runs, who hears about it when it breaks, and what it costs to still be working in a year. It ends with building one real automation end to end, because everything before this was preparation for that.","outcome":"Ship one automation end to end (trigger, harness, tools, validator, alert) and write the runbook that lets somebody else fix it at 3am.","lessons":[{"slug":"mcp-and-tool-standards","title":"MCP, and why a standard for tools matters","url":"https://addaly.com/learn/agents-and-automation/mcp-and-tool-standards","api":"https://addaly.com/api/lesson/agents-and-automation/mcp-and-tool-standards","minutes":8,"keyIdea":"A tool standard removes integration work; it does nothing about whether the model chooses tools well."},{"slug":"writing-an-mcp-server","title":"Writing a small MCP server","url":"https://addaly.com/learn/agents-and-automation/writing-an-mcp-server","api":"https://addaly.com/api/lesson/agents-and-automation/writing-an-mcp-server","minutes":10,"keyIdea":"An MCP server is a small process answering JSON-RPC over a pipe; the docstring is the interface, and anything printed to standard output breaks the protocol."},{"slug":"triggers-and-schedules","title":"How the thing starts","url":"https://addaly.com/learn/agents-and-automation/triggers-and-schedules","api":"https://addaly.com/api/lesson/agents-and-automation/triggers-and-schedules","minutes":8,"keyIdea":"Acknowledge webhooks fast and deduplicate on the provider's event id; when you poll, advance a cursor over the data, never over the clock."},{"slug":"where-automation-runs","title":"Where it runs when your laptop is shut","url":"https://addaly.com/learn/agents-and-automation/where-automation-runs","api":"https://addaly.com/api/lesson/agents-and-automation/where-automation-runs","minutes":8,"keyIdea":"Pick the runner by run duration, state and who else can restart it, and remember cron gets almost no environment, so a variable exported in your shell profile is not there."},{"slug":"queues-and-concurrency","title":"Rate limits, workers and the thundering herd","url":"https://addaly.com/learn/agents-and-automation/queues-and-concurrency","api":"https://addaly.com/api/lesson/agents-and-automation/queues-and-concurrency","minutes":9,"keyIdea":"For agents the tokens-per-minute limit usually binds long before the requests-per-minute one, because a twenty-turn transcript is enormous compared with a single chat message."},{"slug":"pinning-and-migrating-models","title":"The model you tested is not the model you deployed","url":"https://addaly.com/learn/agents-and-automation/pinning-and-migrating-models","api":"https://addaly.com/api/lesson/agents-and-automation/pinning-and-migrating-models","minutes":9,"keyIdea":"Log the model id the provider returns rather than the one you sent, because an alias resolves to a different version over time and that difference is the explanation you will be looking for."},{"slug":"rollout-and-rollback","title":"Shadow, canary, and the off switch","url":"https://addaly.com/learn/agents-and-automation/rollout-and-rollback","api":"https://addaly.com/api/lesson/agents-and-automation/rollout-and-rollback","minutes":9,"keyIdea":"Assign a canary by hashing a stable identifier rather than rolling a die per request, or the same item will be handled by both versions and the comparison becomes meaningless."},{"slug":"alerts-and-the-runbook","title":"The 3am version","url":"https://addaly.com/learn/agents-and-automation/alerts-and-the-runbook","api":"https://addaly.com/api/lesson/agents-and-automation/alerts-and-the-runbook","minutes":8,"keyIdea":"Alert on the job not running and on outputs that look wrong, not on exceptions, and keep a six-line runbook next to the code."},{"slug":"the-maintenance-bill","title":"What it costs to keep it alive","url":"https://addaly.com/learn/agents-and-automation/the-maintenance-bill","api":"https://addaly.com/api/lesson/agents-and-automation/the-maintenance-bill","minutes":8,"keyIdea":"Automation is a subscription paid in attention: review volume, error rate, spend and readership quarterly, and delete what nobody reads."},{"slug":"build-one-real-thing","title":"Build the boring version first","url":"https://addaly.com/learn/agents-and-automation/build-one-real-thing","api":"https://addaly.com/api/lesson/agents-and-automation/build-one-real-thing","minutes":9,"keyIdea":"Most automation that survives is a deterministic pipeline with one model call and a real validator."}]},{"slug":"living-with-it","title":"The year after it ships","summary":"Every course on this subject ends at the deploy. The year afterwards is where automations are actually won and lost: who owns it, whether it delivered what was claimed, what it costs, whether the people it was built for use it or quietly work around it, what you owe them in disclosure, what the rules require in a field where they differ by country and are still moving, what the system kept and must forget, and how to switch it off when its time has come.","outcome":"Take responsibility for a live automation over twelve months: name its owner and on-call path, prove its value against an honest counterfactual, hold its cost to a stated budget, detect when people are routing around it, meet disclosure and record-keeping duties without giving or taking legal advice, and decommission it cleanly when it is no longer worth running.","lessons":[{"slug":"who-owns-it-when-it-breaks","title":"Whose is it, at 3am, in eight months","url":"https://addaly.com/learn/agents-and-automation/who-owns-it-when-it-breaks","api":"https://addaly.com/api/lesson/agents-and-automation/who-owns-it-when-it-breaks","minutes":9,"keyIdea":"An automation with an active credential and no named owner is the worst state a system can be in: it still acts, nobody watches, and the first sign of trouble is the damage."},{"slug":"proving-the-value","title":"Did it actually help, and how would you know","url":"https://addaly.com/learn/agents-and-automation/proving-the-value","api":"https://addaly.com/api/lesson/agents-and-automation/proving-the-value","minutes":9,"keyIdea":"Hours saved is the weakest claim available, because a saved hour only becomes value if you can say what it turned into."},{"slug":"the-bill-and-who-reads-it","title":"What it costs, and where the cost hides","url":"https://addaly.com/learn/agents-and-automation/the-bill-and-who-reads-it","api":"https://addaly.com/api/lesson/agents-and-automation/the-bill-and-who-reads-it","minutes":9,"keyIdea":"Transcript growth dominates the bill, so the same task done in twice as many steps costs about four times as much, which is why shortening the chain beats every other optimisation."},{"slug":"when-people-route-around-it","title":"When people quietly work around it","url":"https://addaly.com/learn/agents-and-automation/when-people-route-around-it","api":"https://addaly.com/api/lesson/agents-and-automation/when-people-route-around-it","minutes":9,"keyIdea":"Removing a manual step also removes whatever incidental checking that step provided, and the errors it used to catch reappear somewhere nobody is looking."},{"slug":"telling-people-what-is-automated","title":"Saying so, and the tools that cannot prove it","url":"https://addaly.com/learn/agents-and-automation/telling-people-what-is-automated","api":"https://addaly.com/api/lesson/agents-and-automation/telling-people-what-is-automated","minutes":9,"keyIdea":"Text detectors are unreliable and flag non-native writers disproportionately, so disclosure has to be a record you keep rather than a property anyone can test afterwards."},{"slug":"rules-that-differ-by-country","title":"The rules, where they agree and where they do not","url":"https://addaly.com/learn/agents-and-automation/rules-that-differ-by-country","api":"https://addaly.com/api/lesson/agents-and-automation/rules-that-differ-by-country","minutes":10,"keyIdea":"Build the same four capabilities regardless of jurisdiction (records, human override, an explanation, and deletion) because they satisfy most regimes and nothing else you build transfers as well."},{"slug":"what-it-keeps-and-what-it-must-forget","title":"Retention: the duty to keep and the duty to delete","url":"https://addaly.com/learn/agents-and-automation/what-it-keeps-and-what-it-must-forget","api":"https://addaly.com/api/lesson/agents-and-automation/what-it-keeps-and-what-it-must-forget","minutes":9,"keyIdea":"Keep a decision record rather than the full payload, so the duty to explain what happened stops competing with the duty to delete personal data."},{"slug":"retiring-an-automation","title":"Switching it off, on purpose","url":"https://addaly.com/learn/agents-and-automation/retiring-an-automation","api":"https://addaly.com/api/lesson/agents-and-automation/retiring-an-automation","minutes":9,"keyIdea":"Revoke the credentials before you delete the code, because once the code is gone nobody remembers the key existed and it stays valid for years."}]}]},{"slug":"cloud-and-shipping","title":"Shipping It","tagline":"Get what you built in front of real people, and keep it alive.","description":"Most of what stops people shipping is not code. It is a domain that will not resolve, a key committed by accident, a bill that arrives three weeks later, and a backup nobody has ever restored. This course covers the boring machinery between \"it works on my laptop\" and \"strangers are using it\" (servers, DNS, HTTP, secrets, deploys, logs, cost, abuse and recovery) with real numbers and real failure modes. You need to have built something small already. You do not need to have deployed anything.","level":"intermediate","track":"build","url":"https://addaly.com/learn/cloud-and-shipping","lessons":74,"minutes":658,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/cloud-and-shipping.pdf","pages":414,"bytes":4726387,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/cloud-and-shipping.pdf","cover":"https://addaly.com/textbooks/look/cloud-and-shipping/1.webp?v=2026-10-07-4726387"},"film":null,"modules":[{"slug":"how-the-internet-reaches-you","title":"How the internet reaches your process","summary":"Before you can fix a live site you need a picture of what happens between somebody typing your name and your code running. Six layers, each with its own way of failing. This comes first because every later module assumes you can say which layer you are looking at.","outcome":"Trace one request from a typed URL to your running process and back, and name which layer is at fault when it fails.","lessons":[{"slug":"what-a-server-is","title":"What a server actually is","url":"https://addaly.com/learn/cloud-and-shipping/what-a-server-is","api":"https://addaly.com/api/lesson/cloud-and-shipping/what-a-server-is","minutes":7,"keyIdea":"A server is just a process holding a port open; the cloud only changes who owns the machine."},{"slug":"the-box-and-the-shell","title":"The first ten minutes on a new machine","url":"https://addaly.com/learn/cloud-and-shipping/the-box-and-the-shell","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-box-and-the-shell","minutes":9,"keyIdea":"A fresh machine is scanned within minutes, so keys-only login, a non-root user, a closed firewall and automatic security updates are not hardening you do later: they are the machine's first ten minutes."},{"slug":"processes-that-restart-themselves","title":"What keeps your process running when you close the laptop","url":"https://addaly.com/learn/cloud-and-shipping/processes-that-restart-themselves","api":"https://addaly.com/api/lesson/cloud-and-shipping/processes-that-restart-themselves","minutes":9,"keyIdea":"Something other than your terminal has to own the process: a supervisor that starts it at boot and restarts it on exit, plus the journal that says why it exited, and a process that keeps vanishing without a log line was probably killed by the kernel for using too much memory."},{"slug":"dns-and-domains","title":"Why your site is not loading","url":"https://addaly.com/learn/cloud-and-shipping/dns-and-domains","api":"https://addaly.com/api/lesson/cloud-and-shipping/dns-and-domains","minutes":8,"keyIdea":"Nothing propagates; DNS answers are cached for their TTL, so lower the TTL before you change anything."},{"slug":"http-and-status-codes","title":"What a status code is telling you","url":"https://addaly.com/learn/cloud-and-shipping/http-and-status-codes","api":"https://addaly.com/api/lesson/cloud-and-shipping/http-and-status-codes","minutes":7,"keyIdea":"The first digit says who has to fix it; a status code that lies makes every layer above you lie too."},{"slug":"tls-and-the-padlock","title":"The padlock, and what it does not prove","url":"https://addaly.com/learn/cloud-and-shipping/tls-and-the-padlock","api":"https://addaly.com/api/lesson/cloud-and-shipping/tls-and-the-padlock","minutes":9,"keyIdea":"A certificate proves control of a domain name and nothing else, and the way it kills your site is not being broken but quietly expiring."},{"slug":"behind-the-proxy","title":"What sits in front of your app","url":"https://addaly.com/learn/cloud-and-shipping/behind-the-proxy","api":"https://addaly.com/api/lesson/cloud-and-shipping/behind-the-proxy","minutes":9,"keyIdea":"A reverse proxy takes the port, the certificate and the client's IP address away from your app, and every one of those has a default that will surprise you."},{"slug":"one-request-end-to-end","title":"One request, with a stopwatch","url":"https://addaly.com/learn/cloud-and-shipping/one-request-end-to-end","api":"https://addaly.com/api/lesson/cloud-and-shipping/one-request-end-to-end","minutes":10,"keyIdea":"Most of a first request is round trips you cannot code your way out of, so measure where the time actually goes before optimising the part you wrote."},{"slug":"keeping-the-connection-open","title":"The handshake you keep paying for","url":"https://addaly.com/learn/cloud-and-shipping/keeping-the-connection-open","api":"https://addaly.com/api/lesson/cloud-and-shipping/keeping-the-connection-open","minutes":9,"keyIdea":"Most of a small request is handshake, so the wins are reuse: keep-alive in, a pooled client out, and an app idle timeout longer than the proxy's, or you will serve 502s nobody can explain."}]},{"slug":"making-a-deploy-boring","title":"Making a deploy boring","summary":"A deploy should be a non-event: one command, the same artifact, and an undo you have already practised. This module builds that, including the two things that make deploys frightening: configuration you cannot see and schema changes under live traffic.","outcome":"Ship a code change and a schema change to a live site without dropping a request, and undo either one in under two minutes.","lessons":[{"slug":"secrets-and-env","title":"The key you must not commit","url":"https://addaly.com/learn/cloud-and-shipping/secrets-and-env","api":"https://addaly.com/api/lesson/cloud-and-shipping/secrets-and-env","minutes":8,"keyIdea":"A leaked key is only fixed by rotating it; scrubbing git history does not un-leak anything."},{"slug":"build-once-run-anywhere","title":"The same build, everywhere","url":"https://addaly.com/learn/cloud-and-shipping/build-once-run-anywhere","api":"https://addaly.com/api/lesson/cloud-and-shipping/build-once-run-anywhere","minutes":9,"keyIdea":"Build one artifact from a locked dependency tree and move that exact thing between environments, because anything rebuilt per environment is a different program."},{"slug":"what-is-actually-running","title":"Which commit is live right now","url":"https://addaly.com/learn/cloud-and-shipping/what-is-actually-running","api":"https://addaly.com/api/lesson/cloud-and-shipping/what-is-actually-running","minutes":8,"keyIdea":"Stamp the commit SHA into the artifact and serve it from a /version route, because \"which code is running on the machine that answered this request\" is the first question in every incident and the only one you can make free to answer."},{"slug":"a-pipeline-you-trust","title":"The checks that run without you","url":"https://addaly.com/learn/cloud-and-shipping/a-pipeline-you-trust","api":"https://addaly.com/api/lesson/cloud-and-shipping/a-pipeline-you-trust","minutes":9,"keyIdea":"A pipeline is worth having only if it is fast enough that people wait for it and honest enough that a red build always means something is broken."},{"slug":"infrastructure-you-can-recreate","title":"The console clicks nobody wrote down","url":"https://addaly.com/learn/cloud-and-shipping/infrastructure-you-can-recreate","api":"https://addaly.com/api/lesson/cloud-and-shipping/infrastructure-you-can-recreate","minutes":9,"keyIdea":"Infrastructure created by clicking is a design nobody wrote down; put it in files so you get a diff, a rebuild and a history, and treat the plan output as the review step where a replace means a new empty database."},{"slug":"deploying-small","title":"Deploying for nearly nothing","url":"https://addaly.com/learn/cloud-and-shipping/deploying-small","api":"https://addaly.com/api/lesson/cloud-and-shipping/deploying-small","minutes":8,"keyIdea":"Both versions run during a deploy, so schema changes take three deploys, not one."},{"slug":"stopping-a-process-politely","title":"Ending a process without dropping a request","url":"https://addaly.com/learn/cloud-and-shipping/stopping-a-process-politely","api":"https://addaly.com/api/lesson/cloud-and-shipping/stopping-a-process-politely","minutes":8,"keyIdea":"A deploy stops a process as well as starting one, so catch SIGTERM, fail readiness first, drain with a deadline shorter than the platform's grace period, and check that your container is not swallowing the signal at PID 1."},{"slug":"staging-and-preview","title":"The copy you are allowed to break","url":"https://addaly.com/learn/cloud-and-shipping/staging-and-preview","api":"https://addaly.com/api/lesson/cloud-and-shipping/staging-and-preview","minutes":8,"keyIdea":"A staging environment is worth having and will still lie to you, so make it cheap, make it disposable, and put a wall between it and anything that can reach a real person."},{"slug":"migrations-without-downtime","title":"Changing the schema under a running site","url":"https://addaly.com/learn/cloud-and-shipping/migrations-without-downtime","api":"https://addaly.com/api/lesson/cloud-and-shipping/migrations-without-downtime","minutes":11,"keyIdea":"A schema change is safe when it never takes a long lock and never assumes only one version of the code is running, and both properties are things you arrange rather than hope for."},{"slug":"rollback-and-the-kill-switch","title":"Undo, in under two minutes","url":"https://addaly.com/learn/cloud-and-shipping/rollback-and-the-kill-switch","api":"https://addaly.com/api/lesson/cloud-and-shipping/rollback-and-the-kill-switch","minutes":9,"keyIdea":"Code rolls back, data does not, so keep them separate and make sure the undo you rely on is one you have actually performed while nothing was wrong."}]},{"slug":"knowing-what-it-is-doing","title":"Knowing what it is doing","summary":"A live site is opaque unless you make it otherwise. Logs, metrics, errors, health checks, alerts and traces are five different answers to five different questions, and people conflate them. Here you learn which question each one answers and how much of it you actually need.","outcome":"Answer \"is it broken, for whom, and since when\" in under five minutes using data you are already collecting.","lessons":[{"slug":"logs-at-2am","title":"Reading logs at 2am","url":"https://addaly.com/learn/cloud-and-shipping/logs-at-2am","api":"https://addaly.com/api/lesson/cloud-and-shipping/logs-at-2am","minutes":7,"keyIdea":"Give every request an ID and log it everywhere; that one habit turns guessing into searching."},{"slug":"where-logs-go-and-what-they-cost","title":"Where the logs go, and what they cost","url":"https://addaly.com/learn/cloud-and-shipping/where-logs-go-and-what-they-cost","api":"https://addaly.com/api/lesson/cloud-and-shipping/where-logs-go-and-what-they-cost","minutes":9,"keyIdea":"Logs are a pipeline with a price per gigabyte, so log structured JSON to stdout, index only low-cardinality labels, sample the successful noise, and set a retention number on purpose rather than discovering one on an invoice."},{"slug":"metrics-that-mean-something","title":"Four numbers that describe any service","url":"https://addaly.com/learn/cloud-and-shipping/metrics-that-mean-something","api":"https://addaly.com/api/lesson/cloud-and-shipping/metrics-that-mean-something","minutes":9,"keyIdea":"Averages hide exactly the requests you care about, so measure latency as percentiles from histograms and keep the number of distinct label values small."},{"slug":"dashboards-people-actually-read","title":"One screen that answers the question","url":"https://addaly.com/learn/cloud-and-shipping/dashboards-people-actually-read","api":"https://addaly.com/api/lesson/cloud-and-shipping/dashboards-people-actually-read","minutes":8,"keyIdea":"A dashboard is a saved answer to a question somebody asks, so keep three screens (service health, dependencies, business counts) with thresholds drawn on and percentages rather than counts, and never mistake a screen for an alert."},{"slug":"errors-that-find-you","title":"Errors that come to you","url":"https://addaly.com/learn/cloud-and-shipping/errors-that-find-you","api":"https://addaly.com/api/lesson/cloud-and-shipping/errors-that-find-you","minutes":8,"keyIdea":"An error nobody sees is an error nobody fixes, so send exceptions somewhere that groups them, counts them and tells you which release they started in."},{"slug":"health-checks-that-tell-the-truth","title":"The health check that lies","url":"https://addaly.com/learn/cloud-and-shipping/health-checks-that-tell-the-truth","api":"https://addaly.com/api/lesson/cloud-and-shipping/health-checks-that-tell-the-truth","minutes":9,"keyIdea":"A health check that always returns 200 tests only that your web server can serve a constant, and the check you rely on must run from outside the thing it is checking."},{"slug":"alerts-worth-waking-for","title":"Alerts you would get out of bed for","url":"https://addaly.com/learn/cloud-and-shipping/alerts-worth-waking-for","api":"https://addaly.com/api/lesson/cloud-and-shipping/alerts-worth-waking-for","minutes":8,"keyIdea":"Every alert must pass two tests (a human is needed, and needed now) and an alert that fails either one is training you to ignore the ones that do not."},{"slug":"slos-and-error-budgets","title":"Deciding how reliable it has to be","url":"https://addaly.com/learn/cloud-and-shipping/slos-and-error-budgets","api":"https://addaly.com/api/lesson/cloud-and-shipping/slos-and-error-budgets","minutes":10,"keyIdea":"Pick a reliability target you can defend, express it as good events over valid events, and treat the remaining failure allowance as a budget you spend on shipping: with burn-rate alerts so one rule catches both the outage and the slow bleed."},{"slug":"tracing-one-slow-request","title":"Finding the slow bit","url":"https://addaly.com/learn/cloud-and-shipping/tracing-one-slow-request","api":"https://addaly.com/api/lesson/cloud-and-shipping/tracing-one-slow-request","minutes":10,"keyIdea":"Slowness is nearly always waiting rather than computing, and a trace or a few timed log lines will show you what the request was waiting for."}]},{"slug":"load-cost-and-abuse","title":"Load, cost and the traffic that is not customers","summary":"Everything in this module is the same problem seen from three sides: work arriving faster than you can do it. Caching removes work, capacity planning finds the ceiling, queues move work out of the request, and rate limits keep strangers from spending your money.","outcome":"Find your first real ceiling with a load test and raise it using caching, pooling or a queue, without raising the bill.","lessons":[{"slug":"the-bill","title":"The bill, and the traffic that runs it up","url":"https://addaly.com/learn/cloud-and-shipping/the-bill","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-bill","minutes":9,"keyIdea":"Alerts tell you the money is gone; only caps, limits and caching stop it leaving."},{"slug":"caching-the-cheapest-server","title":"The request you never serve","url":"https://addaly.com/learn/cloud-and-shipping/caching-the-cheapest-server","api":"https://addaly.com/api/lesson/cloud-and-shipping/caching-the-cheapest-server","minutes":9,"keyIdea":"Caching converts traffic into nothing at all, and the two ways it goes wrong are serving one person's data to another and every copy expiring at the same instant."},{"slug":"the-edge-and-the-cdn","title":"Serving from near the user, and what bandwidth costs","url":"https://addaly.com/learn/cloud-and-shipping/the-edge-and-the-cdn","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-edge-and-the-cdn","minutes":9,"keyIdea":"A CDN wins twice (cached bytes never cross the ocean, and even uncacheable requests get a nearby handshake) and the number to watch is cache hit ratio, because egress metered at cents per gigabyte is what turns one large image into a bill."},{"slug":"where-it-falls-over","title":"Finding your ceiling before your users do","url":"https://addaly.com/learn/cloud-and-shipping/where-it-falls-over","api":"https://addaly.com/api/lesson/cloud-and-shipping/where-it-falls-over","minutes":10,"keyIdea":"Capacity is measured, not guessed, and past the knee of the curve latency rises while throughput does not, so shedding load beats queueing it."},{"slug":"scaling-out-and-the-state-problem","title":"The day you run two copies","url":"https://addaly.com/learn/cloud-and-shipping/scaling-out-and-the-state-problem","api":"https://addaly.com/api/lesson/cloud-and-shipping/scaling-out-and-the-state-problem","minutes":9,"keyIdea":"Running two copies breaks everything held inside one process (sessions, counters, uploads, caches and cron) so externalise that state rather than pinning users to an instance, and test it by restarting the process while logged in."},{"slug":"the-database-is-the-bottleneck","title":"It is almost always the database","url":"https://addaly.com/learn/cloud-and-shipping/the-database-is-the-bottleneck","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-database-is-the-bottleneck","minutes":10,"keyIdea":"The first ceiling is nearly always connections and the second is one missing index, and both are found with two queries you can run today."},{"slug":"queues-and-background-work","title":"Work that does not belong in a request","url":"https://addaly.com/learn/cloud-and-shipping/queues-and-background-work","api":"https://addaly.com/api/lesson/cloud-and-shipping/queues-and-background-work","minutes":10,"keyIdea":"Move anything slow or externally dependent out of the request into a queue, and design every job to be safe to run twice, because at some point it will be."},{"slug":"rate-limits-and-abuse","title":"The traffic that is not customers","url":"https://addaly.com/learn/cloud-and-shipping/rate-limits-and-abuse","api":"https://addaly.com/api/lesson/cloud-and-shipping/rate-limits-and-abuse","minutes":9,"keyIdea":"Limit per account and per endpoint rather than only per IP address, and put the tightest limits on whatever spends money per request."},{"slug":"uploads-and-object-storage","title":"Files people send you","url":"https://addaly.com/learn/cloud-and-shipping/uploads-and-object-storage","api":"https://addaly.com/api/lesson/cloud-and-shipping/uploads-and-object-storage","minutes":9,"keyIdea":"Uploads belong in object storage, written directly by the browser through a short-lived presigned URL with the key, type and size constrained, and everything the client tells you about the file, including its name and content type, is attacker-controlled until you check the bytes."},{"slug":"email-that-arrives","title":"Why your email went to spam","url":"https://addaly.com/learn/cloud-and-shipping/email-that-arrives","api":"https://addaly.com/api/lesson/cloud-and-shipping/email-that-arrives","minutes":9,"keyIdea":"Transactional email fails silently, and the three DNS records that stop it failing are the ones the major providers now check on every message."}]},{"slug":"staying-alive","title":"Staying alive: the bad day and the day after","summary":"The last module is about time. Things expire, data accumulates obligations, and eventually something breaks while people are using it. These are the habits that decide whether that is forty minutes or a weekend, and what is left behind for whoever runs this next.","outcome":"Run the first thirty minutes of a real outage from a written runbook, and leave behind a postmortem and a handover that change what happens next time.","lessons":[{"slug":"backups-and-restore","title":"The restore you have never tested","url":"https://addaly.com/learn/cloud-and-shipping/backups-and-restore","api":"https://addaly.com/api/lesson/cloud-and-shipping/backups-and-restore","minutes":8,"keyIdea":"An untested backup is a guess; the drill is the only thing that turns it into a plan."},{"slug":"the-security-you-actually-need","title":"The short list that actually matters","url":"https://addaly.com/learn/cloud-and-shipping/the-security-you-actually-need","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-security-you-actually-need","minutes":10,"keyIdea":"Small sites are compromised through leaked credentials, exposed services, missing authorisation checks and unpatched dependencies, so spend your effort there before anywhere else."},{"slug":"data-you-must-delete","title":"Data you must keep, and data you must delete","url":"https://addaly.com/learn/cloud-and-shipping/data-you-must-delete","api":"https://addaly.com/api/lesson/cloud-and-shipping/data-you-must-delete","minutes":9,"keyIdea":"Every store of personal data is a liability with a lifetime, so decide the number for each one and enforce it with a job rather than a policy document."},{"slug":"the-things-that-expire","title":"Everything expires, and nothing tells you","url":"https://addaly.com/learn/cloud-and-shipping/the-things-that-expire","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-things-that-expire","minutes":8,"keyIdea":"Most preventable outages are something with a date on it that nobody owned, so keep one file listing what expires, when, and on whose card."},{"slug":"failing-well","title":"Timeouts, retries, and the failure you made worse","url":"https://addaly.com/learn/cloud-and-shipping/failing-well","api":"https://addaly.com/api/lesson/cloud-and-shipping/failing-well","minutes":9,"keyIdea":"One dependency without a timeout can take down every page you serve, and retries without backoff, jitter and a breaker turn a small fault into a storm you generated yourself."},{"slug":"when-your-provider-goes-down","title":"The outage that is not yours","url":"https://addaly.com/learn/cloud-and-shipping/when-your-provider-goes-down","api":"https://addaly.com/api/lesson/cloud-and-shipping/when-your-provider-goes-down","minutes":8,"keyIdea":"When the broken thing belongs to somebody else, your work is to prove it quickly, degrade or serve stale rather than wait, and communicate from infrastructure that does not share the failure. And most small projects should buy cheap redundancy for stateless providers rather than an architecture they cannot operate."},{"slug":"the-first-thirty-minutes","title":"The first thirty minutes of an outage","url":"https://addaly.com/learn/cloud-and-shipping/the-first-thirty-minutes","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-first-thirty-minutes","minutes":10,"keyIdea":"Stop the bleeding before you understand the cause, because diagnosis works fine from logs and a rolled-back artifact while the fire does not need to keep burning."},{"slug":"the-postmortem","title":"Writing down what happened","url":"https://addaly.com/learn/cloud-and-shipping/the-postmortem","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-postmortem","minutes":9,"keyIdea":"A postmortem is worth writing only if it changes something, so measure detection time, name systemic causes rather than people, and leave with fewer than four owned actions."},{"slug":"practising-failure","title":"Breaking it on purpose, on a Tuesday","url":"https://addaly.com/learn/cloud-and-shipping/practising-failure","api":"https://addaly.com/api/lesson/cloud-and-shipping/practising-failure","minutes":8,"keyIdea":"Every recovery mechanism is a belief until somebody has used it deliberately while nothing was wrong, so rehearse restores, rollbacks, instance kills and dependency failures on a calm Tuesday and record how long each really took."},{"slug":"handing-it-over","title":"Writing it down for whoever is next","url":"https://addaly.com/learn/cloud-and-shipping/handing-it-over","api":"https://addaly.com/api/lesson/cloud-and-shipping/handing-it-over","minutes":9,"keyIdea":"Four short documents (how to run it, how to operate it, what expires, and why it is like this) are what turn a running site into something somebody else can keep alive."}]},{"slug":"shipping-a-model","title":"Shipping a model, not just a web app","summary":"A prediction endpoint is a web service with four extra problems: the weights are large, the latency is dominated by arithmetic rather than waiting, the cost is per token or per GPU-second, and the thing can get worse without anybody deploying anything. This module is the operations of machine learning: serving, cost, versioning, skew, drift and the fallback for when the model is not there.","outcome":"Put a model behind an HTTP endpoint with a measured latency budget and a stated cost per request, ship a new version by shadow then canary rather than by hope, and detect the week its inputs stop resembling the data it was trained on.","lessons":[{"slug":"a-model-is-a-process-with-weights","title":"A prediction endpoint is a web service with a large secret","url":"https://addaly.com/learn/cloud-and-shipping/a-model-is-a-process-with-weights","api":"https://addaly.com/api/lesson/cloud-and-shipping/a-model-is-a-process-with-weights","minutes":9,"keyIdea":"A model endpoint is an ordinary web service whose memory, start-up time, concurrency and per-request cost are one to three orders of magnitude larger, so load weights once, size workers against cores rather than against waiting, and push anything slow into a queue."},{"slug":"where-inference-time-goes","title":"Where inference time actually goes","url":"https://addaly.com/learn/cloud-and-shipping/where-inference-time-goes","api":"https://addaly.com/api/lesson/cloud-and-shipping/where-inference-time-goes","minutes":10,"keyIdea":"Language-model latency splits into a parallel prefill that sets time-to-first-token and a memory-bandwidth-bound decode that sets tokens per second, which is why smaller and quantised models are faster, why batching raises throughput almost for free, and why output length is the lever that matters most."},{"slug":"the-arithmetic-of-tokens-and-gpus","title":"What a prediction costs, worked out","url":"https://addaly.com/learn/cloud-and-shipping/the-arithmetic-of-tokens-and-gpus","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-arithmetic-of-tokens-and-gpus","minutes":10,"keyIdea":"Compute cost per request from token prices or from GPU-hours divided by realistic utilisation, and the comparison settles itself: hosted APIs win while you are idle, your own hardware wins only at sustained volume, and caching plus a per-user quota is the lever you control either way."},{"slug":"which-model-answered","title":"Which model, which prompt, which version","url":"https://addaly.com/learn/cloud-and-shipping/which-model-answered","api":"https://addaly.com/api/lesson/cloud-and-shipping/which-model-answered","minutes":9,"keyIdea":"A model system has four independently moving versions (model snapshot, prompt, decoding parameters and retrieval index) so pin each one and record all four with every response, or no complaint about last Tuesday can be investigated."},{"slug":"training-serving-skew","title":"The feature computed two different ways","url":"https://addaly.com/learn/cloud-and-shipping/training-serving-skew","api":"https://addaly.com/api/lesson/cloud-and-shipping/training-serving-skew","minutes":10,"keyIdea":"Most deployed models fail because the features at serving time are computed by different code, from different data, at a different moment than the features they were trained on; so share one implementation and diff the two paths on real rows before anybody trusts the score."},{"slug":"shipping-a-model-safely","title":"Shadow, then canary, then everybody","url":"https://addaly.com/learn/cloud-and-shipping/shipping-a-model-safely","api":"https://addaly.com/api/lesson/cloud-and-shipping/shipping-a-model-safely","minutes":9,"keyIdea":"Ship a model in three stages (shadow to find what breaks, canary on a user-hashed slice with automatic rollback, then a properly sized experiment) and keep a small holdback afterwards, because the artifact rolls back but the data it wrote does not."},{"slug":"when-the-inputs-change","title":"The model that quietly stopped fitting","url":"https://addaly.com/learn/cloud-and-shipping/when-the-inputs-change","api":"https://addaly.com/api/lesson/cloud-and-shipping/when-the-inputs-change","minutes":10,"keyIdea":"A model degrades without any deploy, so watch what you can see immediately (input distributions, missingness and the prediction distribution) collect a small stream of real labels every week, and make retraining a triggered decision that passes the same gate as any other model change."},{"slug":"feedback-loops","title":"The model that trains on its own decisions","url":"https://addaly.com/learn/cloud-and-shipping/feedback-loops","api":"https://addaly.com/api/lesson/cloud-and-shipping/feedback-loops","minutes":9,"keyIdea":"A deployed model selects, censors and generates the data it will later be trained on, so log impressions and interventions, mark machine-generated content at write time, keep a small randomised slice and an untouched human-labelled anchor set, or your metrics will measure agreement with your own past decisions."},{"slug":"the-fallback-when-the-model-is-down","title":"What the page says when the model is not there","url":"https://addaly.com/learn/cloud-and-shipping/the-fallback-when-the-model-is-down","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-fallback-when-the-model-is-down","minutes":9,"keyIdea":"Model calls fail slowly, partially and expensively, so set idle timeouts on streams, validate the shape of every answer, define one cheaper fallback per feature and write down in advance whether each gate fails open or closed."}]},{"slug":"security-after-the-short-list","title":"Security after the short list","summary":"The short list earlier in this course covers what compromises most small sites. This module is what comes after it, and it is mostly about authority: who may do what, which key proves it, what happens when a session or a key must be taken back, and what you do on the day something is genuinely wrong. It ends with the two situations nobody plans for: a breach, and a legal demand about one of your users.","outcome":"Enforce authorisation per object rather than per page, revoke a session or rotate a key without an outage, and run the first day of a breach or an abuse report with evidence preserved and users told the truth.","lessons":[{"slug":"who-is-allowed-to-do-what","title":"Authentication is not authorisation","url":"https://addaly.com/learn/cloud-and-shipping/who-is-allowed-to-do-what","api":"https://addaly.com/api/lesson/cloud-and-shipping/who-is-allowed-to-do-what","minutes":9,"keyIdea":"Being logged in is not permission to touch a particular row, so scope the query by the owner rather than checking the route, name each rule as a testable function, fail closed, and remember that an unguessable ID is a secret rather than an authorisation check."},{"slug":"sessions-and-logging-people-out","title":"Sessions, and taking one back","url":"https://addaly.com/learn/cloud-and-shipping/sessions-and-logging-people-out","api":"https://addaly.com/api/lesson/cloud-and-shipping/sessions-and-logging-people-out","minutes":9,"keyIdea":"Design sessions around revocation (an opaque ID looked up server-side revokes instantly, while a stateless token cannot until it expires) and rotate the ID on every privilege change, hash it at rest, and re-authenticate in front of dangerous actions."},{"slug":"dependencies-and-the-supply-chain","title":"The code you did not write","url":"https://addaly.com/learn/cloud-and-shipping/dependencies-and-the-supply-chain","api":"https://addaly.com/api/lesson/cloud-and-shipping/dependencies-and-the-supply-chain","minutes":9,"keyIdea":"Your dependencies run with your application's permissions, so install from a committed lockfile, delay adoption of brand-new versions, pin CI actions by commit hash and triage scanner output by whether the vulnerable path is reachable; and accept that a patient social attack defeats all of it."},{"slug":"rotating-a-key-without-downtime","title":"Changing a key while everything is using it","url":"https://addaly.com/learn/cloud-and-shipping/rotating-a-key-without-downtime","api":"https://addaly.com/api/lesson/cloud-and-shipping/rotating-a-key-without-downtime","minutes":8,"keyIdea":"Rotate by overlapping (both keys valid, deploy the new one, watch the old one go quiet, disable before deleting) and give keys an identifier so you can tell who is still using the old one instead of guessing."},{"slug":"bots-scrapers-and-floods","title":"Bots, scrapers and the flood you cannot absorb","url":"https://addaly.com/learn/cloud-and-shipping/bots-scrapers-and-floods","api":"https://addaly.com/api/lesson/cloud-and-shipping/bots-scrapers-and-floods","minutes":9,"keyIdea":"Volumetric floods are handled upstream by a CDN you did not write, but application-layer abuse is yours: cache the public pages, put quotas and challenges in front of the expensive ones, limit by account rather than address, and log every block because the people you wrongly refuse cannot tell you."},{"slug":"payments-and-what-you-must-not-store","title":"Taking money without holding card numbers","url":"https://addaly.com/learn/cloud-and-shipping/payments-and-what-you-must-not-store","api":"https://addaly.com/api/lesson/cloud-and-shipping/payments-and-what-you-must-not-store","minutes":9,"keyIdea":"Let the processor collect the card so raw numbers never reach you, grant access on a signature-verified webhook rather than a redirect, deduplicate by event ID, and send an idempotency key on every charge so a dropped connection cannot bill somebody twice."},{"slug":"the-admin-surface","title":"The tools that can do anything","url":"https://addaly.com/learn/cloud-and-shipping/the-admin-surface","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-admin-surface","minutes":8,"keyIdea":"The admin panel is unlimited authority with the fewest tests, so gate it with an explicit allowlist that answers 404, require a reason on every action, write an append-only audit log in the same transaction, and hold destructive powers as break-glass rather than by default."},{"slug":"the-day-you-are-breached","title":"The first day of a security incident","url":"https://addaly.com/learn/cloud-and-shipping/the-day-you-are-breached","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-day-you-are-breached","minutes":10,"keyIdea":"In a security incident, preserve evidence before you clean anything, contain narrowly and rotate credentials, establish scope from logs rather than assumptions, and find out which notification clock applies to you before the day you need to know."},{"slug":"when-somebody-reports-your-users","title":"The email about one of your users","url":"https://addaly.com/learn/cloud-and-shipping/when-somebody-reports-your-users","api":"https://addaly.com/api/lesson/cloud-and-shipping/when-somebody-reports-your-users","minutes":9,"keyIdea":"Have one monitored address, preserve the evidence before you act on any serious report, verify who is really asking and give only what is demanded, and learn which copyright and disclosure regime applies to you before the first notice arrives rather than during it."}]},{"slug":"running-it-for-years","title":"Running it for years","summary":"Everything so far gets a thing launched and keeps it alive through a bad week. This module is the longer horizon: what you chose to run yourself and what that costs in attention, the upgrades that arrive whether or not you want them, what a user costs you, how to move house, what the law expects of a public site, and how one person keeps this going without burning out.","outcome":"Decide what to run yourself and what to buy using a cost per user and a maintenance budget you have actually calculated, keep a system upgraded and legally presentable over several years, and move it to another provider without losing a URL.","lessons":[{"slug":"managed-or-self-hosted","title":"What to run yourself, and what to pay for","url":"https://addaly.com/learn/cloud-and-shipping/managed-or-self-hosted","api":"https://addaly.com/api/lesson/cloud-and-shipping/managed-or-self-hosted","minutes":9,"keyIdea":"Compare money against hours of attention, not money against money: buy the stateful things whose backup, restore and upgrade obligations would eat your weekends, run the stateless ones that recover by restarting, and check how you would leave before you join."},{"slug":"upgrades-and-end-of-life","title":"The upgrade you keep postponing","url":"https://addaly.com/learn/cloud-and-shipping/upgrades-and-end-of-life","api":"https://addaly.com/api/lesson/cloud-and-shipping/upgrades-and-end-of-life","minutes":9,"keyIdea":"End-of-life dates are published years ahead and arrive anyway, so keep dependencies moving weekly, take one major upgrade a quarter in small steps, rehearse database upgrades because they do not roll back, and write down any version you are deliberately staying on."},{"slug":"the-cost-per-user","title":"What one user costs you","url":"https://addaly.com/learn/cloud-and-shipping/the-cost-per-user","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-cost-per-user","minutes":9,"keyIdea":"Divide the bill by active users, split it into fixed and variable, and price the one action that dominates the variable half; then test whether ten times the users would still be affordable, because the answer is nearly always one line item rather than the architecture."},{"slug":"moving-house","title":"Moving to another provider without losing a URL","url":"https://addaly.com/learn/cloud-and-shipping/moving-house","api":"https://addaly.com/api/lesson/cloud-and-shipping/moving-house","minutes":9,"keyIdea":"Migrate in parallel and in order (lower the DNS TTL days ahead, replicate the data continuously, cut over at the quiet hour with the old system still alive, and serve 301s for every old URL) because the one cost you cannot recover is a link that stops working."},{"slug":"the-maintenance-calendar","title":"The hour a week that keeps it alive","url":"https://addaly.com/learn/cloud-and-shipping/the-maintenance-calendar","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-maintenance-calendar","minutes":8,"keyIdea":"Everything that keeps a system healthy is recurring and forgettable, so put it in a calendar with intervals, one owner per item and a written note per run, and when you fall behind, restore a backup and review access before anything else."},{"slug":"turning-things-off","title":"Removing a feature, and retiring a site","url":"https://addaly.com/learn/cloud-and-shipping/turning-things-off","api":"https://addaly.com/api/lesson/cloud-and-shipping/turning-things-off","minutes":8,"keyIdea":"Removal is a shipping skill with a sequence: count real usage, announce with a date, offer an export, dark-launch the switch-off, remove code before data, and answer old URLs with a 301 or an honest 410 rather than a redirect to the homepage."},{"slug":"the-paperwork-of-a-public-site","title":"The pages every public site needs","url":"https://addaly.com/learn/cloud-and-shipping/the-paperwork-of-a-public-site","api":"https://addaly.com/api/lesson/cloud-and-shipping/the-paperwork-of-a-public-site","minutes":9,"keyIdea":"A public site needs terms, a truthful privacy policy written from your own schema, a reachable contact, visible rules and an honest tracking position; and the cleanest answer to consent banners is to set nothing that needs consent."},{"slug":"shipping-alone-sustainably","title":"Keeping it going without burning out","url":"https://addaly.com/learn/cloud-and-shipping/shipping-alone-sustainably","api":"https://addaly.com/api/lesson/cloud-and-shipping/shipping-alone-sustainably","minutes":9,"keyIdea":"Attention is the scarce resource in a small project, so decide in advance what is worth waking for, automate the frequent and write runbooks for the rare, refuse features you cannot maintain, and judge the system by how long it runs without you and how quickly you can understand it when you return."}]}]},{"slug":"building-apps-with-ai","title":"Building Apps with AI","tagline":"Build working software before you can write it, without fooling yourself.","description":"People who cannot really write code are shipping working software with Cursor, Claude Code, Replit, Lovable and Bolt. This course teaches that skill honestly: what the tools actually do, how to describe what you want, how to read code well enough to trust it, how to recover when the model breaks your app, git and deploying for people who have never done either, what it really costs, the security holes AI code has by default, and the point where you must learn to code properly or stop.","level":"beginner","track":"build","url":"https://addaly.com/learn/building-apps-with-ai","lessons":87,"minutes":713,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/building-apps-with-ai.pdf","pages":478,"bytes":5166355,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/building-apps-with-ai.pdf","cover":"https://addaly.com/textbooks/look/building-apps-with-ai/1.webp?v=2026-10-07-5166355"},"film":null,"modules":[{"slug":"the-machine-and-the-model","title":"The machine, and what the model can see of it","summary":"Before the first prompt, four things have to be true: you know which kind of tool you are holding, you know what a web app is made of, you know what the model can and cannot see of your project, and your computer can actually run the thing. This block sets all four up, including the free routes for a phone or a laptop that will not hold a build.","outcome":"Choose between an inline completion tool, an editor agent and a prompt-to-app platform for a given job, name the four parts of a running web app and which of them the model can observe, and get a project running on your own machine or a free hosted one without asking anybody for help.","lessons":[{"slug":"what-these-tools-actually-do","title":"What these tools actually do","url":"https://addaly.com/learn/building-apps-with-ai/what-these-tools-actually-do","api":"https://addaly.com/api/lesson/building-apps-with-ai/what-these-tools-actually-do","minutes":8,"keyIdea":"These tools generate plausible code quickly; deciding whether it is correct is still entirely your job."},{"slug":"what-a-web-app-is-made-of","title":"What a web app is actually made of","url":"https://addaly.com/learn/building-apps-with-ai/what-a-web-app-is-made-of","api":"https://addaly.com/api/lesson/building-apps-with-ai/what-a-web-app-is-made-of","minutes":9,"keyIdea":"Every web app is a browser, a server, a database and the network between them; the browser is a stranger's machine, so nothing enforced there is enforced at all."},{"slug":"the-context-window-is-the-memory","title":"The context window is the whole memory","url":"https://addaly.com/learn/building-apps-with-ai/the-context-window-is-the-memory","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-context-window-is-the-memory","minutes":9,"keyIdea":"The model knows only what is in this turn's context window, so most surprising behaviour is a file it never read rather than a mistake it made."},{"slug":"what-the-model-cannot-see","title":"What the model cannot see, and how to give it eyes","url":"https://addaly.com/learn/building-apps-with-ai/what-the-model-cannot-see","api":"https://addaly.com/api/lesson/building-apps-with-ai/what-the-model-cannot-see","minutes":8,"keyIdea":"Most of what the model gets wrong is something you can see and it cannot, so the fix is usually to paste the error, the data or the screen rather than to argue."},{"slug":"a-machine-that-can-build","title":"Getting a machine that can actually build","url":"https://addaly.com/learn/building-apps-with-ai/a-machine-that-can-build","api":"https://addaly.com/api/lesson/building-apps-with-ai/a-machine-that-can-build","minutes":9,"keyIdea":"A working setup is Node via a version manager, git, an editor and WSL on Windows; if you cannot install any of it, Codespaces or Replit is a real path rather than a compromise."},{"slug":"the-terminal-without-fear","title":"The terminal, for people who have been avoiding it","url":"https://addaly.com/learn/building-apps-with-ai/the-terminal-without-fear","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-terminal-without-fear","minutes":8,"keyIdea":"A terminal is either waiting for you or busy; read the last ten lines of any failure, and check the path in any command that deletes or force-pushes before agreeing to it."},{"slug":"choosing-a-stack-and-stopping","title":"Choosing a stack, and then stopping","url":"https://addaly.com/learn/building-apps-with-ai/choosing-a-stack-and-stopping","api":"https://addaly.com/api/lesson/building-apps-with-ai/choosing-a-stack-and-stopping","minutes":8,"keyIdea":"Pick a mainstream stack because models write it better, write the choice down where your tool reads it, and only reconsider when you hit a specific thing you cannot do."},{"slug":"the-rules-file-your-tool-reads","title":"The rules file, and what belongs in it","url":"https://addaly.com/learn/building-apps-with-ai/the-rules-file-your-tool-reads","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-rules-file-your-tool-reads","minutes":8,"keyIdea":"A rules file under two pages that names your stack, your file layout, your build command and the mistakes you have already made is the only text guaranteed to reach the model every turn."},{"slug":"autonomy-and-where-to-keep-your-hand","title":"Autonomy, and where to keep your hand","url":"https://addaly.com/learn/building-apps-with-ai/autonomy-and-where-to-keep-your-hand","api":"https://addaly.com/api/lesson/building-apps-with-ai/autonomy-and-where-to-keep-your-hand","minutes":8,"keyIdea":"Set autonomy by how cheaply you can verify the result, commit before any long run, and read the test-file diff whenever an agent reports that everything passes."}]},{"slug":"saying-what-you-want","title":"Saying what you want, precisely enough","summary":"A model will build whatever you describe and silently invent answers to everything you left out. Those inventions are next week's bugs. This block turns a sentence into something a stranger could build from: the data underneath, the screens on top, the slice you can check in two minutes, the acceptance checks written before the code, and the fence that stops an agent redecorating files you did not mention.","outcome":"Turn a one-line feature idea into a specification a stranger could build from (entities, actions, rules, failure paths and written acceptance checks) and name in advance the decisions a model will invent for you if you leave them unstated.","lessons":[{"slug":"describing-what-you-want","title":"Describing what you want","url":"https://addaly.com/learn/building-apps-with-ai/describing-what-you-want","api":"https://addaly.com/api/lesson/building-apps-with-ai/describing-what-you-want","minutes":8,"keyIdea":"Describe what must be true and what happens when it fails; the happy path writes itself."},{"slug":"the-data-model-before-the-screens","title":"The data model comes before the screens","url":"https://addaly.com/learn/building-apps-with-ai/the-data-model-before-the-screens","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-data-model-before-the-screens","minutes":9,"keyIdea":"Settle the nouns, their fields and how they relate before any screen exists, because a wrong data model outlives every other mistake in the project."},{"slug":"slicing-a-feature-into-checkable-steps","title":"Slicing a feature so every step is checkable","url":"https://addaly.com/learn/building-apps-with-ai/slicing-a-feature-into-checkable-steps","api":"https://addaly.com/api/lesson/building-apps-with-ai/slicing-a-feature-into-checkable-steps","minutes":8,"keyIdea":"Cut vertically through every layer in slices you can check in two minutes, prove the plumbing with a trivial walking skeleton first, and commit at each working step."},{"slug":"acceptance-checks-written-first","title":"Writing the acceptance checks before the code","url":"https://addaly.com/learn/building-apps-with-ai/acceptance-checks-written-first","api":"https://addaly.com/api/lesson/building-apps-with-ai/acceptance-checks-written-first","minutes":8,"keyIdea":"Write five given-when-then checks before the code (happy path, boundary, refusal, permission and recovery) because a check written afterwards only describes what the code already does."},{"slug":"sketching-the-screens","title":"Sketching the screens, including the empty ones","url":"https://addaly.com/learn/building-apps-with-ai/sketching-the-screens","api":"https://addaly.com/api/lesson/building-apps-with-ai/sketching-the-screens","minutes":8,"keyIdea":"Every data screen has four states and generated code builds only the loaded one, so write the empty, loading and error states into the request along with the phone-width layout."},{"slug":"naming-things-so-they-stay-findable","title":"Naming things so you can still find them","url":"https://addaly.com/learn/building-apps-with-ai/naming-things-so-they-stay-findable","api":"https://addaly.com/api/lesson/building-apps-with-ai/naming-things-so-they-stay-findable","minutes":8,"keyIdea":"Fix one word per concept and one naming convention per layer, because in code you did not write the names are the only index you have."},{"slug":"examples-beat-descriptions","title":"Examples beat descriptions","url":"https://addaly.com/learn/building-apps-with-ai/examples-beat-descriptions","api":"https://addaly.com/api/lesson/building-apps-with-ai/examples-beat-descriptions","minutes":8,"keyIdea":"Point at an existing file, paste three messy real rows, and write the exact output you expect: every ambiguity resolved by an example is one the model cannot invent an answer to."},{"slug":"fencing-the-change","title":"Fencing the change so it stays where you put it","url":"https://addaly.com/learn/building-apps-with-ai/fencing-the-change","api":"https://addaly.com/api/lesson/building-apps-with-ai/fencing-the-change","minutes":8,"keyIdea":"State which files may change and what must not be touched, ask for a file-by-file plan before code, and check the result with git diff --stat because a fence is a filter rather than an enforcement."},{"slug":"questions-the-model-should-ask-you","title":"Making the model ask before it guesses","url":"https://addaly.com/learn/building-apps-with-ai/questions-the-model-should-ask-you","api":"https://addaly.com/api/lesson/building-apps-with-ai/questions-the-model-should-ask-you","minutes":8,"keyIdea":"A model fills unstated gaps silently, so require questions before code on anything expensive to reverse and keep the answers in the repository as the start of a specification."}]},{"slug":"reading-and-checking","title":"Reading and checking what came back","summary":"Generated code arrives faster than anybody can read it, and the standard for accepting it is usually that it looked right. This block replaces that with a method: read the diff rather than the file, learn just enough HTML, JavaScript and SQL to audit rather than to author, use the browser's own instruments, and settle any claim with the smallest experiment that could disprove it.","outcome":"Audit a change you did not write: read its diff, find the query behind a page, inspect the running app with browser devtools, and design a two-minute experiment whose result would distinguish a working feature from one that only appears to work.","lessons":[{"slug":"reading-code-you-did-not-write","title":"Reading code you did not write","url":"https://addaly.com/learn/building-apps-with-ai/reading-code-you-did-not-write","api":"https://addaly.com/api/lesson/building-apps-with-ai/reading-code-you-did-not-write","minutes":9,"keyIdea":"Read code to answer one question at a time, and confirm claims by using the app rather than searching the text."},{"slug":"reading-a-diff-properly","title":"Reading a diff properly","url":"https://addaly.com/learn/building-apps-with-ai/reading-a-diff-properly","api":"https://addaly.com/api/lesson/building-apps-with-ai/reading-a-diff-properly","minutes":8,"keyIdea":"Read the removed lines before the added ones and start with git diff --stat, because unexpected files and swapped conditions are visible before you read any code."},{"slug":"the-shape-of-a-project","title":"The shape of a project you did not lay out","url":"https://addaly.com/learn/building-apps-with-ai/the-shape-of-a-project","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-shape-of-a-project","minutes":8,"keyIdea":"Package.json, the entry point and the routes folder map any project; keep components free of database access as a folder rule so you can check it by looking."},{"slug":"enough-html-and-css-to-audit","title":"Enough HTML and CSS to audit the screen","url":"https://addaly.com/learn/building-apps-with-ai/enough-html-and-css-to-audit","api":"https://addaly.com/api/lesson/building-apps-with-ai/enough-html-and-css-to-audit","minutes":8,"keyIdea":"Check that a form input's name matches what the server reads, that controls are real buttons and labels, and that the layout survives 360 pixels and the Tab key."},{"slug":"enough-javascript-to-review","title":"Enough JavaScript to review a change","url":"https://addaly.com/learn/building-apps-with-ai/enough-javascript-to-review","api":"https://addaly.com/api/lesson/building-apps-with-ai/enough-javascript-to-review","minutes":9,"keyIdea":"A missing await, a swallowed catch, an `any`, and a `use client` file that touches secrets account for most reviewable JavaScript defects in generated code."},{"slug":"reading-the-query-behind-the-page","title":"Reading the query behind the page","url":"https://addaly.com/learn/building-apps-with-ai/reading-the-query-behind-the-page","api":"https://addaly.com/api/lesson/building-apps-with-ai/reading-the-query-behind-the-page","minutes":9,"keyIdea":"Find the WHERE clause, confirm the user's identity in it came from the session, and check for a LIMIT and for queries running inside a loop."},{"slug":"devtools-as-an-x-ray","title":"The browser devtools as an x-ray","url":"https://addaly.com/learn/building-apps-with-ai/devtools-as-an-x-ray","api":"https://addaly.com/api/lesson/building-apps-with-ai/devtools-as-an-x-ray","minutes":8,"keyIdea":"Open the console for errors nobody read, the network panel to see whether a request happened and what came back, and throttle to Slow 4G before you show anybody the app."},{"slug":"the-smallest-experiment","title":"The smallest experiment that settles it","url":"https://addaly.com/learn/building-apps-with-ai/the-smallest-experiment","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-smallest-experiment","minutes":8,"keyIdea":"Predict the result before you run it, change one thing, and break the code you think is responsible to confirm the behaviour actually depends on it."},{"slug":"printing-what-you-cannot-see","title":"Printing what you cannot see","url":"https://addaly.com/learn/building-apps-with-ai/printing-what-you-cannot-see","api":"https://addaly.com/api/lesson/building-apps-with-ai/printing-what-you-cannot-see","minutes":8,"keyIdea":"Numbered prints of the actual values at each boundary locate a failure faster than reasoning about the code, and a console.log of a request body is how apps accidentally write passwords into their logs."}]},{"slug":"when-it-breaks","title":"When it breaks, and getting back","summary":"Everybody building this way meets the same hour: something errors, the model changes files, a different error appears, and two hours later the app will not start. That hour is a procedure problem rather than a prompting problem. This block gives you the procedure: read the error, classify the failure, find the change that caused it, verify that a fix is a fix, and know when to abandon a conversation or a feature.","outcome":"Recover a broken app on purpose: read a stack trace to the line in your own code, classify a failure by where it happened, find the exact change that introduced it, distinguish a real fix from a silenced symptom, and write a question a stranger could answer.","lessons":[{"slug":"when-the-model-breaks-your-app","title":"When the model breaks your app","url":"https://addaly.com/learn/building-apps-with-ai/when-the-model-breaks-your-app","api":"https://addaly.com/api/lesson/building-apps-with-ai/when-the-model-breaks-your-app","minutes":8,"keyIdea":"Two failed fixes means stop, revert to a working state, and reproduce the bug before asking again."},{"slug":"anatomy-of-an-error-message","title":"The anatomy of an error message","url":"https://addaly.com/learn/building-apps-with-ai/anatomy-of-an-error-message","api":"https://addaly.com/api/lesson/building-apps-with-ai/anatomy-of-an-error-message","minutes":8,"keyIdea":"Read the error type, the message, and the first stack line naming your own file; the frame below the crash usually holds the mistake that produced the bad value."},{"slug":"classifying-the-failure","title":"Classifying the failure before you fix it","url":"https://addaly.com/learn/building-apps-with-ai/classifying-the-failure","api":"https://addaly.com/api/lesson/building-apps-with-ai/classifying-the-failure","minutes":8,"keyIdea":"Place a failure in the browser, the server, the database or the network before diagnosing it, because a silent wrong answer and a 500 need completely different first moves."},{"slug":"finding-the-change-that-broke-it","title":"Finding the change that broke it","url":"https://addaly.com/learn/building-apps-with-ai/finding-the-change-that-broke-it","api":"https://addaly.com/api/lesson/building-apps-with-ai/finding-the-change-that-broke-it","minutes":8,"keyIdea":"Answer when it last worked with a commit, then halve the range instead of reading every diff; handing over the culprit commit's diff beats describing the symptom."},{"slug":"dependency-trouble","title":"Dependency trouble, and the lock file","url":"https://addaly.com/learn/building-apps-with-ai/dependency-trouble","api":"https://addaly.com/api/lesson/building-apps-with-ai/dependency-trouble","minutes":8,"keyIdea":"Commit the lock file and reach for npm ci before deleting it, because removing the lock to fix a problem silently changes several hundred versions at once."},{"slug":"it-builds-here-but-not-there","title":"It works here and not there","url":"https://addaly.com/learn/building-apps-with-ai/it-builds-here-but-not-there","api":"https://addaly.com/api/lesson/building-apps-with-ai/it-builds-here-but-not-there","minutes":8,"keyIdea":"Filename case, missing environment variables and the gap between the dev server and a real build cause most first deployments to fail; running npm run build and npm run start locally catches nearly all of it."},{"slug":"was-it-actually-fixed","title":"Was it actually fixed, or just silenced","url":"https://addaly.com/learn/building-apps-with-ai/was-it-actually-fixed","api":"https://addaly.com/api/lesson/building-apps-with-ai/was-it-actually-fixed","minutes":8,"keyIdea":"Undo the fix and confirm the bug returns; if it does not, the change you are about to keep is not what altered the behaviour."},{"slug":"restarting-the-conversation","title":"Knowing when to restart the conversation","url":"https://addaly.com/learn/building-apps-with-ai/restarting-the-conversation","api":"https://addaly.com/api/lesson/building-apps-with-ai/restarting-the-conversation","minutes":8,"keyIdea":"A long session accumulates failed theories that compete with the useful context, so ask for a written handover and restart at a clean commit rather than persuading a conversation out of its own history."},{"slug":"asking-a-human","title":"Asking a human, and getting an answer","url":"https://addaly.com/learn/building-apps-with-ai/asking-a-human","api":"https://addaly.com/api/lesson/building-apps-with-ai/asking-a-human","minutes":8,"keyIdea":"A question with the goal, the steps, the exact error text, the expected result and what you already tried gets answered; building the minimal reproduction solves the problem about half the time before you ask."}]},{"slug":"save-points-and-shipping","title":"Save points, and shipping to a stranger","summary":"Everything before this block happened on one machine with no memory of yesterday. This block gives the project a history and an address: what a commit really holds, the three different ways back, branches so an agent's bad afternoon never touches the working app, a remote so the record is yours, and then the shipping half (the variable prefix that leaks secrets to every visitor, why a failed build looks like nothing changed, and a domain with its padlock).","outcome":"Keep a project in git well enough to undo any hour (stage part of a change, restore one file, revert a pushed commit, recover from a bad reset, branch for an agent's work and merge it back) and put the app on a free host with a real domain, environment variables scoped per environment, and a version stamp that says which commit is live.","lessons":[{"slug":"git-when-you-have-never-used-it","title":"Save points: git when you have never used it","url":"https://addaly.com/learn/building-apps-with-ai/git-when-you-have-never-used-it","api":"https://addaly.com/api/lesson/building-apps-with-ai/git-when-you-have-never-used-it","minutes":9,"keyIdea":"A commit made while the app works is the only thing that makes a bad hour cost an hour."},{"slug":"what-a-commit-actually-is","title":"What a commit actually is","url":"https://addaly.com/learn/building-apps-with-ai/what-a-commit-actually-is","api":"https://addaly.com/api/lesson/building-apps-with-ai/what-a-commit-actually-is","minutes":8,"keyIdea":"A commit is a snapshot of whatever you staged, not a list of edits, so staging is where you decide which of today's changes belong together."},{"slug":"three-ways-back","title":"Three ways back, and the undo for undo","url":"https://addaly.com/learn/building-apps-with-ai/three-ways-back","api":"https://addaly.com/api/lesson/building-apps-with-ai/three-ways-back","minutes":9,"keyIdea":"Restore one file, revert one commit, or reset everything: they are different operations, and once a commit has been pushed only revert is safe."},{"slug":"branches-for-the-risky-change","title":"Branches for the risky change","url":"https://addaly.com/learn/building-apps-with-ai/branches-for-the-risky-change","api":"https://addaly.com/api/lesson/building-apps-with-ai/branches-for-the-risky-change","minutes":8,"keyIdea":"A branch is a movable name for a commit, so an agent's failed afternoon on a branch costs one delete command and main never saw it."},{"slug":"github-and-the-remote","title":"GitHub, and what a remote is for","url":"https://addaly.com/learn/building-apps-with-ai/github-and-the-remote","api":"https://addaly.com/api/lesson/building-apps-with-ai/github-and-the-remote","minutes":9,"keyIdea":"A remote is another copy of the history that only accepts commits building on what it already has, which is what a rejected push is telling you."},{"slug":"merge-conflicts-without-panic","title":"Merge conflicts without panic","url":"https://addaly.com/learn/building-apps-with-ai/merge-conflicts-without-panic","api":"https://addaly.com/api/lesson/building-apps-with-ai/merge-conflicts-without-panic","minutes":7,"keyIdea":"Git only stops where two sides changed the same lines; the merges that hurt are the clean ones, so build after every merge."},{"slug":"letting-the-agent-use-git","title":"Letting the agent use git, within limits","url":"https://addaly.com/learn/building-apps-with-ai/letting-the-agent-use-git","api":"https://addaly.com/api/lesson/building-apps-with-ai/letting-the-agent-use-git","minutes":8,"keyIdea":"An agent that wants a clean working tree will discard your uncommitted work to get one, so commit before every session and forbid the four destructive commands in writing."},{"slug":"deploying-for-a-stranger","title":"Deploying so a stranger can open it","url":"https://addaly.com/learn/building-apps-with-ai/deploying-for-a-stranger","api":"https://addaly.com/api/lesson/building-apps-with-ai/deploying-for-a-stranger","minutes":8,"keyIdea":"Production differs from your laptop in configuration, case sensitivity and users, so deploy on day two, not week three."},{"slug":"environment-variables-and-the-two-worlds","title":"Environment variables, and the prefix that leaks","url":"https://addaly.com/learn/building-apps-with-ai/environment-variables-and-the-two-worlds","api":"https://addaly.com/api/lesson/building-apps-with-ai/environment-variables-and-the-two-worlds","minutes":9,"keyIdea":"A variable with a public prefix is copied into the JavaScript every visitor downloads, so a secret with that prefix is not a secret."},{"slug":"which-version-is-live","title":"Which version is live","url":"https://addaly.com/learn/building-apps-with-ai/which-version-is-live","api":"https://addaly.com/api/lesson/building-apps-with-ai/which-version-is-live","minutes":8,"keyIdea":"A failed build leaves the last good deployment serving, so 'I pushed and nothing changed' is usually a build log you have not read yet."},{"slug":"a-domain-of-your-own","title":"A domain of your own","url":"https://addaly.com/learn/building-apps-with-ai/a-domain-of-your-own","api":"https://addaly.com/api/lesson/building-apps-with-ai/a-domain-of-your-own","minutes":8,"keyIdea":"DNS answers are cached for the record's TTL, so a change reaches different devices at different times and 'works on my phone, not my laptop' is normal for an hour."}]},{"slug":"the-parts-that-persist","title":"The parts that persist: data, accounts and files","summary":"A prototype keeps its data in a variable and its users in a single hard-coded account, and both vanish the moment a second person or a second process appears. This block adds the parts that outlive a request: a database chosen on purpose, migrations that change it without losing anything, the four columns every table needs, sign-in from a library rather than from scratch, sessions as the only source of identity, uploads in object storage, a backup you have actually restored, and an arrangement that keeps the production credential out of the agent's reach.","outcome":"Add a database, sign-in and file uploads to an app without losing anybody's data: choose between SQLite, hosted Postgres and hosted SQLite for a given host, read a generated migration and run it as a deploy step, explain why a session cookie is the only evidence of identity, keep uploads out of the repository and the database, restore a backup into a fresh database, and diagnose a page that runs one query per row.","lessons":[{"slug":"where-the-data-goes-when-the-app-restarts","title":"Where the data goes when the app restarts","url":"https://addaly.com/learn/building-apps-with-ai/where-the-data-goes-when-the-app-restarts","api":"https://addaly.com/api/lesson/building-apps-with-ai/where-the-data-goes-when-the-app-restarts","minutes":8,"keyIdea":"Anything held in a variable or written to the app's own disk vanishes on a serverless host, so the first real decision is which database, and SQLite is the honest place to start until you deploy."},{"slug":"the-schema-and-the-migration","title":"The schema, and the migration that changes it","url":"https://addaly.com/learn/building-apps-with-ai/the-schema-and-the-migration","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-schema-and-the-migration","minutes":9,"keyIdea":"A migration is a numbered, forward-only file that changes the tables, and the one command that skips migrations by resetting the database is the one that deletes everybody's data."},{"slug":"the-columns-every-table-needs","title":"The columns every table needs","url":"https://addaly.com/learn/building-apps-with-ai/the-columns-every-table-needs","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-columns-every-table-needs","minutes":7,"keyIdea":"A generated schema gives each table exactly the columns the feature mentioned, and the owner, timestamps and deletion marker it left out are the ones the next feature and the first security fix will need."},{"slug":"seed-data-and-the-empty-state","title":"Seed data, and the empty state nobody tested","url":"https://addaly.com/learn/building-apps-with-ai/seed-data-and-the-empty-state","api":"https://addaly.com/api/lesson/building-apps-with-ai/seed-data-and-the-empty-state","minutes":7,"keyIdea":"Development with a full database hides the empty state every new user meets first, so seed on purpose and test with zero, one and ten thousand rows."},{"slug":"sign-in-without-writing-it-yourself","title":"Sign-in, without writing it yourself","url":"https://addaly.com/learn/building-apps-with-ai/sign-in-without-writing-it-yourself","api":"https://addaly.com/api/lesson/building-apps-with-ai/sign-in-without-writing-it-yourself","minutes":9,"keyIdea":"Authentication is the one feature where the model's from-scratch answer is dangerous even when it works, so use a library or a hosted provider and learn the six-step OAuth dance well enough to debug the redirect error."},{"slug":"sessions-cookies-and-who-you-are","title":"Sessions, cookies, and who the server thinks you are","url":"https://addaly.com/learn/building-apps-with-ai/sessions-cookies-and-who-you-are","api":"https://addaly.com/api/lesson/building-apps-with-ai/sessions-cookies-and-who-you-are","minutes":8,"keyIdea":"Every request is a stranger until the server looks up the session cookie, so the user's identity must come from that lookup and never from anything the request body says about itself."},{"slug":"files-and-uploads","title":"Files and uploads, and where they must not go","url":"https://addaly.com/learn/building-apps-with-ai/files-and-uploads","api":"https://addaly.com/api/lesson/building-apps-with-ai/files-and-uploads","minutes":8,"keyIdea":"Uploaded files belong in object storage with only their address in the database, because the app's own disk is temporary and a table of blobs slows every query that touches it."},{"slug":"backups-and-restore-once","title":"Backups, and restoring one before you need to","url":"https://addaly.com/learn/building-apps-with-ai/backups-and-restore-once","api":"https://addaly.com/api/lesson/building-apps-with-ai/backups-and-restore-once","minutes":7,"keyIdea":"A backup you have never restored is a hope, and the free tier's restore window is measured in hours, so make a dump you own and restore it into a fresh database once."},{"slug":"the-database-and-the-agent","title":"The database and the agent","url":"https://addaly.com/learn/building-apps-with-ai/the-database-and-the-agent","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-database-and-the-agent","minutes":8,"keyIdea":"An agent that can read your .env can reach production, so give it the schema and a development database, and never the connection string that holds real people's rows."},{"slug":"when-the-data-gets-big-enough-to-notice","title":"When the data gets big enough to notice","url":"https://addaly.com/learn/building-apps-with-ai/when-the-data-gets-big-enough-to-notice","api":"https://addaly.com/api/lesson/building-apps-with-ai/when-the-data-gets-big-enough-to-notice","minutes":8,"keyIdea":"A page that was instant at a hundred rows and takes thirty seconds at a hundred thousand is usually one query per row or a missing index, and both are found by counting queries and reading the plan."}]},{"slug":"a-model-inside-your-app","title":"Putting a model inside your own app","summary":"Once an app works, the next request is always an AI feature, and the generated version calls the provider from the browser with the key in public. This block builds the feature the way it survives users: the call from your own server with a timeout and streaming, the prompt as a versioned file, user text treated as untrusted, answers in a declared shape validated in code, three caps on cost, a fallback for the provider's bad hour, retrieval that never crosses the user boundary, a twenty-item set that says whether a change helped, and the honest label on top.","outcome":"Add an AI feature to an app that survives contact with users: call the model only from a server route, cap what one user can spend in three places, validate structured output before anything reads it, explain why prompt injection is defeated by limiting consequences rather than by wording, scope retrieval to the session before ranking, and run a fixed set of inputs before every prompt or model change.","lessons":[{"slug":"the-key-never-goes-to-the-browser","title":"The key never goes to the browser","url":"https://addaly.com/learn/building-apps-with-ai/the-key-never-goes-to-the-browser","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-key-never-goes-to-the-browser","minutes":8,"keyIdea":"Anything the browser has, every visitor has, so the model is called from your own server route and the browser only ever talks to you."},{"slug":"the-first-call-from-your-own-server","title":"The first call from your own server","url":"https://addaly.com/learn/building-apps-with-ai/the-first-call-from-your-own-server","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-first-call-from-your-own-server","minutes":9,"keyIdea":"A model call is an HTTP request that can take twenty seconds, so it needs a timeout, an error path for each status, and streaming before it feels like a feature rather than a hang."},{"slug":"the-prompt-is-a-file-not-a-string","title":"The prompt is a file, not a string","url":"https://addaly.com/learn/building-apps-with-ai/the-prompt-is-a-file-not-a-string","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-prompt-is-a-file-not-a-string","minutes":7,"keyIdea":"A prompt is code that changes behaviour, so it lives in a versioned file, is stamped into every log line it produced, and is changed on a branch like anything else."},{"slug":"user-text-inside-a-prompt-is-untrusted","title":"User text inside a prompt is untrusted","url":"https://addaly.com/learn/building-apps-with-ai/user-text-inside-a-prompt-is-untrusted","api":"https://addaly.com/api/lesson/building-apps-with-ai/user-text-inside-a-prompt-is-untrusted","minutes":9,"keyIdea":"A model cannot tell instructions from data, so the defence against injected text is not a better prompt but limiting what the model's output is allowed to cause."},{"slug":"structured-answers-you-can-render","title":"Structured answers you can render","url":"https://addaly.com/learn/building-apps-with-ai/structured-answers-you-can-render","api":"https://addaly.com/api/lesson/building-apps-with-ai/structured-answers-you-can-render","minutes":8,"keyIdea":"Ask for JSON in a declared shape, validate it in code before anything reads it, retry once with the error, and have a plan for the second failure, because the model will invent a fifth value for a four-value field."},{"slug":"capping-what-one-user-can-cost","title":"Capping what one user can cost you","url":"https://addaly.com/learn/building-apps-with-ai/capping-what-one-user-can-cost","api":"https://addaly.com/api/lesson/building-apps-with-ai/capping-what-one-user-can-cost","minutes":8,"keyIdea":"Cost is tokens in plus tokens out, per call, per user, per day, and it needs three caps in three places: a hard limit at the provider, a per-user count in your own table, and a maximum length on every request."},{"slug":"when-the-model-is-down-or-slow","title":"When the model is down, slow or empty","url":"https://addaly.com/learn/building-apps-with-ai/when-the-model-is-down-or-slow","api":"https://addaly.com/api/lesson/building-apps-with-ai/when-the-model-is-down-or-slow","minutes":7,"keyIdea":"The provider will have a bad hour, so the feature degrades on its own (a bounded retry, a second model behind the same interface, or an honest unavailable message) and the rest of the app carries on."},{"slug":"giving-the-model-your-own-data","title":"Giving the model your own data","url":"https://addaly.com/learn/building-apps-with-ai/giving-the-model-your-own-data","api":"https://addaly.com/api/lesson/building-apps-with-ai/giving-the-model-your-own-data","minutes":10,"keyIdea":"The model knows nothing about your database; the app fetches the rows this user may see, puts them in the prompt, and asks; and an embedding is how it finds the rows that are about the question rather than the ones that share its words."},{"slug":"is-the-feature-actually-good","title":"Is the feature actually good","url":"https://addaly.com/learn/building-apps-with-ai/is-the-feature-actually-good","api":"https://addaly.com/api/lesson/building-apps-with-ai/is-the-feature-actually-good","minutes":7,"keyIdea":"Twenty fixed inputs with a written expectation each, run by a script before every prompt or model change, is the smallest thing that turns 'it seems better' into a number you can compare."},{"slug":"telling-users-it-is-ai","title":"Telling users it is AI, and what you send about them","url":"https://addaly.com/learn/building-apps-with-ai/telling-users-it-is-ai","api":"https://addaly.com/api/lesson/building-apps-with-ai/telling-users-it-is-ai","minutes":7,"keyIdea":"Every AI feature says it is one where it appears, sends the provider no more than the feature needs, and is built knowing that the rules on disclosure and data differ by country and are still moving."}]},{"slug":"the-holes-ai-code-has-by-default","title":"The security holes AI code has by default","summary":"A model writes code that works when you try it, and you try it as yourself, logged in, doing the intended thing. This block is about the unintended thing: the check that only tests ownership when three kinds of person see the row, the key in the built bundle and in a three-week-old commit, injection through the shell and the server's own HTTP client, the body spread into an update, the one prop that turns off escaping, the sign-up flood, the upload that is a document, the admin page that was merely unlinked, and what a model's review of its own code can and cannot find.","outcome":"Audit a generated app for the holes it has by default: write a single authorisation function and test it with three accounts, find a secret in the built bundle or the git history and revoke it in the right order, locate string-built SQL, shell commands and server-side fetches of user URLs, refuse unknown fields with a strict schema, sanitise at the one prop that injects HTML, limit sign-up and expensive routes with a bot check and per-account counters, detect an upload by its bytes, gate admin routes against an allowlist the app cannot write, and run a per-route checklist plus a free scanner before each release.","lessons":[{"slug":"security-holes-ai-code-has-by-default","title":"The security holes AI code has by default","url":"https://addaly.com/learn/building-apps-with-ai/security-holes-ai-code-has-by-default","api":"https://addaly.com/api/lesson/building-apps-with-ai/security-holes-ai-code-has-by-default","minutes":10,"keyIdea":"Being logged in is not the same as being allowed; every query must be scoped to the user the session says you are."},{"slug":"authorisation-beyond-ownership","title":"Authorisation beyond ownership","url":"https://addaly.com/learn/building-apps-with-ai/authorisation-beyond-ownership","api":"https://addaly.com/api/lesson/building-apps-with-ai/authorisation-beyond-ownership","minutes":9,"keyIdea":"Most rows are seen by more than one kind of person, so the check is a single named function that answers 'may this user do this action to this row', called on every route and tested with three accounts rather than two."},{"slug":"the-built-bundle-and-the-history","title":"Secrets in the built bundle, and in the history","url":"https://addaly.com/learn/building-apps-with-ai/the-built-bundle-and-the-history","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-built-bundle-and-the-history","minutes":8,"keyIdea":"Search the built output and the whole git history for keys, because a secret is leaked by the build that inlines it and the commit that once held it, not only by the file you can see today."},{"slug":"injection-in-three-places","title":"Injection in three places: the query, the shell, the URL","url":"https://addaly.com/learn/building-apps-with-ai/injection-in-three-places","api":"https://addaly.com/api/lesson/building-apps-with-ai/injection-in-three-places","minutes":9,"keyIdea":"Injection is user text reaching an interpreter as code, and there are three interpreters in a typical app (the database, the shell and the server's own HTTP client) each with the same fix: pass data as data, never by building the command from strings."},{"slug":"validate-at-the-edge-and-mass-assignment","title":"Validate at the edge, and the field nobody meant to accept","url":"https://addaly.com/learn/building-apps-with-ai/validate-at-the-edge-and-mass-assignment","api":"https://addaly.com/api/lesson/building-apps-with-ai/validate-at-the-edge-and-mass-assignment","minutes":8,"keyIdea":"A route that spreads the request body into an update accepts every column the caller chooses to send, so every route declares the fields it takes with a schema and ignores the rest."},{"slug":"xss-and-the-dangerously-named-prop","title":"Cross-site scripting, and the prop with the honest name","url":"https://addaly.com/learn/building-apps-with-ai/xss-and-the-dangerously-named-prop","api":"https://addaly.com/api/lesson/building-apps-with-ai/xss-and-the-dangerously-named-prop","minutes":8,"keyIdea":"Frameworks escape text by default, so XSS in a generated app arrives through the one prop that turns it off (usually to render markdown or a model's output) and the fix is to sanitise at that exact point."},{"slug":"rate-limits-and-the-sign-up-flood","title":"Rate limits, and the sign-up flood","url":"https://addaly.com/learn/building-apps-with-ai/rate-limits-and-the-sign-up-flood","api":"https://addaly.com/api/lesson/building-apps-with-ai/rate-limits-and-the-sign-up-flood","minutes":8,"keyIdea":"Any route a script can call will be called ten thousand times, so the expensive and the account-creating routes get a bot check before sign-in and a per-account limit after it, and the per-address limit is set knowing that one address can be a whole city."},{"slug":"uploads-that-run","title":"Uploads that run","url":"https://addaly.com/learn/building-apps-with-ai/uploads-that-run","api":"https://addaly.com/api/lesson/building-apps-with-ai/uploads-that-run","minutes":8,"keyIdea":"A file's extension and declared type are claims the uploader made, so the server reads the first bytes to decide what it is, serves it from a different origin, and never lets the uploader choose the name on disk."},{"slug":"the-admin-page-nobody-protected","title":"The admin page nobody protected","url":"https://addaly.com/learn/building-apps-with-ai/the-admin-page-nobody-protected","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-admin-page-nobody-protected","minutes":8,"keyIdea":"An admin route is protected by a check in the route itself against an allowlist the app cannot write to, not by being unlinked, not by a flag a form can set, and not only by middleware."},{"slug":"asking-the-model-to-audit-itself","title":"Asking the model to audit itself, and what it cannot see","url":"https://addaly.com/learn/building-apps-with-ai/asking-the-model-to-audit-itself","api":"https://addaly.com/api/lesson/building-apps-with-ai/asking-the-model-to-audit-itself","minutes":8,"keyIdea":"A model reviewing code finds the holes that are visible in the code (a missing check, a raw query, a spread body) and cannot find the ones that live in what the code does not say, so the review is a per-route checklist plus a free scanner plus a person when the stakes are high."}]},{"slug":"what-it-costs-and-where-this-stops","title":"What it costs, running it, and where this stops","summary":"A shipped app has a bill, a set of free tiers that end by three different mechanisms, users who write 'it doesn't work', a privacy notice it probably lacks, and a release routine it needs. This block runs the app for other people at a known cost, and then names the point at which building without understanding stops working, what to learn to get past it, in what order, from which free resources, and how to use the model as a tutor rather than a builder. It ends with one real thing, built for one real person, and the checklist that is the whole course on a page.","outcome":"Run a small app for other people at a known monthly cost (say for each service whether it pauses, slows or bills at its limit, catch what throws, what is down and what is merely wrong with three different watchers, turn 'it doesn't work' into a log line and a regression item, write the privacy notice and the deletion path a public site needs, release with an additive migration and a flag, hand the project to a developer with a README that runs) and recognise the specific point at which to learn to code, with a sixty-hour path to get there.","lessons":[{"slug":"what-it-costs","title":"What it actually costs","url":"https://addaly.com/learn/building-apps-with-ai/what-it-costs","api":"https://addaly.com/api/lesson/building-apps-with-ai/what-it-costs","minutes":7,"keyIdea":"Usage-based costs need a hard cap at the provider and a per-user limit in your own code, set before launch."},{"slug":"the-free-tiers-and-where-they-end","title":"The free tiers, and exactly where they end","url":"https://addaly.com/learn/building-apps-with-ai/the-free-tiers-and-where-they-end","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-free-tiers-and-where-they-end","minutes":8,"keyIdea":"Each free tier ends by one of three mechanisms (it pauses, it slows, or it bills) and reading which one applies to each service you depend on is what decides whether a busy day is a dead site or an invoice."},{"slug":"knowing-it-broke-before-users-tell-you","title":"Knowing it broke before users tell you","url":"https://addaly.com/learn/building-apps-with-ai/knowing-it-broke-before-users-tell-you","api":"https://addaly.com/api/lesson/building-apps-with-ai/knowing-it-broke-before-users-tell-you","minutes":8,"keyIdea":"Error tracking catches what throws, uptime pings catch what is down, and a report button catches what is wrong: three different failures, and a shipped app needs all three because each is blind to the other two."},{"slug":"the-first-user-complaint","title":"The first user complaint","url":"https://addaly.com/learn/building-apps-with-ai/the-first-user-complaint","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-first-user-complaint","minutes":8,"keyIdea":"A complaint becomes solvable when it can be joined to a log line, so every error shown to a user carries a reference id, every log line carries the same id, and the fix ends with a new item in the regression set."},{"slug":"the-legal-minimum-of-a-public-site","title":"The legal minimum of a public site","url":"https://addaly.com/learn/building-apps-with-ai/the-legal-minimum-of-a-public-site","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-legal-minimum-of-a-public-site","minutes":9,"keyIdea":"A public site that stores anything about a person needs a privacy notice that lists the third parties the data reaches, a real deletion path that includes the backups, and an honest acknowledgement that the rules differ by the user's country and are not settled."},{"slug":"shipping-changes-without-breaking-what-works","title":"Shipping changes without breaking what works","url":"https://addaly.com/learn/building-apps-with-ai/shipping-changes-without-breaking-what-works","api":"https://addaly.com/api/lesson/building-apps-with-ai/shipping-changes-without-breaking-what-works","minutes":8,"keyIdea":"A release is a routine, not an event: additive migration first, code second, cleanup in a later release, a flag for anything you might need to turn off, and fifteen minutes watching the error tracker before you walk away."},{"slug":"handing-it-to-a-real-developer","title":"Handing it to a real developer","url":"https://addaly.com/learn/building-apps-with-ai/handing-it-to-a-real-developer","api":"https://addaly.com/api/lesson/building-apps-with-ai/handing-it-to-a-real-developer","minutes":8,"keyIdea":"A developer joining an AI-built project needs a README that runs, the rules file, the test scripts and the complaint list, and when they say the code should be rewritten, the working app and its users are evidence that deserves a specific reason."},{"slug":"where-you-have-to-learn-to-code","title":"Where you have to learn to code","url":"https://addaly.com/learn/building-apps-with-ai/where-you-have-to-learn-to-code","api":"https://addaly.com/api/lesson/building-apps-with-ai/where-you-have-to-learn-to-code","minutes":9,"keyIdea":"The limit is not app size or traffic; it is nobody holding an accurate model of how the system works."},{"slug":"the-learning-path-from-here","title":"The learning path from here, with the model as tutor","url":"https://addaly.com/learn/building-apps-with-ai/the-learning-path-from-here","api":"https://addaly.com/api/lesson/building-apps-with-ai/the-learning-path-from-here","minutes":9,"keyIdea":"Sixty hours in the right order (errors, one request end to end, your own data, fifty lines unaided, ten tests) with the model told to explain and question rather than write, turns a builder who guesses into one who reads."},{"slug":"building-one-real-thing","title":"Building one real thing","url":"https://addaly.com/learn/building-apps-with-ai/building-one-real-thing","api":"https://addaly.com/api/lesson/building-apps-with-ai/building-one-real-thing","minutes":10,"keyIdea":"The course is finished when a stranger has used something you built for a week, and the checklist of what 'built' means is the whole course in one page."}]}]},{"slug":"data-and-sql","title":"Data, SQL and Getting to the Answer","tagline":"Most AI problems turn out to be data problems. This is where you learn to ask a database a question and defend the answer.","description":"A first course in data for people who have never written a query. You will learn SELECT and WHERE, how to reason about joins instead of memorising diagrams, GROUP BY, the NULL rules that quietly break counts, what an index actually does, how to clean real exported data without destroying it, and how to tell a number that is technically correct from a number that answers the question you were asked. It ends with the part nobody teaches: how to get SQL out of an AI without being confidently misled.","level":"beginner","track":"build","url":"https://addaly.com/learn/data-and-sql","lessons":66,"minutes":560,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/data-and-sql.pdf","pages":376,"bytes":4536413,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/data-and-sql.pdf","cover":"https://addaly.com/textbooks/look/data-and-sql/1.webp?v=2026-10-07-4536413"},"film":null,"modules":[{"slug":"tables-types-and-the-question","title":"Tables, types and the question you are actually asking","summary":"Before any clever query there is a table, and a table is a set of promises: one kind of thing per row, a declared type per column, a key that survives a name change. This block gets a real database onto the machine you already own, teaches the vocabulary a schema is written in, and ends with the single sentence that prevents most wrong answers in the rest of the course.","outcome":"Set up a working database on your own machine, read an unfamiliar schema well enough to say what one row of each table means and which columns join to which, and state the grain of any result you are about to compute before you compute it.","lessons":[{"slug":"what-a-database-is","title":"When a spreadsheet stops working","url":"https://addaly.com/learn/data-and-sql/what-a-database-is","api":"https://addaly.com/api/lesson/data-and-sql/what-a-database-is","minutes":7,"keyIdea":"A database stores each fact once and enforces rules; a spreadsheet stores copies and enforces nothing."},{"slug":"a-place-to-practise","title":"Getting a database onto the machine you have","url":"https://addaly.com/learn/data-and-sql/a-place-to-practise","api":"https://addaly.com/api/lesson/data-and-sql/a-place-to-practise","minutes":8,"keyIdea":"You do not need a server to practise SQL: SQLite is one file, DuckDB queries a CSV where it lies, and Postgres is what to install when a job advert names it."},{"slug":"rows-columns-and-types","title":"What a column type actually buys you","url":"https://addaly.com/learn/data-and-sql/rows-columns-and-types","api":"https://addaly.com/api/lesson/data-and-sql/rows-columns-and-types","minutes":8,"keyIdea":"A column type is a refusal the database makes on your behalf; choose numeric for money, because a binary float cannot hold 0.10 exactly and the errors add up."},{"slug":"keys-and-identity","title":"Keys: how a database knows one thing from another","url":"https://addaly.com/learn/data-and-sql/keys-and-identity","api":"https://addaly.com/api/lesson/data-and-sql/keys-and-identity","minutes":8,"keyIdea":"A primary key answers \"is this the same thing as before?\", so it must be meaningless and permanent; a business rule such as a unique email sits beside it and is allowed to change."},{"slug":"one-fact-in-one-place","title":"Where each fact should live","url":"https://addaly.com/learn/data-and-sql/one-fact-in-one-place","api":"https://addaly.com/api/lesson/data-and-sql/one-fact-in-one-place","minutes":9,"keyIdea":"Store each fact once, where it is true; a value copied onto a row is only a duplicate if it is still supposed to change when the original does."},{"slug":"select-and-where","title":"SELECT and WHERE: asking for rows","url":"https://addaly.com/learn/data-and-sql/select-and-where","api":"https://addaly.com/api/lesson/data-and-sql/select-and-where","minutes":7,"keyIdea":"WHERE tests one row at a time, in isolation; it never sees the other rows that share a customer."},{"slug":"sorting-limits-and-ties","title":"Sorting, limits, and the rows that move between runs","url":"https://addaly.com/learn/data-and-sql/sorting-limits-and-ties","api":"https://addaly.com/api/lesson/data-and-sql/sorting-limits-and-ties","minutes":7,"keyIdea":"Without ORDER BY a result has no order, and with ORDER BY on a column that ties it has no order among the ties; add a unique column as the final sort key before you paginate."},{"slug":"case-expressions","title":"CASE, COALESCE and computing a column that does not exist","url":"https://addaly.com/learn/data-and-sql/case-expressions","api":"https://addaly.com/api/lesson/data-and-sql/case-expressions","minutes":7,"keyIdea":"CASE tests its branches strictly top to bottom and returns the first match, so the order you write the conditions in is part of the logic, not a matter of style."},{"slug":"reading-an-unfamiliar-schema","title":"Reading a database somebody else built","url":"https://addaly.com/learn/data-and-sql/reading-an-unfamiliar-schema","api":"https://addaly.com/api/lesson/data-and-sql/reading-an-unfamiliar-schema","minutes":9,"keyIdea":"In a schema you did not build, let the foreign keys draw the map, state each table's grain, and hunt for the status and soft-delete columns that silently filter everything."},{"slug":"the-grain-of-a-result","title":"Grain: the sentence to say before you write the query","url":"https://addaly.com/learn/data-and-sql/the-grain-of-a-result","api":"https://addaly.com/api/lesson/data-and-sql/the-grain-of-a-result","minutes":8,"keyIdea":"Say \"one row of my result is one ___\" before writing the query; every aggregate reads the joined grain, not the original table's, so a join that changes the grain is the whole hazard."},{"slug":"right-vs-useful","title":"A right number and a useful number are not the same","url":"https://addaly.com/learn/data-and-sql/right-vs-useful","api":"https://addaly.com/api/lesson/data-and-sql/right-vs-useful","minutes":9,"keyIdea":"A correct query answers the question you typed, which is rarely the question you were asked."},{"slug":"sql-from-an-ai","title":"Asking an AI for SQL without being lied to","url":"https://addaly.com/learn/data-and-sql/sql-from-an-ai","api":"https://addaly.com/api/lesson/data-and-sql/sql-from-an-ai","minutes":8,"keyIdea":"Paste your schema, ask for assumptions first, and check the number against something you already know."}]},{"slug":"putting-tables-together","title":"Putting tables together","summary":"Joins are where most SQL goes wrong, and almost always for one of four reasons: a key that does not match, a relationship that matches more than once, two child tables counted at the same time, or a filter placed on the wrong side. This block works through each mechanism, then adds the other ways of combining rows (set operations, subqueries, CTEs and a generated spine) so you can pick the one that keeps your grain intact.","outcome":"Combine any set of related tables without inflating a total: diagnose a join key that silently fails to match, recognise and defuse the fan trap between two child tables, choose between a join, a subquery, an EXISTS and a set operation, and generate the rows for periods in which nothing happened.","lessons":[{"slug":"joins-that-multiply","title":"Joins: reason about them, do not memorise them","url":"https://addaly.com/learn/data-and-sql/joins-that-multiply","api":"https://addaly.com/api/lesson/data-and-sql/joins-that-multiply","minutes":9,"keyIdea":"A join emits one row per match; zero matches and two matches are where every join bug lives."},{"slug":"the-four-joins","title":"The four joins, and what each one is for","url":"https://addaly.com/learn/data-and-sql/the-four-joins","api":"https://addaly.com/api/lesson/data-and-sql/the-four-joins","minutes":8,"keyIdea":"All four joins share one mechanism, one output row per match, and differ only in what they do with the leftovers; the row count after a join is the check that tells you whether a key matched more than once."},{"slug":"join-keys-that-do-not-match","title":"When the join key looks right and matches nothing","url":"https://addaly.com/learn/data-and-sql/join-keys-that-do-not-match","api":"https://addaly.com/api/lesson/data-and-sql/join-keys-that-do-not-match","minutes":8,"keyIdea":"Zero matched rows is usually a lie told by a type mismatch, an invisible character, a case or leading-zero difference, or a NULL; the diagnosis is to compare one pair of values by hand."},{"slug":"many-to-many-bridge-tables","title":"Many-to-many, and the table in the middle","url":"https://addaly.com/learn/data-and-sql/many-to-many-bridge-tables","api":"https://addaly.com/api/lesson/data-and-sql/many-to-many-bridge-tables","minutes":8,"keyIdea":"A many-to-many relationship needs a table in the middle, and when you count across it a LEFT JOIN's unmatched row still counts as a row unless you count the child's column rather than `*`."},{"slug":"the-fan-trap","title":"Two child tables, one very wrong total","url":"https://addaly.com/learn/data-and-sql/the-fan-trap","api":"https://addaly.com/api/lesson/data-and-sql/the-fan-trap","minutes":9,"keyIdea":"Two one-to-many joins from the same parent multiply each other; pre-aggregate each child to one row per parent, then join the summaries."},{"slug":"self-joins","title":"Joining a table to itself","url":"https://addaly.com/learn/data-and-sql/self-joins","api":"https://addaly.com/api/lesson/data-and-sql/self-joins","minutes":8,"keyIdea":"A self-join is the same table under two names; add `a.id < b.id` so that no row matches itself and no pair appears twice."},{"slug":"set-operations","title":"UNION, INTERSECT and EXCEPT","url":"https://addaly.com/learn/data-and-sql/set-operations","api":"https://addaly.com/api/lesson/data-and-sql/set-operations","minutes":7,"keyIdea":"UNION removes rows that are identical in every column, so it silently deletes genuine repeats; UNION ALL keeps everything and is the one to reach for by default."},{"slug":"subqueries-and-exists","title":"Subqueries: a query inside a query","url":"https://addaly.com/learn/data-and-sql/subqueries-and-exists","api":"https://addaly.com/api/lesson/data-and-sql/subqueries-and-exists","minutes":8,"keyIdea":"Reach for EXISTS and NOT EXISTS over IN and NOT IN: they say what you mean, cannot be poisoned by a NULL, and let the planner turn them into a join."},{"slug":"common-table-expressions","title":"CTEs: naming the steps","url":"https://addaly.com/learn/data-and-sql/common-table-expressions","api":"https://addaly.com/api/lesson/data-and-sql/common-table-expressions","minutes":7,"keyIdea":"A CTE names a step so a query reads in order; it is not a saved result, and since Postgres 12 it is inlined into the main query unless you write MATERIALIZED."},{"slug":"a-spine-to-join-against","title":"Generating the rows that are not there","url":"https://addaly.com/learn/data-and-sql/a-spine-to-join-against","api":"https://addaly.com/api/lesson/data-and-sql/a-spine-to-join-against","minutes":8,"keyIdea":"GROUP BY cannot produce a row for a period in which nothing happened; generate the spine of expected rows, LEFT JOIN the facts to it, and count the fact column rather than `*`."}]},{"slug":"summaries-and-the-piles-behind-them","title":"Summaries, and the piles behind them","summary":"A summary is a claim about a pile of rows, and most wrong summaries are right about the arithmetic and wrong about the pile. This block starts with GROUP BY and NULL, then works through the places an aggregate quietly changes meaning: integer division, averages of averages, percentiles, week boundaries, rates with a moving denominator, subtotals, wide reports built from long data, and the reconciliation habit that catches all of them before a number leaves your hands.","outcome":"Compute any count, sum, average, percentile or rate at a stated grain with NULLs and time boundaries handled deliberately, produce subtotals and a wide report from long data in one query, and reconcile every total against a figure you already trust before sending it.","lessons":[{"slug":"group-by","title":"GROUP BY: making piles and asking about each one","url":"https://addaly.com/learn/data-and-sql/group-by","api":"https://addaly.com/api/lesson/data-and-sql/group-by","minutes":7,"keyIdea":"Each aggregate answers a question about one pile, and COUNT(*) and COUNT(DISTINCT) are different questions."},{"slug":"null","title":"NULL, and why your counts are wrong","url":"https://addaly.com/learn/data-and-sql/null","api":"https://addaly.com/api/lesson/data-and-sql/null","minutes":8,"keyIdea":"WHERE keeps only rows where the test is true, and every comparison with NULL is unknown."},{"slug":"averages-that-lie","title":"Averages: the four ways AVG misleads","url":"https://addaly.com/learn/data-and-sql/averages-that-lie","api":"https://addaly.com/api/lesson/data-and-sql/averages-that-lie","minutes":9,"keyIdea":"An average is a sum divided by a count, and both halves can be silently wrong: integers truncate, unequal rows need weights, and averages of averages answer a different question than the average of the rows."},{"slug":"percentiles-and-distributions","title":"Percentiles: describing a distribution instead of its mean","url":"https://addaly.com/learn/data-and-sql/percentiles-and-distributions","api":"https://addaly.com/api/lesson/data-and-sql/percentiles-and-distributions","minutes":9,"keyIdea":"A percentile answers \"what value does a given share of rows fall below?\", and unlike sums, percentiles from two groups cannot be combined, so the raw rows or a sketch must be kept."},{"slug":"grouping-by-time","title":"Grouping by day, week and month without lying about the boundaries","url":"https://addaly.com/learn/data-and-sql/grouping-by-time","api":"https://addaly.com/api/lesson/data-and-sql/grouping-by-time","minutes":10,"keyIdea":"Group time with half-open ranges, a named time zone and a stated week start, because BETWEEN drops the last day, engines disagree on Monday versus Sunday, and a month is a different length from the last one."},{"slug":"ratios-and-rates","title":"Rates: a numerator, a denominator, and the same grain for both","url":"https://addaly.com/learn/data-and-sql/ratios-and-rates","api":"https://addaly.com/api/lesson/data-and-sql/ratios-and-rates","minutes":9,"keyIdea":"Compute a rate's numerator and denominator in one query from one filtered pile, sum each before dividing, guard the division with NULLIF, and show the denominator beside the result."},{"slug":"string-aggregation-and-arrays","title":"Listing the members of a pile: string_agg and array_agg","url":"https://addaly.com/learn/data-and-sql/string-aggregation-and-arrays","api":"https://addaly.com/api/lesson/data-and-sql/string-aggregation-and-arrays","minutes":7,"keyIdea":"string_agg and array_agg keep a pile's members instead of counting them; order inside the aggregate, watch MySQL's silent 1,024-character cut, and never store the joined list back into a column."},{"slug":"the-row-behind-the-max","title":"The row behind the MAX: which order was the biggest","url":"https://addaly.com/learn/data-and-sql/the-row-behind-the-max","api":"https://addaly.com/api/lesson/data-and-sql/the-row-behind-the-max","minutes":9,"keyIdea":"MAX returns a value with no memory of its row; to get the row, join back to the summary, use DISTINCT ON or arg_max, and compare output rows against group count to catch ties and all-NULL groups."},{"slug":"rollups-and-subtotals","title":"Subtotals and grand totals in one query: ROLLUP and GROUPING","url":"https://addaly.com/learn/data-and-sql/rollups-and-subtotals","api":"https://addaly.com/api/lesson/data-and-sql/rollups-and-subtotals","minutes":8,"keyIdea":"ROLLUP stacks several grains in one result, so use GROUPING() to tell a subtotal's NULL from a real one and never sum across the output, which counts each row once per level."},{"slug":"pivoting-rows-to-columns","title":"Wide and long: pivoting rows to columns and back","url":"https://addaly.com/learn/data-and-sql/pivoting-rows-to-columns","api":"https://addaly.com/api/lesson/data-and-sql/pivoting-rows-to-columns","minutes":9,"keyIdea":"Store and compute in long form and pivot only for display, because a query's columns are fixed at plan time and cannot be discovered from the data, and a wide table needs a schema change for every new period."},{"slug":"reconciling-a-total","title":"Reconciling: making a total tie out before you send it","url":"https://addaly.com/learn/data-and-sql/reconciling-a-total","api":"https://addaly.com/api/lesson/data-and-sql/reconciling-a-total","minutes":8,"keyIdea":"Before a total leaves your hands, make the grouped parts sum to the ungrouped whole, keep a row-count ledger across each join, tie the figure to an external number with the difference explained, and check one row by hand."}]},{"slug":"windows-sequences-and-time","title":"Windows, sequences and time","summary":"GROUP BY collapses a pile into one row. A window function looks at the pile and leaves the rows where they are, which is what every \"compared with the previous one\", \"rank within the group\", \"running total\" and \"seven-day average\" question needs. This block builds the window from its three parts, partition, order and frame, works through the questions it answers, and finishes with the two time problems that defeat plain joins: what was true as of a date, and how a cohort of customers behaves month by month.","outcome":"Answer any \"compared with what came before\" or \"which one within each group\" question (rank in group, top N per group, running total, change from the previous row, moving average, streaks, sessions and cohort retention) with a window function whose frame you can state, and join a fact to the value that was true at its own moment in time.","lessons":[{"slug":"what-a-window-is","title":"A window: GROUP BY that keeps the rows","url":"https://addaly.com/learn/data-and-sql/what-a-window-is","api":"https://addaly.com/api/lesson/data-and-sql/what-a-window-is","minutes":9,"keyIdea":"A window function computes an aggregate over a row's partition and writes it beside the row instead of collapsing the rows, and because it runs after WHERE you filter on its result in a second layer."},{"slug":"ranking-functions","title":"ROW_NUMBER, RANK and DENSE_RANK: three answers to \"what position\"","url":"https://addaly.com/learn/data-and-sql/ranking-functions","api":"https://addaly.com/api/lesson/data-and-sql/ranking-functions","minutes":8,"keyIdea":"row_number breaks every tie arbitrarily unless you give it a tiebreaker, rank shares positions and skips, dense_rank shares and does not skip, and the row count of a filtered ranking tells you which one you actually needed."},{"slug":"top-n-per-group","title":"Top N per group in two lines","url":"https://addaly.com/learn/data-and-sql/top-n-per-group","api":"https://addaly.com/api/lesson/data-and-sql/top-n-per-group","minutes":8,"keyIdea":"Top N per group is a ranking window in a CTE and a filter on the rank outside it; the function you rank with is a statement about ties, and the ORDER BY inside the window must end in a column that cannot tie."},{"slug":"running-totals-and-frames","title":"Running totals, and the frame you did not know you set","url":"https://addaly.com/learn/data-and-sql/running-totals-and-frames","api":"https://addaly.com/api/lesson/data-and-sql/running-totals-and-frames","minutes":9,"keyIdea":"An ORDER BY inside a window sets a frame whose default, RANGE up to the current row, includes tied rows; write ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW explicitly when you mean one row at a time."},{"slug":"lag-lead-and-change","title":"LAG and LEAD: the previous row, and the change since it","url":"https://addaly.com/learn/data-and-sql/lag-lead-and-change","api":"https://addaly.com/api/lesson/data-and-sql/lag-lead-and-change","minutes":9,"keyIdea":"LAG and LEAD read a fixed number of rows back or forward in the window's order, not a fixed distance in time, and last_value returns the current row unless the frame is extended to UNBOUNDED FOLLOWING."},{"slug":"moving-averages","title":"Moving averages: seven rows is not seven days","url":"https://addaly.com/learn/data-and-sql/moving-averages","api":"https://addaly.com/api/lesson/data-and-sql/moving-averages","minutes":8,"keyIdea":"A ROWS frame counts rows, so a seven-row average over a table with missing days is not a seven-day average; join to a spine or use a RANGE frame measured in time, and mark the first partial windows."},{"slug":"gaps-and-islands","title":"Streaks and sessions: gaps and islands","url":"https://addaly.com/learn/data-and-sql/gaps-and-islands","api":"https://addaly.com/api/lesson/data-and-sql/gaps-and-islands","minutes":9,"keyIdea":"Label each run of consecutive values with date minus row_number, or each session with a running sum of gap flags, then group by the label; the gap threshold is a definition that changes every downstream count."},{"slug":"cohorts-and-retention","title":"Cohorts and retention: how a month of new customers behaves afterwards","url":"https://addaly.com/learn/data-and-sql/cohorts-and-retention","api":"https://addaly.com/api/lesson/data-and-sql/cohorts-and-retention","minutes":10,"keyIdea":"A cohort is a group defined by a first event, retention is the share of it active at each age, and the grid is a triangle you read down a column only as far as every cohort has reached."},{"slug":"date-arithmetic-and-time-zones","title":"Dates, intervals and the two kinds of timestamp","url":"https://addaly.com/learn/data-and-sql/date-arithmetic-and-time-zones","api":"https://addaly.com/api/lesson/data-and-sql/date-arithmetic-and-time-zones","minutes":9,"keyIdea":"Store timestamptz and convert with a named zone at display time, because a plain timestamp discards where the clock was, and treat month arithmetic as a rule you chose, since engines disagree on what 31 January plus a month is."},{"slug":"as-of-joins","title":"As-of joins: the value that was true at the time","url":"https://addaly.com/learn/data-and-sql/as-of-joins","api":"https://addaly.com/api/lesson/data-and-sql/as-of-joins","minutes":10,"keyIdea":"A fact that changes must be joined as of the moment the other row happened, through an effective-dated table with half-open periods that you have checked for overlaps and gaps, or through a latest-before lookup."}]},{"slug":"data-that-arrives-dirty","title":"Data that arrives dirty","summary":"No table you are handed was made for the question you have. This block is the craft of getting a file into a database without losing a row, turning text that people typed into typed columns, deciding what a duplicate and a missing value mean, and checking the result with queries that fail loudly. It ends with the three lessons that Google's and Kaggle's curricula treat as most of the job: encoding categories, building a feature table for a model, and keeping the future out of it.","outcome":"Load an exported CSV with mixed encodings, ambiguous dates and duplicate rows into a typed, deduplicated table by re-runnable query with every dropped row counted, decide and document what each missing value means, and produce a feature table for a model in which no column knows anything that happened after its row's timestamp.","lessons":[{"slug":"messy-data","title":"Cleaning real data without destroying it","url":"https://addaly.com/learn/data-and-sql/messy-data","api":"https://addaly.com/api/lesson/data-and-sql/messy-data","minutes":9,"keyIdea":"Keep the raw data, clean it in a query you can re-run, and count every row you drop."},{"slug":"loading-a-file","title":"Getting a file in without losing a row","url":"https://addaly.com/learn/data-and-sql/loading-a-file","api":"https://addaly.com/api/lesson/data-and-sql/loading-a-file","minutes":9,"keyIdea":"Count lines before and rows after every load, and state the delimiter, quoting, header and encoding rather than letting the loader guess, because a wrong guess drops or splits rows without an error."},{"slug":"everything-as-text-first","title":"Stage as text, then cast in a query you can re-run","url":"https://addaly.com/learn/data-and-sql/everything-as-text-first","api":"https://addaly.com/api/lesson/data-and-sql/everything-as-text-first","minutes":8,"keyIdea":"Load every column as text into a raw table that is never updated, then cast in a view beside a query that lists and counts every value the cast would refuse, because a typed load has to be right about every row before any row is in."},{"slug":"dates-in-five-formats","title":"Parsing dates that were typed by people","url":"https://addaly.com/learn/data-and-sql/dates-in-five-formats","api":"https://addaly.com/api/lesson/data-and-sql/dates-in-five-formats","minutes":9,"keyIdea":"A slash-separated date is ambiguous unless some value has a day above 12, so test the column before choosing a pattern, parse in a view, and check the minimum, maximum and month histogram afterwards."},{"slug":"strings-trim-case-and-unicode","title":"Text that looks identical and is not","url":"https://addaly.com/learn/data-and-sql/strings-trim-case-and-unicode","api":"https://addaly.com/api/lesson/data-and-sql/strings-trim-case-and-unicode","minutes":9,"keyIdea":"Two strings that look identical can differ by invisible whitespace, case, or the Unicode form of an accent; build a normalised key column for grouping and joining and keep the original for display."},{"slug":"duplicates-and-which-to-keep","title":"Duplicates: finding them, and deciding which row survives","url":"https://addaly.com/learn/data-and-sql/duplicates-and-which-to-keep","api":"https://addaly.com/api/lesson/data-and-sql/duplicates-and-which-to-keep","minutes":8,"keyIdea":"Find duplicates with GROUP BY and HAVING, keep one with row_number over a stated ordering and a tiebreaker, count what you dropped, and treat fuzzy matching as a judgement whose false merges cost more than its misses."},{"slug":"validating-a-cleaned-table","title":"Assertions: queries that return no rows when everything is right","url":"https://addaly.com/learn/data-and-sql/validating-a-cleaned-table","api":"https://addaly.com/api/lesson/data-and-sql/validating-a-cleaned-table","minutes":8,"keyIdea":"Encode each thing that must be true as a query that returns its violations, run the whole file after every load, and include a size-and-distribution comparison with the previous load, because row-level checks cannot see a file that is silently half missing."},{"slug":"missing-values-honestly","title":"Missing values: NULL, empty, N/A, zero and minus one","url":"https://addaly.com/learn/data-and-sql/missing-values-honestly","api":"https://addaly.com/api/lesson/data-and-sql/missing-values-honestly","minutes":9,"keyIdea":"Sentinels like empty strings, N/A, zero and minus one are values a query will happily average, so convert them to NULL, keep a flag for missingness, and fill only in the feature table, because every fill shrinks variance or invents a cluster."},{"slug":"categories-and-encoding","title":"Categories: canonical values, mapping tables and encoding for a model","url":"https://addaly.com/learn/data-and-sql/categories-and-encoding","api":"https://addaly.com/api/lesson/data-and-sql/categories-and-encoding","minutes":9,"keyIdea":"Clean a category with a mapping table that a LEFT JOIN can expose gaps in, choose the encoding by cardinality and by whether the values have an order, and never give a model integer codes for categories that are not ordered."},{"slug":"building-a-feature-table","title":"A feature table: one row per entity, as of a moment","url":"https://addaly.com/learn/data-and-sql/building-a-feature-table","api":"https://addaly.com/api/lesson/data-and-sql/building-a-feature-table","minutes":10,"keyIdea":"A feature table has one row per entity per as-of moment, every feature computed from strictly before that moment and the label from strictly after, built by one parameterised query that also serves predictions so training and live features cannot drift apart."},{"slug":"leakage-in-a-join","title":"Leakage: when a feature knows the future","url":"https://addaly.com/learn/data-and-sql/leakage-in-a-join","api":"https://addaly.com/api/lesson/data-and-sql/leakage-in-a-join","minutes":10,"keyIdea":"Leakage enters a feature table through an unbounded aggregate, a join to a current value, a column written after the outcome, a target encoding that includes the row itself, or a split that puts one entity on both sides; a timestamp check catches the first two and a person who knows the source systems catches the rest."},{"slug":"indexes-and-slow-queries","title":"Why a query is slow, and what an index does","url":"https://addaly.com/learn/data-and-sql/indexes-and-slow-queries","api":"https://addaly.com/api/lesson/data-and-sql/indexes-and-slow-queries","minutes":8,"keyIdea":"An index lets the database skip rows; anything that hides a column's raw value takes that ability away."}]},{"slug":"changing-data-safely","title":"Changing data safely","summary":"Everything so far has read. This block writes: tables whose constraints refuse bad rows, inserts that can be run twice without duplicating, updates and deletes rehearsed as SELECTs, transactions that make a mistake reversible, two people writing the same row at once, schema changes on a table that is in use, views, JSON columns, history tables, and who is allowed to do any of it. It ends by designing a small schema from a paragraph of requirements.","outcome":"Design and create a small schema whose keys and constraints refuse bad data, insert, update and delete inside a transaction you have rehearsed and can roll back, explain what happens when two writers touch the same row, alter a table that is in use without an outage, and give an analyst or an AI a read-only path into the database.","lessons":[{"slug":"create-table-and-constraints","title":"CREATE TABLE: a constraint is a test that runs on every write","url":"https://addaly.com/learn/data-and-sql/create-table-and-constraints","api":"https://addaly.com/api/lesson/data-and-sql/create-table-and-constraints","minutes":9,"keyIdea":"A constraint is a test the database runs on every write, refusing the row rather than flagging it later; name each one, and know that CHECK sees one row at a time, so multi-row rules need UNIQUE, EXCLUDE or a trigger."},{"slug":"insert-and-upsert","title":"INSERT, and the INSERT you can run twice","url":"https://addaly.com/learn/data-and-sql/insert-and-upsert","api":"https://addaly.com/api/lesson/data-and-sql/insert-and-upsert","minutes":8,"keyIdea":"An INSERT that must be safe to re-run needs a unique key and an ON CONFLICT clause, because the database detects the duplicate by inserting into the unique index, and without that index it cannot detect one at all."},{"slug":"update-and-delete-without-regret","title":"UPDATE and DELETE: rehearse it as a SELECT","url":"https://addaly.com/learn/data-and-sql/update-and-delete-without-regret","api":"https://addaly.com/api/lesson/data-and-sql/update-and-delete-without-regret","minutes":8,"keyIdea":"Run the WHERE clause as a SELECT, read the rows and the count, then change the first word; for UPDATE FROM, also prove that no target row matches more than once, because the database will pick one silently."},{"slug":"transactions-and-rollback","title":"Transactions: making a mistake reversible","url":"https://addaly.com/learn/data-and-sql/transactions-and-rollback","api":"https://addaly.com/api/lesson/data-and-sql/transactions-and-rollback","minutes":9,"keyIdea":"A transaction makes several writes one unit and makes any of them reversible until COMMIT; know whether your tool autocommits, and remember that in Postgres one failed statement aborts the whole block until ROLLBACK."},{"slug":"concurrent-writes","title":"Two people, one row: lost updates and how the database prevents them","url":"https://addaly.com/learn/data-and-sql/concurrent-writes","api":"https://addaly.com/api/lesson/data-and-sql/concurrent-writes","minutes":9,"keyIdea":"A read followed by a write is a gap another transaction can enter; close it with an atomic UPDATE that reads and writes in one statement, a FOR UPDATE lock, or a version check that detects the collision and retries."},{"slug":"altering-a-live-table","title":"Changing a table that is in use","url":"https://addaly.com/learn/data-and-sql/altering-a-live-table","api":"https://addaly.com/api/lesson/data-and-sql/altering-a-live-table","minutes":9,"keyIdea":"Add nullable, backfill in batches, then constrain, because adding NOT NULL or an expression default rewrites or scans a live table under the strongest lock; set a lock timeout so a queued ALTER cannot take the site down behind one long report."},{"slug":"views-and-saved-questions","title":"Views: a saved question, not a saved answer","url":"https://addaly.com/learn/data-and-sql/views-and-saved-questions","api":"https://addaly.com/api/lesson/data-and-sql/views-and-saved-questions","minutes":8,"keyIdea":"A view stores a question and re-runs it on every reference, so it is always current and never faster than its query; a materialised view stores the answer, is as stale as its last refresh, and must say so."},{"slug":"json-columns","title":"JSON in a column: when it helps and what it costs","url":"https://addaly.com/learn/data-and-sql/json-columns","api":"https://addaly.com/api/lesson/data-and-sql/json-columns","minutes":9,"keyIdea":"A JSON column trades every constraint for flexibility, so keys can be misspelt and types can drift on every insert; keep the document, promote the keys you query into generated columns with real types, and profile the keys before trusting them."},{"slug":"history-and-audit-tables","title":"Keeping history: soft deletes, audit rows and who changed what","url":"https://addaly.com/learn/data-and-sql/history-and-audit-tables","api":"https://addaly.com/api/lesson/data-and-sql/history-and-audit-tables","minutes":9,"keyIdea":"An UPDATE destroys the old value and a DELETE destroys the row, so decide up front whether a table needs a deleted_at flag behind a filtering view, an audit table filled by a trigger, or an effective-dated design for as-of questions."},{"slug":"permissions-and-read-only","title":"Who may do what: roles, GRANT and a read-only door","url":"https://addaly.com/learn/data-and-sql/permissions-and-read-only","api":"https://addaly.com/api/lesson/data-and-sql/permissions-and-read-only","minutes":8,"keyIdea":"Create a role for each kind of access with the least it needs, remember ALTER DEFAULT PRIVILEGES for future tables, and give an analyst or an AI a read-only role with a statement timeout and views that hide personal columns."},{"slug":"designing-a-small-schema","title":"From a paragraph to a schema: a tuition centre","url":"https://addaly.com/learn/data-and-sql/designing-a-small-schema","api":"https://addaly.com/api/lesson/data-and-sql/designing-a-small-schema","minutes":11,"keyIdea":"Turn requirements into a schema by giving every noun a table with a stated grain, every many-to-many its bridge table with its own facts, every implied rule a constraint, and every derivable number a query rather than a column."}]}]},{"slug":"ai-for-teachers","title":"AI for Teachers","tagline":"For teachers who now have to teach and use AI, often with no training and no projector.","description":"For schoolteachers anywhere who now have to teach and use AI, usually without training. How to explain it to a class that asks hard questions, plan lessons without handing over your judgement, build worksheets and differentiated versions that actually differentiate, mark without being unfair, handle AI-written homework when detectors do not work, redesign the assignments that matter, teach students to use it honestly, and run all of it with chalk when the power is out.","level":"beginner","track":"work","url":"https://addaly.com/learn/ai-for-teachers","lessons":57,"minutes":487,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-for-teachers.pdf","pages":348,"bytes":3619149,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-for-teachers.pdf","cover":"https://addaly.com/textbooks/look/ai-for-teachers/1.webp?v=2026-10-07-3619149"},"film":null,"modules":[{"slug":"understanding-the-machine","title":"Understanding the machine you are about to use","summary":"Before a single worksheet, you need a working picture of what a language model does: accurate enough to survive a Grade 8 class that argues back, and useful enough to predict where it will fail you. This block builds that picture from the mechanism: prediction from frequency, the two modes of answering, the memory limit of a conversation, the curriculum it has actually read, the arithmetic it cannot do, and why the same question gets two answers. It also settles which free tool runs on the phone you actually own.","outcome":"Explain to a class, a colleague and a parent what a language model does and does not do, predict from the mechanism which kinds of question it will answer reliably and which it will get confidently wrong, and choose a free tool that runs on the phone you actually have with its training-on-your-data setting turned off.","lessons":[{"slug":"what-ai-is","title":"Explaining AI to a class that argues back","url":"https://addaly.com/learn/ai-for-teachers/what-ai-is","api":"https://addaly.com/api/lesson/ai-for-teachers/what-ai-is","minutes":7,"keyIdea":"It predicts likely next words from human writing, so sounding right and being right come apart."},{"slug":"the-free-tools-you-actually-have","title":"The free tools you actually have","url":"https://addaly.com/learn/ai-for-teachers/the-free-tools-you-actually-have","api":"https://addaly.com/api/lesson/ai-for-teachers/the-free-tools-you-actually-have","minutes":9,"keyIdea":"Every major model has a free tier that runs in a phone browser or inside WhatsApp; the choice that matters is not which is cleverest but which one you have turned off training on your data."},{"slug":"where-it-is-reliable-and-where-it-is-not","title":"Where it is reliable, and where it is not","url":"https://addaly.com/learn/ai-for-teachers/where-it-is-reliable-and-where-it-is-not","api":"https://addaly.com/api/lesson/ai-for-teachers/where-it-is-reliable-and-where-it-is-not","minutes":9,"keyIdea":"Reliability tracks how many times a fact has been written down by people, so the model is sound on photosynthesis and unsound on the founding date of your district, and you can predict which before you ask."},{"slug":"why-it-cannot-look-it-up","title":"Why it cannot look it up","url":"https://addaly.com/learn/ai-for-teachers/why-it-cannot-look-it-up","api":"https://addaly.com/api/lesson/ai-for-teachers/why-it-cannot-look-it-up","minutes":8,"keyIdea":"A model on its own has no way to consult anything at answer time; when a tool adds web search it fetches pages and summarises them, which fixes staleness but not judgement about which page to trust."},{"slug":"the-conversation-has-a-memory-limit","title":"The conversation has a memory limit","url":"https://addaly.com/learn/ai-for-teachers/the-conversation-has-a-memory-limit","api":"https://addaly.com/api/lesson/ai-for-teachers/the-conversation-has-a-memory-limit","minutes":8,"keyIdea":"A model can only see a fixed window of text at once, so it holds a chapter but not a textbook and forgets the instruction you gave forty messages ago; start a new chat per task and paste the material in every time."},{"slug":"it-has-read-the-american-curriculum","title":"It has read the American curriculum","url":"https://addaly.com/learn/ai-for-teachers/it-has-read-the-american-curriculum","api":"https://addaly.com/api/lesson/ai-for-teachers/it-has-read-the-american-curriculum","minutes":8,"keyIdea":"The training text is dominated by US and UK educational writing, so unprompted the model assumes Common Core, dollars and an American exam format; paste your syllabus and a sample paper and it adapts well, but it will never do so unasked."},{"slug":"a-chatbot-is-not-a-calculator","title":"A chatbot is not a calculator","url":"https://addaly.com/learn/ai-for-teachers/a-chatbot-is-not-a-calculator","api":"https://addaly.com/api/lesson/ai-for-teachers/a-chatbot-is-not-a-calculator","minutes":8,"keyIdea":"Next-word prediction is a poor way to multiply, so every number in generated material is checked with a calculator, and the safe pattern is to have the model write the working while a separate tool does the arithmetic."},{"slug":"same-question-different-answer","title":"Same question, different answer","url":"https://addaly.com/learn/ai-for-teachers/same-question-different-answer","api":"https://addaly.com/api/lesson/ai-for-teachers/same-question-different-answer","minutes":8,"keyIdea":"Answers are sampled from a distribution rather than looked up, so asking the same question three times and comparing is a real check: disagreement flags an unreliable question, though agreement never proves the answer is right."}]},{"slug":"prompting-as-a-teacher","title":"Prompting as a teacher","summary":"The difference between a generic output and a usable one is almost entirely what you put in the prompt, and the things that matter most are things only you know. This block turns that into a craft: a five-part template, the one example that beats three paragraphs of description, the second message that does more than the first, control of voice and reading level, roles that steer and roles that do nothing, formats that survive being pasted into a document, what to do when the tool refuses a legitimate lesson, and a prompt file that turns one good result into a repeatable one.","outcome":"Write a prompt that carries the five things only you know (class, constraints, prior lesson, misconception and format) iterate on the output rather than accepting the first draft, control the reading level and register of what comes back, and keep a personal prompt file that makes a good result repeatable next term.","lessons":[{"slug":"the-five-things-only-you-know","title":"The five things only you know","url":"https://addaly.com/learn/ai-for-teachers/the-five-things-only-you-know","api":"https://addaly.com/api/lesson/ai-for-teachers/the-five-things-only-you-know","minutes":9,"keyIdea":"Every teaching prompt should carry who the students are, what constrains the room, what came before, which misconception is live, and what shape the output must take, because the model can only condition on what is in front of it, and none of those five are."},{"slug":"show-it-one-of-yours","title":"Show it one of yours","url":"https://addaly.com/learn/ai-for-teachers/show-it-one-of-yours","api":"https://addaly.com/api/lesson/ai-for-teachers/show-it-one-of-yours","minutes":8,"keyIdea":"One pasted example of your own work steers the output harder than any description of it, because the model copies the shape of what it is shown, including, if you are not careful, the flaws."},{"slug":"the-second-message-matters-more","title":"The second message matters more than the first","url":"https://addaly.com/learn/ai-for-teachers/the-second-message-matters-more","api":"https://addaly.com/api/lesson/ai-for-teachers/the-second-message-matters-more","minutes":8,"keyIdea":"Treat the first output as a draft and spend your effort on the critique (specific, pointed at one thing, with the reason) because a model steered by feedback improves fast, while a first prompt rewritten five times mostly does not."},{"slug":"set-the-voice-and-the-level","title":"Set the voice and the reading level","url":"https://addaly.com/learn/ai-for-teachers/set-the-voice-and-the-level","api":"https://addaly.com/api/lesson/ai-for-teachers/set-the-voice-and-the-level","minutes":9,"keyIdea":"\"Simple\" is not an instruction; sentence length, word frequency, idiom and the ratio of concrete to abstract are, and the model drifts back to its default register after a few paragraphs unless the constraint is restated."},{"slug":"roles-that-help-and-roles-that-dont","title":"Roles that help, and roles that do nothing","url":"https://addaly.com/learn/ai-for-teachers/roles-that-help-and-roles-that-dont","api":"https://addaly.com/api/lesson/ai-for-teachers/roles-that-help-and-roles-that-dont","minutes":8,"keyIdea":"A role steers the model toward the writing of people who hold that role, so \"act as an examiner\" changes the output and \"act as a world-class expert\" does not; the roles worth using are the ones whose writing looks different from the default."},{"slug":"prompting-for-formats-you-can-print","title":"Prompting for formats you can print","url":"https://addaly.com/learn/ai-for-teachers/prompting-for-formats-you-can-print","api":"https://addaly.com/api/lesson/ai-for-teachers/prompting-for-formats-you-can-print","minutes":8,"keyIdea":"The model writes in markdown by default, which turns into stray asterisks and hashes when pasted into Word or WhatsApp, so name the destination and ask for plain text, a numbered list, or CSV: whichever survives the paste."},{"slug":"when-it-refuses-a-lesson","title":"When it refuses a lesson","url":"https://addaly.com/learn/ai-for-teachers/when-it-refuses-a-lesson","api":"https://addaly.com/api/lesson/ai-for-teachers/when-it-refuses-a-lesson","minutes":8,"keyIdea":"Refusals come from a cautious safety filter matching surface features (words about weapons, drugs, sex, self-harm, violence) not from an understanding of your lesson, so stating the educational context, the age, and the syllabus reference usually clears a legitimate topic."},{"slug":"keep-a-prompt-file","title":"Keep a prompt file","url":"https://addaly.com/learn/ai-for-teachers/keep-a-prompt-file","api":"https://addaly.com/api/lesson/ai-for-teachers/keep-a-prompt-file","minutes":8,"keyIdea":"A good result is only repeatable if you saved the prompt, the pasted context and the output together, so keep a plain text file, dated, and use the tool's stored-instructions feature for the things you paste every time."}]},{"slug":"planning-and-materials","title":"Planning and making materials","summary":"This is where the hours go back to you. A term's worth of explanations, passages, questions, visuals, slides and revision aids can be drafted in evenings rather than weekends, provided the judgement stays in your hands and the checking is not skipped. This block takes each kind of material in turn, shows the prompt that produces it, the specific way it fails, and the check that catches the failure, and ends by lifting the view from one lesson to a whole term.","outcome":"Produce a term's worth of classroom material (explanations, reading passages, question banks, diagrams, slides and revision aids) that is checked, localised and pitched to the class in front of you, and name the parts of a lesson and a unit that should never be handed to the model.","lessons":[{"slug":"planning-with-ai","title":"Planning with AI, keeping the judgement","url":"https://addaly.com/learn/ai-for-teachers/planning-with-ai","api":"https://addaly.com/api/lesson/ai-for-teachers/planning-with-ai","minutes":8,"keyIdea":"AI supplies breadth; you supply the class. Ask it for misconceptions, not for whole lesson plans."},{"slug":"worksheets-and-differentiation","title":"Worksheets, and three versions of them","url":"https://addaly.com/learn/ai-for-teachers/worksheets-and-differentiation","api":"https://addaly.com/api/lesson/ai-for-teachers/worksheets-and-differentiation","minutes":8,"keyIdea":"Name the axis (support, representation, extension) or you get dilution, and always work the sheet yourself."},{"slug":"four-explanations-of-one-idea","title":"Four explanations of one idea","url":"https://addaly.com/learn/ai-for-teachers/four-explanations-of-one-idea","api":"https://addaly.com/api/lesson/ai-for-teachers/four-explanations-of-one-idea","minutes":9,"keyIdea":"Ask for the same idea as an analogy, a worked example, a story and a set of contrasting cases, then audit each analogy for where it breaks, because the model produces explanations fluently and never marks the point at which its own analogy stops being true."},{"slug":"passages-with-the-words-you-are-teaching","title":"Passages with the words you are teaching","url":"https://addaly.com/learn/ai-for-teachers/passages-with-the-words-you-are-teaching","api":"https://addaly.com/api/lesson/ai-for-teachers/passages-with-the-words-you-are-teaching","minutes":8,"keyIdea":"A generated comprehension passage is only useful if it carries your vocabulary list, your setting and your reading level at once: specify all three, then check that every question's answer is actually in the text."},{"slug":"a-question-bank-you-can-trust","title":"A question bank you can trust","url":"https://addaly.com/learn/ai-for-teachers/a-question-bank-you-can-trust","api":"https://addaly.com/api/lesson/ai-for-teachers/a-question-bank-you-can-trust","minutes":9,"keyIdea":"Build questions into a spreadsheet tagged by topic, type and difficulty, generate the answer key in a separate pass and reconcile the two, and let a term of student results tell you which questions are actually hard."},{"slug":"diagrams-and-visuals-without-a-designer","title":"Diagrams and visuals without a designer","url":"https://addaly.com/learn/ai-for-teachers/diagrams-and-visuals-without-a-designer","api":"https://addaly.com/api/lesson/ai-for-teachers/diagrams-and-visuals-without-a-designer","minutes":9,"keyIdea":"Image generators are good at scenes and bad at diagrams (they cannot reliably place labels, draw accurate anatomy or keep a map true) so ask the model for a diagram description or diagram code and draw the diagram yourself, and use image generation only for illustration."},{"slug":"slides-and-the-projector-you-sometimes-have","title":"Slides, and the projector you sometimes have","url":"https://addaly.com/learn/ai-for-teachers/slides-and-the-projector-you-sometimes-have","api":"https://addaly.com/api/lesson/ai-for-teachers/slides-and-the-projector-you-sometimes-have","minutes":8,"keyIdea":"Generate the outline and the speaker notes, not the slides: a deck built from a generated outline in Google Slides or LibreOffice Impress carries your structure, prints as a handout when the projector fails, and avoids the pretty, empty deck that slide generators produce by default."},{"slug":"revision-flashcards-and-spaced-practice","title":"Revision: flashcards and spaced practice","url":"https://addaly.com/learn/ai-for-teachers/revision-flashcards-and-spaced-practice","api":"https://addaly.com/api/lesson/ai-for-teachers/revision-flashcards-and-spaced-practice","minutes":9,"keyIdea":"The evidence for retrieval practice and spacing is strong and the model can generate a term's flashcards and a spaced schedule in minutes; the failure is cards that test recognition rather than recall, and the fix is a card format that forces the student to produce the answer."},{"slug":"a-unit-plan-not-just-a-lesson","title":"A unit plan, not just a lesson","url":"https://addaly.com/learn/ai-for-teachers/a-unit-plan-not-just-a-lesson","api":"https://addaly.com/api/lesson/ai-for-teachers/a-unit-plan-not-just-a-lesson","minutes":8,"keyIdea":"Ask the model to map a term (sequence, prerequisites, where each topic is revisited, where the checks fall) and then correct it against the two things it cannot know: your school's calendar and which topics your students have found hard before."}]},{"slug":"assessment-and-feedback","title":"Assessment, feedback and marking","summary":"Marking is where the hours go and where the fairness risk is highest, so this block is careful. It starts from the line between what a machine can judge and what only you can, then builds the pieces that keep AI on the right side of it: a rubric both a student and a model can read, feedback that gets used, a way for students to get feedback before they submit, analysis of a whole class's errors, a phone-camera workflow for handwritten scripts, an exam paper drafted against a coverage grid, and peer assessment with the model as a third marker rather than the first.","outcome":"Use AI to give faster and more specific feedback on drafts while keeping every grade defensible: write a rubric a machine can apply and a student can read, run a bias check on any marking tool before trusting it, draft an exam paper against a coverage grid, and turn a class set of wrong answers into next week's teaching.","lessons":[{"slug":"marking-fairly","title":"Marking: what a machine cannot fairly judge","url":"https://addaly.com/learn/ai-for-teachers/marking-fairly","api":"https://addaly.com/api/lesson/ai-for-teachers/marking-fairly","minutes":9,"keyIdea":"A machine can give feedback; a grade you cannot explain to a parent is not a grade."},{"slug":"writing-a-rubric-both-can-read","title":"Writing a rubric both can read","url":"https://addaly.com/learn/ai-for-teachers/writing-a-rubric-both-can-read","api":"https://addaly.com/api/lesson/ai-for-teachers/writing-a-rubric-both-can-read","minutes":9,"keyIdea":"A rubric criterion must be observable in the text (\"cites a specific line and explains its effect\" rather than \"shows understanding\") because a vague criterion makes the model fall back on length and fluency, which are the biases that land on your weakest writers."},{"slug":"feedback-students-actually-use","title":"Feedback students actually use","url":"https://addaly.com/learn/ai-for-teachers/feedback-students-actually-use","api":"https://addaly.com/api/lesson/ai-for-teachers/feedback-students-actually-use","minutes":8,"keyIdea":"Ask the model for two specific next steps and no praise, because it is trained toward agreeable, encouraging answers, and a comment that opens with three compliments is one the student stops reading before the useful part."},{"slug":"the-student-facing-feedback-loop","title":"Feedback before submission: the student-facing loop","url":"https://addaly.com/learn/ai-for-teachers/the-student-facing-feedback-loop","api":"https://addaly.com/api/lesson/ai-for-teachers/the-student-facing-feedback-loop","minutes":8,"keyIdea":"Students can get useful critique on their own drafts if given a prompt card that forbids rewriting, but the model wants to help and will start rewriting anyway, so the card needs a re-statement line and the task needs a paper trail."},{"slug":"reading-thirty-answers-at-once","title":"Reading thirty answers at once","url":"https://addaly.com/learn/ai-for-teachers/reading-thirty-answers-at-once","api":"https://addaly.com/api/lesson/ai-for-teachers/reading-thirty-answers-at-once","minutes":9,"keyIdea":"Paste a whole class's answers to one question and ask the model to group them by the error they contain (the groups are the reteaching plan), while remembering that it will find patterns in six answers as readily as in sixty."},{"slug":"marking-handwritten-work-with-a-phone","title":"Marking handwritten work with a phone","url":"https://addaly.com/learn/ai-for-teachers/marking-handwritten-work-with-a-phone","api":"https://addaly.com/api/lesson/ai-for-teachers/marking-handwritten-work-with-a-phone","minutes":8,"keyIdea":"A phone photograph of a handwritten script can be transcribed by the model well enough to give feedback on, but it will quietly correct the student's errors as it reads, and for maths it misreads the symbols that matter, so transcription is a draft to check, never a record."},{"slug":"writing-the-exam-paper","title":"Writing the exam paper","url":"https://addaly.com/learn/ai-for-teachers/writing-the-exam-paper","api":"https://addaly.com/api/lesson/ai-for-teachers/writing-the-exam-paper","minutes":9,"keyIdea":"Draft the paper from a coverage grid (topic against type against marks) rather than from a prompt for \"a test\", and then sit it yourself against the clock, because the model does not know your board's structure until shown and cannot feel how long forty marks take."},{"slug":"peer-assessment-with-a-third-marker","title":"Peer assessment with a third marker","url":"https://addaly.com/learn/ai-for-teachers/peer-assessment-with-a-third-marker","api":"https://addaly.com/api/lesson/ai-for-teachers/peer-assessment-with-a-third-marker","minutes":8,"keyIdea":"When students mark each other against a rubric, a model marking the same scripts becomes a third opinion that makes disagreement visible and discussable, and the disagreements, not the scores, are what teach students to assess."}]},{"slug":"integrity-and-ai-written-work","title":"Integrity: AI-written work and what to do about it","summary":"The question every staffroom asks first is \"how do I catch it\", and the honest answer is that you mostly cannot, and that trying to harms the wrong students. This block replaces catching with designing: why detectors fail and what to do instead, assignments that ask for what the model cannot reach, per-task rules students can follow, a written class policy with a consequence ladder and an appeal, process evidence that holds up, a fair procedure for the case you do suspect, a rethink of what homework is now for, and the conventions older students will need for declaring AI use at university.","outcome":"Set an AI policy for a class that students can follow and you can enforce (per-task levels, a written consequence ladder, process evidence from version history and in-class drafting, redesigned high-stakes tasks) and handle a suspected case without a detector score and without wronging a second-language writer.","lessons":[{"slug":"detecting-ai-writing","title":"Why detectors fail, and what to do instead","url":"https://addaly.com/learn/ai-for-teachers/detecting-ai-writing","api":"https://addaly.com/api/lesson/ai-for-teachers/detecting-ai-writing","minutes":9,"keyIdea":"Detectors flag careful second-language writing as AI; use process evidence and conversation instead."},{"slug":"assignment-redesign","title":"Assignments AI cannot do for you","url":"https://addaly.com/learn/ai-for-teachers/assignment-redesign","api":"https://addaly.com/api/lesson/ai-for-teachers/assignment-redesign","minutes":8,"keyIdea":"Difficulty does not stop AI; specificity to your room, your week and your students does."},{"slug":"teaching-honest-use","title":"Teaching students to use it honestly","url":"https://addaly.com/learn/ai-for-teachers/teaching-honest-use","api":"https://addaly.com/api/lesson/ai-for-teachers/teaching-honest-use","minutes":9,"keyIdea":"Set a permitted level per task and require one line of disclosure; bans only make use invisible."},{"slug":"writing-the-class-policy","title":"Writing the class policy","url":"https://addaly.com/learn/ai-for-teachers/writing-the-class-policy","api":"https://addaly.com/api/lesson/ai-for-teachers/writing-the-class-policy","minutes":9,"keyIdea":"A class AI policy is one page, written with the students, that says what is permitted on each kind of task, what disclosure looks like, what happens on the first and second breach, and how a student appeals, because a rule that lives in the teacher's mood is not a rule anyone can follow."},{"slug":"process-evidence-that-holds-up","title":"Process evidence that holds up","url":"https://addaly.com/learn/ai-for-teachers/process-evidence-that-holds-up","api":"https://addaly.com/api/lesson/ai-for-teachers/process-evidence-that-holds-up","minutes":9,"keyIdea":"Version history in Google Docs or Word, an in-class first paragraph, and a short drafting portfolio make the writing process visible for every student as a matter of routine: signals of authorship, never proof, and used to support students rather than to trap them."},{"slug":"handling-a-case-fairly","title":"Handling a case fairly","url":"https://addaly.com/learn/ai-for-teachers/handling-a-case-fairly","api":"https://addaly.com/api/lesson/ai-for-teachers/handling-a-case-fairly","minutes":9,"keyIdea":"When a case reaches a decision, the standard is what a reasonable colleague would conclude from the evidence you can show (the process record, the conversation, the student's own explanation) never a detector score, and the default outcome is redoing the work, with the second-language writer given explicit protection from the accusation that reads unsurprising prose as machine prose."},{"slug":"rethinking-homework","title":"Rethinking homework","url":"https://addaly.com/learn/ai-for-teachers/rethinking-homework","api":"https://addaly.com/api/lesson/ai-for-teachers/rethinking-homework","minutes":9,"keyIdea":"Homework that asks for a product a model can produce (summaries, comprehension answers, definitions, essays) has stopped measuring anything; keep homework that is retrieval, practice with self-checking, reading with a one-line response, or evidence from the student's own home and street."},{"slug":"citing-and-declaring-ai-use","title":"Citing and declaring AI use","url":"https://addaly.com/learn/ai-for-teachers/citing-and-declaring-ai-use","api":"https://addaly.com/api/lesson/ai-for-teachers/citing-and-declaring-ai-use","minutes":8,"keyIdea":"Older students will meet institutions that require a declaration of AI use, and the conventions exist (APA, MLA and Chicago each have one) so teach the declaration as a normal line of academic honesty, while being clear that the underlying question of who authored a machine-assisted text is unsettled everywhere."}]},{"slug":"teaching-ai-itself","title":"Teaching AI itself","summary":"At some point the subject is not your subject but the machine, and a class of thirteen-year-olds wants to know how it works, whether it thinks, why it drew their classmate's face, and whether it will take their jobs. This block is the unit: what to teach at which age, the sorting game for younger children, the deepfake lesson for older ones, the companion chatbot a teacher needs to understand, a two-week project that builds the mechanism by hand, what the studies actually say about AI tutors, and how every subject, not only computing, can carry the teaching.","outcome":"Teach a unit on AI to any age from 8 to 18 without a device (prediction, training data, classification, bias, confident error and the deepfake problem) and read a study on AI tutoring well enough to say what it found, on whom, and what it means for how students in your class should be allowed to use the tool.","lessons":[{"slug":"teaching-ai-offline","title":"An AI lesson with no screen and no power","url":"https://addaly.com/learn/ai-for-teachers/teaching-ai-offline","api":"https://addaly.com/api/lesson/ai-for-teachers/teaching-ai-offline","minutes":9,"keyIdea":"The mechanism (prediction, confident error, learned from us) can be taught with chalk and voices."},{"slug":"what-to-teach-at-which-age","title":"What to teach at which age","url":"https://addaly.com/learn/ai-for-teachers/what-to-teach-at-which-age","api":"https://addaly.com/api/lesson/ai-for-teachers/what-to-teach-at-which-age","minutes":9,"keyIdea":"The mechanism scales down further than people expect (pattern and sorting at 8, prediction at 11, training data and bias at 14, how it is built and what it is for at 16) and no country has a settled AI curriculum yet, so the honest frame is a progression rather than a syllabus."},{"slug":"the-sorting-game-for-younger-children","title":"The sorting game for younger children","url":"https://addaly.com/learn/ai-for-teachers/the-sorting-game-for-younger-children","api":"https://addaly.com/api/lesson/ai-for-teachers/the-sorting-game-for-younger-children","minutes":8,"keyIdea":"Classification, not generation, is the right first model for a child (a machine shown many labelled examples learns to sort new ones, and gets it wrong at the boundary) and it can be taught with a pile of pictures and two boxes, with Teachable Machine as the free follow-up if a laptop appears."},{"slug":"image-generators-and-deepfakes","title":"Image generators and deepfakes","url":"https://addaly.com/learn/ai-for-teachers/image-generators-and-deepfakes","api":"https://addaly.com/api/lesson/ai-for-teachers/image-generators-and-deepfakes","minutes":10,"keyIdea":"Fabricated intimate images of classmates are a present problem in schools, and the lesson that helps is not \"how to spot a fake\", which is becoming impossible, but what the tools do, why it is a serious harm and increasingly a crime, and exactly what a student should do in the first hour if it happens to them."},{"slug":"the-ai-companion-problem","title":"The AI companion problem","url":"https://addaly.com/learn/ai-for-teachers/the-ai-companion-problem","api":"https://addaly.com/api/lesson/ai-for-teachers/the-ai-companion-problem","minutes":9,"keyIdea":"Companion chatbots are built to keep the user talking and to agree with them, which is exactly what a lonely fourteen-year-old wants and exactly what a struggling one should not have; so a teacher needs to know what the apps do, what the warning signs are, and where the safeguarding route runs."},{"slug":"a-student-project-that-teaches-the-mechanism","title":"A student project that teaches the mechanism","url":"https://addaly.com/learn/ai-for-teachers/a-student-project-that-teaches-the-mechanism","api":"https://addaly.com/api/lesson/ai-for-teachers/a-student-project-that-teaches-the-mechanism","minutes":10,"keyIdea":"Students aged 14 and up can build a working next-word predictor by hand from a page of text (a tally table of which word follows which) and generate sentences from it, and the moment their own tiny model produces fluent nonsense is the moment the big one stops being magic."},{"slug":"the-evidence-on-ai-tutors","title":"The evidence on AI tutors","url":"https://addaly.com/learn/ai-for-teachers/the-evidence-on-ai-tutors","api":"https://addaly.com/api/lesson/ai-for-teachers/the-evidence-on-ai-tutors","minutes":10,"keyIdea":"The best-run studies so far find that unrestricted chatbot access during practice raises practice scores and lowers exam scores, while a tutor constrained to give hints does not harm and sometimes helps, so the finding is about design, and a teacher should let students use the tool for explanation and hints, not for answers."},{"slug":"ai-in-every-subject-not-just-computing","title":"AI in every subject, not just computing","url":"https://addaly.com/learn/ai-for-teachers/ai-in-every-subject-not-just-computing","api":"https://addaly.com/api/lesson/ai-for-teachers/ai-in-every-subject-not-just-computing","minutes":9,"keyIdea":"The progression needs no timetable slot if each subject carries the piece that is naturally its own (history teaches source and provenance, science teaches evaluation, languages teach the reliability gradient, art teaches the authorship debate, maths teaches the arithmetic failure) and a department that agrees who teaches what gets a whole unit for the cost of one meeting."}]},{"slug":"the-multilingual-mixed-ability-classroom","title":"The multilingual, mixed-ability classroom","summary":"Most classrooms in the world hold several languages and a wide spread of reading ability, and this is where these tools can do the most good and the most quiet harm. This block is practical: translation with a back-translation check, explanations that use the language students actually speak, formats for students who struggle to read, free speech-to-text and text-to-speech, support for students with disabilities that stops short of replacing the specialist, the student who asks the machine what she will not ask you, the student who is far ahead, and the honest situation of a home language the model has barely seen.","outcome":"Use AI to bridge language and ability gaps in a real classroom (translate and back-translate a worksheet, produce a levelled and a dyslexia-friendly version of the same text, set up free speech-to-text and text-to-speech on a phone) while stating from the mechanism where translation quality falls off and which students it fails.","lessons":[{"slug":"translation-and-back-translation","title":"Translation, and the back-translation check","url":"https://addaly.com/learn/ai-for-teachers/translation-and-back-translation","api":"https://addaly.com/api/lesson/ai-for-teachers/translation-and-back-translation","minutes":9,"keyIdea":"Translation quality tracks how much text exists in a language (excellent for Spanish and Hindi, uneven for Yoruba and Amharic, poor for languages with a few million speakers and little web presence) and the cheap check is to translate the result back and compare it with what you started with."},{"slug":"explaining-in-the-language-students-speak","title":"Explaining in the language students actually speak","url":"https://addaly.com/learn/ai-for-teachers/explaining-in-the-language-students-speak","api":"https://addaly.com/api/lesson/ai-for-teachers/explaining-in-the-language-students-speak","minutes":8,"keyIdea":"Students in most classrooms think in a mixed language (Hinglish, Sheng, Taglish, Pidgin, Arabic with French) and the model can explain in that mix if shown a sample of it, which makes an explanation land that the textbook's formal register never did."},{"slug":"for-students-who-struggle-to-read","title":"For students who struggle to read","url":"https://addaly.com/learn/ai-for-teachers/for-students-who-struggle-to-read","api":"https://addaly.com/api/lesson/ai-for-teachers/for-students-who-struggle-to-read","minutes":9,"keyIdea":"The same text can be made reachable for a struggling reader by chunking, spacing, a glossary and an audio version (all free, all in minutes) and the trap is simplifying the ideas when the barrier was the format."},{"slug":"speech-to-text-and-text-to-speech-for-free","title":"Speech-to-text and text-to-speech, for free","url":"https://addaly.com/learn/ai-for-teachers/speech-to-text-and-text-to-speech-for-free","api":"https://addaly.com/api/lesson/ai-for-teachers/speech-to-text-and-text-to-speech-for-free","minutes":8,"keyIdea":"Dictation and read-aloud are built into every phone and cost nothing, and they work well in major languages and less well in accented English and small languages, so test with the actual student before relying on them, and treat the transcription as a draft the student corrects."},{"slug":"supporting-students-with-disabilities","title":"Supporting students with disabilities","url":"https://addaly.com/learn/ai-for-teachers/supporting-students-with-disabilities","api":"https://addaly.com/api/lesson/ai-for-teachers/supporting-students-with-disabilities","minutes":9,"keyIdea":"AI gives a teacher without a specialist some real tools (image description for a blind student, live captions for a deaf one, structured and predictable materials for an autistic one, chunked tasks for ADHD) and the line to hold is that these support the student's plan rather than substituting for the professional who should write it."},{"slug":"the-quiet-student-and-the-private-question","title":"The quiet student and the private question","url":"https://addaly.com/learn/ai-for-teachers/the-quiet-student-and-the-private-question","api":"https://addaly.com/api/lesson/ai-for-teachers/the-quiet-student-and-the-private-question","minutes":8,"keyIdea":"Students ask a chatbot what they will not ask a teacher in front of the class (the question that reveals they are behind) and the same privacy that makes them ask means nobody corrects the wrong answer, so a teacher turns the private questions into a class routine."},{"slug":"stretching-the-student-who-is-ahead","title":"Stretching the student who is ahead","url":"https://addaly.com/learn/ai-for-teachers/stretching-the-student-who-is-ahead","api":"https://addaly.com/api/lesson/ai-for-teachers/stretching-the-student-who-is-ahead","minutes":8,"keyIdea":"The student who finishes in four minutes now has an unbounded question-answerer, and is also the student least likely to be corrected when it is wrong, because she is confident and you are busy, so the stretch is to make her the checker, not the consumer."},{"slug":"when-the-home-language-has-no-training-data","title":"When the home language has no training data","url":"https://addaly.com/learn/ai-for-teachers/when-the-home-language-has-no-training-data","api":"https://addaly.com/api/lesson/ai-for-teachers/when-the-home-language-has-no-training-data","minutes":9,"keyIdea":"For a language with a few million speakers and little written on the web, the model is not a translator and will not become one through prompting, so use it for the English side only, involve speakers for the rest, and know that projects exist to build the data and that whose languages get models is a political question, not a technical one."}]}]},{"slug":"ai-careers","title":"Working in AI","tagline":"The roles that exist, what they pay, and how people get in without a famous degree.","description":"A plain-spoken guide to building a career in and around AI: the roles that actually exist and what they look like on an ordinary Tuesday, where a degree matters and where it does not, how to build a portfolio with no job history, what to do when the courses run out and you still freeze at an empty file, how hiring really works in India, Nigeria, Brazil, Europe and the US, what the money looks like in local terms, how freelancing and contracting actually pay, and which parts of this work are most exposed to automation. No hype, no doom, and no pretending that any of it is the same everywhere.","level":"beginner","track":"work","url":"https://addaly.com/learn/ai-careers","lessons":85,"minutes":731,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-careers.pdf","pages":466,"bytes":5330427,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-careers.pdf","cover":"https://addaly.com/textbooks/look/ai-careers/1.webp?v=2026-10-07-5330427"},"film":{"url":"https://addaly.com/learn/ai-careers#film","video":"https://addaly.com/videos/ai-careers.mp4","captions":"https://addaly.com/videos/ai-careers.vtt","poster":"https://addaly.com/videos/ai-careers.jpg","seconds":962,"bytes":108405787,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"the-terrain","title":"The terrain: who hires, for what, and where you fit","summary":"Before you choose what to learn, look at the market you are actually in: the eight kinds of employer, how a job advert encodes the real job, and what a credential buys. This module comes first because most wasted years are caused by aiming at the smallest employer category with the wrong evidence.","outcome":"Name the employer types that hire for AI work in your own market, decode a job advert into the role it really is, and commit to one lane with a plan sized to the hours you actually have.","lessons":[{"slug":"the-roles-that-exist","title":"The jobs, described as they feel on a Tuesday","url":"https://addaly.com/learn/ai-careers/the-roles-that-exist","api":"https://addaly.com/api/lesson/ai-careers/the-roles-that-exist","minutes":7,"keyIdea":"Most AI work is moving messy data and checking outputs, not training models."},{"slug":"who-actually-employs-you","title":"The eight kinds of employer, and how many of each","url":"https://addaly.com/learn/ai-careers/who-actually-employs-you","api":"https://addaly.com/api/lesson/ai-careers/who-actually-employs-you","minutes":8,"keyIdea":"Nearly every AI-adjacent job sits inside an ordinary organisation that uses software, not inside a company that builds models."},{"slug":"where-the-work-happens","title":"Geography, time zones, and the office you have never heard of","url":"https://addaly.com/learn/ai-careers/where-the-work-happens","api":"https://addaly.com/api/lesson/ai-careers/where-the-work-happens","minutes":10,"keyIdea":"Where you sit decides which employers can legally and practically hire you, and time-zone overlap filters candidates harder than any skill requirement in the advert."},{"slug":"the-adjacent-jobs-nobody-counts","title":"The work that trains the models","url":"https://addaly.com/learn/ai-careers/the-adjacent-jobs-nobody-counts","api":"https://addaly.com/api/lesson/ai-careers/the-adjacent-jobs-nobody-counts","minutes":9,"keyIdea":"Annotation and evaluation work is a real door into the field, but its value is the failure-mode intuition and data-quality vocabulary you take out of it, not a promotion track inside it."},{"slug":"reading-a-job-advert","title":"Reading a job advert for what it actually is","url":"https://addaly.com/learn/ai-careers/reading-a-job-advert","api":"https://addaly.com/api/lesson/ai-careers/reading-a-job-advert","minutes":7,"keyIdea":"The tools list and the responsibilities tell you the real job; the title and the years-of-experience line usually do not."},{"slug":"inside-a-data-team","title":"Who sits around you, and how work arrives","url":"https://addaly.com/learn/ai-careers/inside-a-data-team","api":"https://addaly.com/api/lesson/ai-careers/inside-a-data-team","minutes":9,"keyIdea":"The organisation's shape and data maturity determine your daily work more than the job title does, and both can be diagnosed with one question in the interview."},{"slug":"degrees-and-doors","title":"Who actually needs a degree","url":"https://addaly.com/learn/ai-careers/degrees-and-doors","api":"https://addaly.com/api/lesson/ai-careers/degrees-and-doors","minutes":6,"keyIdea":"A degree opens doors in some markets; evidence that you can build is what keeps you inside."},{"slug":"choosing-a-lane","title":"Choosing a lane you can defend, and changing it later","url":"https://addaly.com/learn/ai-careers/choosing-a-lane","api":"https://addaly.com/api/lesson/ai-careers/choosing-a-lane","minutes":8,"keyIdea":"Choose the lane where you can produce evidence fastest, because lanes are adjacent and moving between them costs one project, not one degree."},{"slug":"the-ladder-and-the-levels","title":"Levels, titles, and why \"senior\" means nothing on its own","url":"https://addaly.com/learn/ai-careers/the-ladder-and-the-levels","api":"https://addaly.com/api/lesson/ai-careers/the-ladder-and-the-levels","minutes":8,"keyIdea":"Levels are set by how much ambiguity you absorb and how far your work travels, so negotiate the level rather than the salary and read adverts for scope rather than titles."},{"slug":"the-six-hour-week","title":"A year on six hours a week","url":"https://addaly.com/learn/ai-careers/the-six-hour-week","api":"https://addaly.com/api/lesson/ai-careers/the-six-hour-week","minutes":8,"keyIdea":"Progress comes from a small weekly amount that survives bad weeks, because every gap longer than about ten days costs a session to re-enter."}]},{"slug":"the-roles-in-depth","title":"The roles, one at a time","summary":"One overview lesson cannot tell you whether you would enjoy being a data engineer. This module takes ten roles and gives each its own hour: the ordinary week, the thing you produce, the tools with their free equivalents, the two routes in, and the failure that ends people's first year in that seat. Read the three that sound closest and skim the rest, because knowing what you are not applying for is half of choosing.","outcome":"Describe one role's ordinary week, the artefact it produces, the stack it runs on and two realistic routes into it in enough detail that somebody doing that job recognises their own week in your description.","lessons":[{"slug":"data-analyst-in-depth","title":"The data analyst","url":"https://addaly.com/learn/ai-careers/data-analyst-in-depth","api":"https://addaly.com/api/lesson/ai-careers/data-analyst-in-depth","minutes":9,"keyIdea":"An analyst's value comes from owning what the words mean and being accountable for the number, not from producing charts faster."},{"slug":"analytics-engineer-in-depth","title":"The analytics engineer","url":"https://addaly.com/learn/ai-careers/analytics-engineer-in-depth","api":"https://addaly.com/api/lesson/ai-careers/analytics-engineer-in-depth","minutes":9,"keyIdea":"Analytics engineering makes data trustworthy by treating transformations as idempotent, version-controlled, tested code, and its only real success metric is whether other people build on your tables."},{"slug":"data-engineer-in-depth","title":"The data engineer","url":"https://addaly.com/learn/ai-careers/data-engineer-in-depth","api":"https://addaly.com/api/lesson/ai-careers/data-engineer-in-depth","minutes":10,"keyIdea":"Data engineering is judged on availability and silence, so idempotency, backfills and loud failure matter more than any tool on the CV."},{"slug":"ml-engineer-in-depth","title":"The machine learning engineer","url":"https://addaly.com/learn/ai-careers/ml-engineer-in-depth","api":"https://addaly.com/api/lesson/ai-careers/ml-engineer-in-depth","minutes":10,"keyIdea":"Most of a machine learning engineer's work is the system around the model, and the defining bug is a feature that exists in training data but not at prediction time."},{"slug":"ai-engineer-in-depth","title":"The AI engineer","url":"https://addaly.com/learn/ai-careers/ai-engineer-in-depth","api":"https://addaly.com/api/lesson/ai-careers/ai-engineer-in-depth","minutes":10,"keyIdea":"An AI engineer's core skill is separating retrieval failures from generation failures and trading quality, cost, latency and risk with actual numbers."},{"slug":"platform-and-mlops-in-depth","title":"The platform and MLOps engineer","url":"https://addaly.com/learn/ai-careers/platform-and-mlops-in-depth","api":"https://addaly.com/api/lesson/ai-careers/platform-and-mlops-in-depth","minutes":9,"keyIdea":"Platform and MLOps work is judged by other teams' delivery speed and by adoption, so build one well-supported road with a real team before generalising it."},{"slug":"applied-scientist-in-depth","title":"The applied scientist and research engineer","url":"https://addaly.com/learn/ai-careers/applied-scientist-in-depth","api":"https://addaly.com/api/lesson/ai-careers/applied-scientist-in-depth","minutes":9,"keyIdea":"Applied research is run on time-boxed questions against a properly tuned baseline, and its most valuable habit is writing up what did not work."},{"slug":"trust-and-safety-in-depth","title":"Trust, safety and the policy side of AI","url":"https://addaly.com/learn/ai-careers/trust-and-safety-in-depth","api":"https://addaly.com/api/lesson/ai-careers/trust-and-safety-in-depth","minutes":9,"keyIdea":"Trust and safety is a chain from policy to taxonomy to detection to appeals, and every threshold is an explicit choice about which of two harms you would rather cause."},{"slug":"ai-product-manager-in-depth","title":"The AI product manager","url":"https://addaly.com/learn/ai-careers/ai-product-manager-in-depth","api":"https://addaly.com/api/lesson/ai-careers/ai-product-manager-in-depth","minutes":9,"keyIdea":"An AI product manager's job is to state what decision changes, what being wrong costs, and what the fallback is, then insist on a measured number instead of an impression."},{"slug":"forward-deployed-and-solutions","title":"The forward-deployed and solutions engineer","url":"https://addaly.com/learn/ai-careers/forward-deployed-and-solutions","api":"https://addaly.com/api/lesson/ai-careers/forward-deployed-and-solutions","minutes":9,"keyIdea":"Forward-deployed work makes a product work inside one organisation, and its career value is the loop back into the product, which fails the moment each customer gets a permanent fork."}]},{"slug":"the-evidence","title":"The evidence: what gets tested, and how to prove you have it","summary":"Four skills carry almost every entry-level offer in this field (SQL, working Python, version control and evaluation), and one artefact converts them into a hire: a written project that shows judgement under mess. This module builds both, and covers the spreadsheet fluency no syllabus lists and every organisation runs on.","outcome":"Produce one written case study of your own work (with the mess you found, the decisions you rejected, and a number from a test set you built by hand) that a reviewer can judge in ninety seconds.","lessons":[{"slug":"stuck-after-the-courses","title":"When the courses end and you still freeze","url":"https://addaly.com/learn/ai-careers/stuck-after-the-courses","api":"https://addaly.com/api/lesson/ai-careers/stuck-after-the-courses","minutes":7,"keyIdea":"You learn to build by finishing small things alone, not by watching bigger things being finished."},{"slug":"sql-is-the-gate","title":"SQL, and the six query shapes that cover the job","url":"https://addaly.com/learn/ai-careers/sql-is-the-gate","api":"https://addaly.com/api/lesson/ai-careers/sql-is-the-gate","minutes":9,"keyIdea":"SQL is tested in almost every data interview because it is fast to test and impossible to fake, and six query shapes cover nearly all of the work."},{"slug":"python-that-earns","title":"The employable half of Python","url":"https://addaly.com/learn/ai-careers/python-that-earns","api":"https://addaly.com/api/lesson/ai-careers/python-that-earns","minutes":9,"keyIdea":"The paid part of Python is reading other people's code, handling files and failures, and writing a script that somebody else can run."},{"slug":"statistics-you-will-be-asked-about","title":"The statistics that come up, and the ones that never do","url":"https://addaly.com/learn/ai-careers/statistics-you-will-be-asked-about","api":"https://addaly.com/api/lesson/ai-careers/statistics-you-will-be-asked-about","minutes":10,"keyIdea":"Precision improves only with the square root of sample size, so most business tests were never large enough to detect the effect they were run to find."},{"slug":"version-control-in-public","title":"Git, and what a reviewer sees before your code","url":"https://addaly.com/learn/ai-careers/version-control-in-public","api":"https://addaly.com/api/lesson/ai-careers/version-control-in-public","minutes":8,"keyIdea":"Your repository is read as evidence that you can work with other people, and the commit history is read before the code is."},{"slug":"the-command-line-and-the-free-tier","title":"The terminal, the container, and a cloud bill of zero","url":"https://addaly.com/learn/ai-careers/the-command-line-and-the-free-tier","api":"https://addaly.com/api/lesson/ai-careers/the-command-line-and-the-free-tier","minutes":10,"keyIdea":"Cloud costs are dominated by resources that bill for existing rather than for working, so set a budget alert first and prefer things that scale to zero."},{"slug":"the-spreadsheet-nobody-lists","title":"The spreadsheet skill nobody puts on a syllabus","url":"https://addaly.com/learn/ai-careers/the-spreadsheet-nobody-lists","api":"https://addaly.com/api/lesson/ai-careers/the-spreadsheet-nobody-lists","minutes":7,"keyIdea":"The organisation's real numbers live in spreadsheets, and being able to meet people there is what gets you access to the questions worth answering."},{"slug":"evaluation-the-scarce-skill","title":"Evaluation: deciding what \"correct\" means, in advance","url":"https://addaly.com/learn/ai-careers/evaluation-the-scarce-skill","api":"https://addaly.com/api/lesson/ai-careers/evaluation-the-scarce-skill","minutes":10,"keyIdea":"Anyone can produce an AI output; the scarce and durable skill is defining what counts as correct before you look, and then measuring it."},{"slug":"portfolio-from-zero","title":"A portfolio when you have never been paid for this","url":"https://addaly.com/learn/ai-careers/portfolio-from-zero","api":"https://addaly.com/api/lesson/ai-careers/portfolio-from-zero","minutes":7,"keyIdea":"A portfolio proves judgement under mess, not that you can finish someone else's tutorial."},{"slug":"the-data-you-can-legally-use","title":"Where portfolio data comes from, and what you may do with it","url":"https://addaly.com/learn/ai-careers/the-data-you-can-legally-use","api":"https://addaly.com/api/lesson/ai-careers/the-data-you-can-legally-use","minutes":9,"keyIdea":"A dataset's licence, its provenance and whether it describes people decide what you may do with it, and the absence of a licence means you have no permission rather than a free hand."},{"slug":"the-case-study-page","title":"Writing up a project as a decision record","url":"https://addaly.com/learn/ai-careers/the-case-study-page","api":"https://addaly.com/api/lesson/ai-careers/the-case-study-page","minutes":8,"keyIdea":"Write the project as a record of decisions (the mess, the choice, the number, and what it still gets wrong) because that is what a reviewer is reading for."}]},{"slug":"getting-seen","title":"Getting seen: the routes that put a person in front of your work","summary":"Applying cold is the most common strategy and the weakest one. Every route that works has the same shape: a human sees your work before, or instead of, an application landing in a pile. This module covers the paper, the message, the job beside the data, and the first person who pays you.","outcome":"Run a search that puts your work in front of named people rather than into application queues, and identify the bridge role or first paid job you would take to get inside.","lessons":[{"slug":"how-hiring-really-works","title":"How people actually get in","url":"https://addaly.com/learn/ai-careers/how-hiring-really-works","api":"https://addaly.com/api/lesson/ai-careers/how-hiring-really-works","minutes":8,"keyIdea":"Most people enter this field sideways, from an adjacent job or through someone who vouches."},{"slug":"the-numbers-of-a-search","title":"Running the search as a funnel","url":"https://addaly.com/learn/ai-careers/the-numbers-of-a-search","api":"https://addaly.com/api/lesson/ai-careers/the-numbers-of-a-search","minutes":9,"keyIdea":"A job search is a funnel with measurable conversion at each stage, and the route in changes the top-of-funnel rate by roughly ten times, which no amount of extra applications can compensate for."},{"slug":"the-cv-that-survives","title":"A CV that survives a thirty-second read","url":"https://addaly.com/learn/ai-careers/the-cv-that-survives","api":"https://addaly.com/api/lesson/ai-careers/the-cv-that-survives","minutes":8,"keyIdea":"A CV is scanned for scope, outcome and a number; formatting exists only to make those findable fast."},{"slug":"the-profile-people-open","title":"The profile a stranger checks in ninety seconds","url":"https://addaly.com/learn/ai-careers/the-profile-people-open","api":"https://addaly.com/api/lesson/ai-careers/the-profile-people-open","minutes":8,"keyIdea":"Three public surfaces each answer one question in ninety seconds, and a reviewer who compares them treats inconsistencies as reasons to stop reading."},{"slug":"writing-to-strangers","title":"Writing to strangers, and what to say","url":"https://addaly.com/learn/ai-careers/writing-to-strangers","api":"https://addaly.com/api/lesson/ai-careers/writing-to-strangers","minutes":8,"keyIdea":"A short, specific message about their problem, sent to the person who does the work, outperforms fifty applications."},{"slug":"writing-in-public","title":"Publishing, and the inbound it creates","url":"https://addaly.com/learn/ai-careers/writing-in-public","api":"https://addaly.com/api/lesson/ai-careers/writing-in-public","minutes":9,"keyIdea":"Published writing works because it is found by strangers months later, which rewards narrow, specific answers to real problems over broad guides written from a week's knowledge."},{"slug":"open-source-as-a-door","title":"A merged pull request as evidence","url":"https://addaly.com/learn/ai-careers/open-source-as-a-door","api":"https://addaly.com/api/lesson/ai-careers/open-source-as-a-door","minutes":9,"keyIdea":"A merged pull request proves you can work inside someone else's codebase and take review, and the reproduction of a bug is often a more welcome contribution than the fix."},{"slug":"the-bridge-job","title":"The job next to the data","url":"https://addaly.com/learn/ai-careers/the-bridge-job","api":"https://addaly.com/api/lesson/ai-careers/the-bridge-job","minutes":8,"keyIdea":"Take the job beside the data and become the person who answers with numbers, because an internal move skips the entire screening machine."},{"slug":"the-first-paid-job","title":"The first client, and how not to lose money on them","url":"https://addaly.com/learn/ai-careers/the-first-paid-job","api":"https://addaly.com/api/lesson/ai-careers/the-first-paid-job","minutes":9,"keyIdea":"The first paid job converts you from a learner into someone with a reference, so make it small, write the scope down, and pick work you have already done once."}]},{"slug":"searching-with-ai","title":"Using AI in your own search","summary":"Both sides of the hiring table now use models, and most advice about it is sold by people with something to sell: CV scores, auto-apply subscriptions, interview coaching. This module is the mechanics: what an applicant tracking system actually does, why volume applying stopped working, where a model genuinely saves you hours, where using one destroys the evidence you were trying to produce, and what you should never paste into somebody else's server.","outcome":"Use a model for the mechanical parts of a search (tailoring, research, rehearsal, gap analysis) while stating correctly what an applicant tracking system does and does not do, and keeping your own and an employer's confidential material out of a third party's logs.","lessons":[{"slug":"what-ai-does-for-a-job-search","title":"What it genuinely helps with, and what it quietly ruins","url":"https://addaly.com/learn/ai-careers/what-ai-does-for-a-job-search","api":"https://addaly.com/api/lesson/ai-careers/what-ai-does-for-a-job-search","minutes":9,"keyIdea":"Use a model wherever you can verify the result and the result is not itself the evidence of your ability; the moment the output is the thing being judged, using one removes what you were trying to prove."},{"slug":"the-ats-and-the-score-that-does-not-exist","title":"What an applicant tracking system actually does","url":"https://addaly.com/learn/ai-careers/the-ats-and-the-score-that-does-not-exist","api":"https://addaly.com/api/lesson/ai-careers/the-ats-and-the-score-that-does-not-exist","minutes":9,"keyIdea":"An applicant tracking system parses, stores and filters: the automatic rejection happens on the form's knockout questions, not through a secret score applied to your CV."},{"slug":"tailoring-without-lying","title":"Rewriting a CV against an advert, and the line","url":"https://addaly.com/learn/ai-careers/tailoring-without-lying","api":"https://addaly.com/api/lesson/ai-careers/tailoring-without-lying","minutes":8,"keyIdea":"Tailoring is translating true things into the employer's vocabulary, and the reason not to cross into invention is mechanical: titles and dates get verified and tools get tested."},{"slug":"mass-applying-is-broken","title":"Why volume stopped working, on both sides","url":"https://addaly.com/learn/ai-careers/mass-applying-is-broken","api":"https://addaly.com/api/lesson/ai-careers/mass-applying-is-broken","minutes":8,"keyIdea":"Generated applications made volume cheap, employers responded by raising the cost of being considered, and the result is that a warm approach is now worth roughly twenty cold applications rather than seven."},{"slug":"what-you-paste-into-a-chatbot","title":"Your CV, their take-home, and the terms","url":"https://addaly.com/learn/ai-careers/what-you-paste-into-a-chatbot","api":"https://addaly.com/api/lesson/ai-careers/what-you-paste-into-a-chatbot","minutes":8,"keyIdea":"Before pasting anything, establish whose data it is; for material that is not yours, a small model running locally removes the question rather than managing it."},{"slug":"research-before-the-call","title":"Forty minutes of research, and how to check it","url":"https://addaly.com/learn/ai-careers/research-before-the-call","api":"https://addaly.com/api/lesson/ai-careers/research-before-the-call","minutes":8,"keyIdea":"Research is aimed at how the organisation makes money, where the role sits and what remains uncertain, and every fact a model gives you needs a source you actually open."},{"slug":"the-ai-screened-interview","title":"Recorded and machine-scored interviews","url":"https://addaly.com/learn/ai-careers/the-ai-screened-interview","api":"https://addaly.com/api/lesson/ai-careers/the-ai-screened-interview","minutes":9,"keyIdea":"A one-way interview is an elimination stage scored mostly from a transcript, so structure, audio quality and a first-sentence answer matter more than anything you would optimise in a live conversation."},{"slug":"practising-out-loud","title":"Rehearsing with a model that wants to please you","url":"https://addaly.com/learn/ai-careers/practising-out-loud","api":"https://addaly.com/api/lesson/ai-careers/practising-out-loud","minutes":8,"keyIdea":"Interviews are lost in production rather than recognition, so rehearsal must be out loud, one question at a time, with the model instructed to press on vagueness rather than encourage."},{"slug":"building-with-an-assistant","title":"Building a project you can still defend","url":"https://addaly.com/learn/ai-careers/building-with-an-assistant","api":"https://addaly.com/api/lesson/ai-careers/building-with-an-assistant","minutes":9,"keyIdea":"Type the parts a reviewer would ask \"why\" about, delegate the rest, and never move past generated code you cannot explain, because generated data code fails by being plausible rather than by breaking."}]},{"slug":"the-interview","title":"The interview, from first screen to signed offer","summary":"Hiring processes in this field are five to seven stages, and each one tests something different. Knowing which stage you are in tells you what to say. This module walks the whole sequence: the take-home, the live exercise, the design conversation, the stories, the questions you ask, and the offer.","outcome":"Walk each stage of a data or AI hiring process knowing what it tests, and negotiate an offer without a competing one in hand.","lessons":[{"slug":"the-shape-of-the-process","title":"The stages, and what each one is really testing","url":"https://addaly.com/learn/ai-careers/the-shape-of-the-process","api":"https://addaly.com/api/lesson/ai-careers/the-shape-of-the-process","minutes":7,"keyIdea":"Every interview stage tests a different thing, and knowing which stage you are in tells you what to say."},{"slug":"the-recruiter-screen","title":"The first call, and the salary question","url":"https://addaly.com/learn/ai-careers/the-recruiter-screen","api":"https://addaly.com/api/lesson/ai-careers/the-recruiter-screen","minutes":9,"keyIdea":"The recruiter screen tests availability, motivation and band rather than skill, and the two questions worth spending your last minutes on are the internal level and why the role is open."},{"slug":"the-take-home","title":"The take-home, and how not to lose on it","url":"https://addaly.com/learn/ai-careers/the-take-home","api":"https://addaly.com/api/lesson/ai-careers/the-take-home","minutes":9,"keyIdea":"A take-home is graded on judgement and communication, not on completeness, so scope it, time-box it, and write down what you left out."},{"slug":"the-live-technical","title":"The live exercise, where silence is scored","url":"https://addaly.com/learn/ai-careers/the-live-technical","api":"https://addaly.com/api/lesson/ai-careers/the-live-technical","minutes":8,"keyIdea":"In a live exercise the interviewer is grading your narration, so saying where you are stuck scores better than being quietly stuck."},{"slug":"the-design-conversation","title":"\"How would you build this?\" answered well","url":"https://addaly.com/learn/ai-careers/the-design-conversation","api":"https://addaly.com/api/lesson/ai-careers/the-design-conversation","minutes":9,"keyIdea":"A design answer is a set of constraints, measurements and failure modes, not an architecture diagram."},{"slug":"the-metrics-case","title":"\"How would you measure it?\"","url":"https://addaly.com/learn/ai-careers/the-metrics-case","api":"https://addaly.com/api/lesson/ai-careers/the-metrics-case","minutes":10,"keyIdea":"Answer a metrics case by naming the decision, one sensitive primary metric, guardrails and a counter-metric, and when diagnosing a sudden drop, check the instrumentation before the users."},{"slug":"talking-about-your-work","title":"Talking about your work without lying or shrinking","url":"https://addaly.com/learn/ai-careers/talking-about-your-work","api":"https://addaly.com/api/lesson/ai-careers/talking-about-your-work","minutes":8,"keyIdea":"Prepare six stories with real numbers and tell them the same way every time; the failure story is the one that decides the round."},{"slug":"the-questions-you-ask","title":"Your questions, and what the answers reveal","url":"https://addaly.com/learn/ai-careers/the-questions-you-ask","api":"https://addaly.com/api/lesson/ai-careers/the-questions-you-ask","minutes":8,"keyIdea":"Your questions decide whether the job is real: ask about where the data lives, what is in production, and why the role is open."},{"slug":"the-offer","title":"The offer conversation","url":"https://addaly.com/learn/ai-careers/the-offer","api":"https://addaly.com/api/lesson/ai-careers/the-offer","minutes":9,"keyIdea":"Almost everything is negotiable once, politely, in writing, and a first offer is rarely the top of the band."},{"slug":"what-the-money-looks-like","title":"Pay, rates, and who actually decides them","url":"https://addaly.com/learn/ai-careers/what-the-money-looks-like","api":"https://addaly.com/api/lesson/ai-careers/what-the-money-looks-like","minutes":8,"keyIdea":"Pay is set by employer type, country and your alternatives, far more than by your job title."},{"slug":"rejection-and-the-log","title":"What a rejection tells you, and what it does not","url":"https://addaly.com/learn/ai-careers/rejection-and-the-log","api":"https://addaly.com/api/lesson/ai-careers/rejection-and-the-log","minutes":8,"keyIdea":"Most rejected finalists were hireable, because hiring ranks candidates under a budget rather than assessing them absolutely, so read your log in tens, not one at a time."}]},{"slug":"the-money-and-the-paperwork","title":"The money, and the paperwork underneath it","summary":"An offer is a package, and the headline number is the part that tells you least. This module takes the whole thing apart: what the components actually pay out, why most equity is worth nothing, which contract clauses change what the job is worth, how contractor and employer-of-record arrangements differ from employment, and how to compare two offers with arithmetic. Employment law differs by country and this is not legal advice; what is offered here is the shape of the questions and where to take them.","outcome":"Take an offer apart into cash, variable pay, employer contributions, equity and contract terms, compare two offers with explicit arithmetic rather than headline figures, and name the clauses and employment structures that materially change what you are being paid.","lessons":[{"slug":"what-is-actually-in-an-offer","title":"The headline number is the least useful one","url":"https://addaly.com/learn/ai-careers/what-is-actually-in-an-offer","api":"https://addaly.com/api/lesson/ai-careers/what-is-actually-in-an-offer","minutes":9,"keyIdea":"Compare guaranteed annual cash against guaranteed annual cash; a bundled total figure mixes employer contributions and target variable pay into a number nobody receives."},{"slug":"equity-without-the-hype","title":"Options, RSUs, and why most equity is worth nothing","url":"https://addaly.com/learn/ai-careers/equity-without-the-hype","api":"https://addaly.com/api/lesson/ai-careers/equity-without-the-hype","minutes":10,"keyIdea":"An option is only worth the share value minus its strike, and the liquidation preference and the ninety-day exercise window decide most real outcomes long before the share price does."},{"slug":"the-contract-you-sign","title":"Notice, bonds, IP and the clauses that follow you","url":"https://addaly.com/learn/ai-careers/the-contract-you-sign","api":"https://addaly.com/api/lesson/ai-careers/the-contract-you-sign","minutes":10,"keyIdea":"Contract clauses vary enormously by jurisdiction and the only moment you can change one is before signing, so read for notice, bonds, IP assignment and outside-work restrictions and ask for carve-outs in writing."},{"slug":"employed-contracted-or-neither","title":"Employee, contractor, or an employer of record","url":"https://addaly.com/learn/ai-careers/employed-contracted-or-neither","api":"https://addaly.com/api/lesson/ai-careers/employed-contracted-or-neither","minutes":9,"keyIdea":"Employment carries 25% to 40% of salary in contributions and protections, so a contract at the same gross is a pay cut, and an employer of record gives you local employment status without the client needing an entity."},{"slug":"working-across-borders","title":"Getting paid by a company in another country","url":"https://addaly.com/learn/ai-careers/working-across-borders","api":"https://addaly.com/api/lesson/ai-careers/working-across-borders","minutes":9,"keyIdea":"Foreign pay is reduced by an exchange spread nobody itemises, taxed where you are resident rather than where the client is, and usually benchmarked to your city, so compare it against your real local alternative, not against the employer's home market."},{"slug":"visas-and-relocation","title":"The shape of the routes, and why the rules keep moving","url":"https://addaly.com/learn/ai-careers/visas-and-relocation","api":"https://addaly.com/api/lesson/ai-careers/visas-and-relocation","minutes":9,"keyIdea":"Immigration rules move constantly and only official sources are current; the routes that reward planning are points-based systems and the internal transfer, and no legitimate party ever charges a candidate for a job offer."},{"slug":"comparing-two-offers","title":"Two offers, compared with arithmetic","url":"https://addaly.com/learn/ai-careers/comparing-two-offers","api":"https://addaly.com/api/lesson/ai-careers/comparing-two-offers","minutes":10,"keyIdea":"Compare guaranteed cash first, then expected cash using historic payout rates, then contributions, avoided spending and the costs of the job, and enter equity in a private company at zero with the upside noted separately."},{"slug":"how-pay-actually-moves","title":"Raises, promotions and the market rate","url":"https://addaly.com/learn/ai-careers/how-pay-actually-moves","api":"https://addaly.com/api/lesson/ai-careers/how-pay-actually-moves","minutes":9,"keyIdea":"Raises come from a small annual pool, promotions move your band, and job changes reset you to market, so if the band is the constraint, no amount of performance evidence will fix it internally."}]},{"slug":"working-for-yourself","title":"Freelancing and contracting, as a business","summary":"The first paid job is covered in the module on getting seen. This module is what comes after it: the arithmetic that turns a salary into a rate, where a repeatable pipeline of clients comes from, how to write a scope that prevents the argument, how to get paid by a company whose finance department has never heard of you, and the honest conditions under which working for yourself is the wrong choice this year.","outcome":"Price your own work upwards from a target income and a realistic utilisation figure, write a proposal whose exclusions prevent scope creep, run a payment process that survives a slow client, and state the conditions under which you should take a salaried job instead.","lessons":[{"slug":"freelance-economics","title":"Utilisation, and why a rate is not a salary divided by hours","url":"https://addaly.com/learn/ai-careers/freelance-economics","api":"https://addaly.com/api/lesson/ai-careers/freelance-economics","minutes":9,"keyIdea":"Only half to two-thirds of a freelancer's hours are billable, and once lost employer contributions and unpaid risk are added, a sustainable rate is roughly two to two and a half times salary divided by working hours."},{"slug":"setting-a-rate","title":"Pricing the work, and raising the price","url":"https://addaly.com/learn/ai-careers/setting-a-rate","api":"https://addaly.com/api/lesson/ai-careers/setting-a-rate","minutes":9,"keyIdea":"Set a floor from your own cost arithmetic, price fixed work with 20% to 50% contingency behind a paid discovery phase, and raise the rate on new enquiries rather than waiting for permission."},{"slug":"where-clients-come-from","title":"A pipeline, after the first three clients","url":"https://addaly.com/learn/ai-careers/where-clients-come-from","api":"https://addaly.com/api/lesson/ai-careers/where-clients-come-from","minutes":9,"keyIdea":"A repeatable pipeline comes from a sentence somebody can forward, referrals asked for specifically, agency subcontracting and a weekly selling slot; platforms are a ramp to your first references, not a business."},{"slug":"scope-and-the-proposal","title":"Writing the thing that prevents the argument","url":"https://addaly.com/learn/ai-careers/scope-and-the-proposal","api":"https://addaly.com/api/lesson/ai-careers/scope-and-the-proposal","minutes":9,"keyIdea":"A proposal exists to make the disagreement happen in week zero, and its most valuable sections are what is excluded, what acceptance means, and how many revisions are included."},{"slug":"getting-paid-on-time","title":"Invoices, procurement, and the chase","url":"https://addaly.com/learn/ai-careers/getting-paid-on-time","api":"https://addaly.com/api/lesson/ai-careers/getting-paid-on-time","minutes":9,"keyIdea":"Get onto the client's vendor system and obtain a purchase order before starting, chase on a fixed schedule rather than by mood, and keep something undelivered until the final payment clears."},{"slug":"the-boring-half","title":"Registration, tax, records and insurance","url":"https://addaly.com/learn/ai-careers/the-boring-half","api":"https://addaly.com/api/lesson/ai-careers/the-boring-half","minutes":9,"keyIdea":"Move a fixed share of every payment into a separate tax account the day it arrives, keep records weekly, and treat professional indemnity insurance as a contract requirement rather than an optional extra."},{"slug":"from-hours-to-a-product","title":"Repeatable offers, retainers and the ceiling of hours","url":"https://addaly.com/learn/ai-careers/from-hours-to-a-product","api":"https://addaly.com/api/lesson/ai-careers/from-hours-to-a-product","minutes":9,"keyIdea":"Hours are capped, so income above a certain point comes from repeating a defined offer, from retainers that create a floor, or from assets you own: all of which require narrowing what you sell."},{"slug":"when-freelancing-is-wrong","title":"The conditions under which you should take the job","url":"https://addaly.com/learn/ai-careers/when-freelancing-is-wrong","api":"https://addaly.com/api/lesson/ai-careers/when-freelancing-is-wrong","minutes":8,"keyIdea":"Freelancing early without anyone reviewing your work produces years of uncorrected habits, and selling is a permanent 30% to 40% of the job rather than a start-up cost."}]},{"slug":"staying","title":"Staying: the first ninety days and the ten years after","summary":"Getting hired is the short problem. This module covers the long one: earning trust in a new team, being the person whose numbers are right, deciding what to learn while the field shouts, refusing the thing you should not build, and knowing a plateau when you are standing on one.","outcome":"Earn trust in a new data role within ninety days, and decide what to learn, what to refuse and when to leave using evidence rather than anxiety.","lessons":[{"slug":"the-first-ninety-days","title":"The first ninety days","url":"https://addaly.com/learn/ai-careers/the-first-ninety-days","api":"https://addaly.com/api/lesson/ai-careers/the-first-ninety-days","minutes":8,"keyIdea":"Reproduce other people's numbers before you propose changing anything, because the mess usually encodes a reason you do not know yet."},{"slug":"reading-code-you-did-not-write","title":"Landing in a codebase nobody documented","url":"https://addaly.com/learn/ai-careers/reading-code-you-did-not-write","api":"https://addaly.com/api/lesson/ai-careers/reading-code-you-did-not-write","minutes":9,"keyIdea":"Trace one behaviour end to end rather than reading the codebase, and use git history to recover the reasons: the strange condition usually has a commit explaining the incident that caused it."},{"slug":"being-trusted-with-a-number","title":"Being trusted with a number","url":"https://addaly.com/learn/ai-careers/being-trusted-with-a-number","api":"https://addaly.com/api/lesson/ai-careers/being-trusted-with-a-number","minutes":8,"keyIdea":"Reputation in data work is built by catching your own mistakes before anyone else does."},{"slug":"what-gets-automated","title":"Which parts of this work are most exposed","url":"https://addaly.com/learn/ai-careers/what-gets-automated","api":"https://addaly.com/api/lesson/ai-careers/what-gets-automated","minutes":7,"keyIdea":"Well-specified work with fast verification goes first; being accountable for the answer goes last."},{"slug":"keeping-up-without-drowning","title":"Keeping up without drowning","url":"https://addaly.com/learn/ai-careers/keeping-up-without-drowning","api":"https://addaly.com/api/lesson/ai-careers/keeping-up-without-drowning","minutes":7,"keyIdea":"Follow problems and primary sources rather than launches, because almost nothing announced this month changes what you should do this month."},{"slug":"the-refusals","title":"The things you will be asked to build","url":"https://addaly.com/learn/ai-careers/the-refusals","api":"https://addaly.com/api/lesson/ai-careers/the-refusals","minutes":8,"keyIdea":"You will be asked to build something you should not; decide your line before the meeting and put the objection in writing."},{"slug":"the-long-game","title":"The second job, the plateau, and the ten-year view","url":"https://addaly.com/learn/ai-careers/the-long-game","api":"https://addaly.com/api/lesson/ai-careers/the-long-game","minutes":8,"keyIdea":"A plateau is a signal to change the work, not to work harder, and the durable assets are a domain, thirty people who have seen you work, and the habit of finishing."},{"slug":"writing-for-people-who-decide","title":"The one-pager that gets a decision","url":"https://addaly.com/learn/ai-careers/writing-for-people-who-decide","api":"https://addaly.com/api/lesson/ai-careers/writing-for-people-who-decide","minutes":9,"keyIdea":"Lead with the recommendation, its cost and the decision needed by when, and attach to every number its definition, date, sample and uncertainty, because stating uncertainty is what makes a reader trust the rest."},{"slug":"promotion-on-evidence","title":"Getting promoted, and the case somebody has to make","url":"https://addaly.com/learn/ai-careers/promotion-on-evidence","api":"https://addaly.com/api/lesson/ai-careers/promotion-on-evidence","minutes":9,"keyIdea":"Promotion is argued for you in a room you are not in, using evidence you supplied, and it is granted for work already being done at the next level rather than as a reward for the current one."}]}]},{"slug":"making-things-with-ai","title":"Making Things with AI","tagline":"Images, video, voice and music: how they work, where they break, who owns them.","description":"A plain, honest tour of generative media. How image models actually work, why hands and text used to break and what that predicts, how people really edit, what video still cannot do, the consent line on voice cloning, where generated music stands legally, and the genuinely unsettled question of who owns any of it, plus the labelling duties that are already law in several countries.","level":"beginner","track":"create","url":"https://addaly.com/learn/making-things-with-ai","lessons":84,"minutes":685,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/making-things-with-ai.pdf","pages":462,"bytes":4938536,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/making-things-with-ai.pdf","cover":"https://addaly.com/textbooks/look/making-things-with-ai/1.webp?v=2026-10-07-4938536"},"film":null,"modules":[{"slug":"how-the-picture-gets-made","title":"How the picture gets made","summary":"Before any advice about prompts, the machinery. This block follows a single image from a request to a file: the noise it starts as, the small compressed space it is actually built in, how your words become a steering signal, what the guidance number does to the result, why the same prompt gives a different picture tomorrow, what the training run actually consisted of, and how much of the training images the finished model can be shown to hold.","outcome":"Trace one generated image from random noise to a saved file (naming the latent space, the text encoder, the denoising loop, the guidance term, the sampler and the seed) and say, with the published evidence, what a diffusion model does and does not retain from its training set.","lessons":[{"slug":"what-the-model-is-doing","title":"What the model is actually doing","url":"https://addaly.com/learn/making-things-with-ai/what-the-model-is-doing","api":"https://addaly.com/api/lesson/making-things-with-ai/what-the-model-is-doing","minutes":7,"keyIdea":"An image model does not draw. It removes noise from static, over and over, steered by your words."},{"slug":"noise-and-the-schedule","title":"Noise, steps and the schedule","url":"https://addaly.com/learn/making-things-with-ai/noise-and-the-schedule","api":"https://addaly.com/api/lesson/making-things-with-ai/noise-and-the-schedule","minutes":9,"keyIdea":"Generation is a fixed number of small denoising steps down a noise schedule, which is why step count buys detail only up to a point and then stops."},{"slug":"the-latent-space","title":"The small space the picture is built in","url":"https://addaly.com/learn/making-things-with-ai/the-latent-space","api":"https://addaly.com/api/lesson/making-things-with-ai/the-latent-space","minutes":9,"keyIdea":"Diffusion happens in a compressed latent grid roughly sixty-four times smaller than the image, and the autoencoder that compresses and restores it is the source of a specific family of defects."},{"slug":"words-into-steering","title":"How your words become a steering signal","url":"https://addaly.com/learn/making-things-with-ai/words-into-steering","api":"https://addaly.com/api/lesson/making-things-with-ai/words-into-steering","minutes":9,"keyIdea":"A text encoder turns your prompt into a sequence of vectors that the network attends to at every step and every position, which is why prompts steer continuously rather than being read once."},{"slug":"guidance-and-its-cost","title":"Guidance: the dial that makes it obey","url":"https://addaly.com/learn/making-things-with-ai/guidance-and-its-cost","api":"https://addaly.com/api/lesson/making-things-with-ai/guidance-and-its-cost","minutes":8,"keyIdea":"Classifier-free guidance runs the model twice per step and extrapolates away from the unprompted prediction, so raising it increases obedience and saturation together, and past a point it destroys the image."},{"slug":"seeds-and-samplers","title":"Seeds, samplers and reproducibility","url":"https://addaly.com/learn/making-things-with-ai/seeds-and-samplers","api":"https://addaly.com/api/lesson/making-things-with-ai/seeds-and-samplers","minutes":8,"keyIdea":"The seed fixes the starting noise and the sampler decides the path away from it, so a result is only reproducible when both are recorded along with every other number."},{"slug":"what-training-was","title":"What the training run actually consisted of","url":"https://addaly.com/learn/making-things-with-ai/what-training-was","api":"https://addaly.com/api/lesson/making-things-with-ai/what-training-was","minutes":9,"keyIdea":"These models were trained on billions of image-and-alt-text pairs scraped from the open web, so the caption vocabulary of that scrape sets the language your prompts have to speak."},{"slug":"not-only-diffusion","title":"Diffusion is not the only way","url":"https://addaly.com/learn/making-things-with-ai/not-only-diffusion","api":"https://addaly.com/api/lesson/making-things-with-ai/not-only-diffusion","minutes":8,"keyIdea":"Generative images have been built with GANs, autoregressive token models and flow matching as well as diffusion, and the architecture explains what a given tool is fast at and bad at."},{"slug":"what-the-model-retains","title":"What the model does and does not retain","url":"https://addaly.com/learn/making-things-with-ai/what-the-model-retains","api":"https://addaly.com/api/lesson/making-things-with-ai/what-the-model-retains","minutes":9,"keyIdea":"A diffusion model stores a compressed statistical summary rather than a library of images, but images duplicated many times in the training data can be reproduced almost exactly, and the measured rate is small but not zero."}]},{"slug":"steering-it","title":"Steering it: prompts and what sits around them","summary":"A prompt is a piece of text aimed at a specific encoder, and almost everything people believe about prompting is a description of one encoder's habits. This block covers what your words are competing against, what negative prompts and weighting actually do to the arithmetic, the token limit that silently eats long prompts, why the advice reversed when models changed encoder, when a reference image beats any sentence, and how to keep a prompt as a reproducible record rather than a lucky accident.","outcome":"Diagnose a failing prompt by identifying which part of the pipeline is ignoring it (encoder type, token limit, guidance, attribute binding or a missing reference) and rewrite it for the specific model in front of you rather than by adding adjectives.","lessons":[{"slug":"writing-the-prompt","title":"Writing a prompt that gets what you meant","url":"https://addaly.com/learn/making-things-with-ai/writing-the-prompt","api":"https://addaly.com/api/lesson/making-things-with-ai/writing-the-prompt","minutes":7,"keyIdea":"Write the caption that would have sat under the picture you want, not a wish list of adjectives."},{"slug":"tags-or-sentences","title":"Tag soup or sentences: why the advice reversed","url":"https://addaly.com/learn/making-things-with-ai/tags-or-sentences","api":"https://addaly.com/api/lesson/making-things-with-ai/tags-or-sentences","minutes":8,"keyIdea":"Prompt style should match the captions a model was trained on, so keyword lists suit CLIP-era models and plain descriptive sentences suit models trained on machine-written captions."},{"slug":"negative-prompts","title":"What a negative prompt really does","url":"https://addaly.com/learn/making-things-with-ai/negative-prompts","api":"https://addaly.com/api/lesson/making-things-with-ai/negative-prompts","minutes":8,"keyIdea":"A negative prompt replaces the empty prompt in the guidance calculation, so it defines what the image is pushed away from rather than issuing a prohibition, and it only exists on models that use classifier-free guidance."},{"slug":"weights-and-emphasis","title":"Weighting, emphasis and where it breaks","url":"https://addaly.com/learn/making-things-with-ai/weights-and-emphasis","api":"https://addaly.com/api/lesson/making-things-with-ai/weights-and-emphasis","minutes":8,"keyIdea":"Prompt weighting scales token embeddings before they reach the model, which is a blunt intervention on a representation the model never saw scaled during training."},{"slug":"the-token-limit","title":"The token limit that eats long prompts","url":"https://addaly.com/learn/making-things-with-ai/the-token-limit","api":"https://addaly.com/api/lesson/making-things-with-ai/the-token-limit","minutes":7,"keyIdea":"CLIP-based pipelines read about 75 tokens of prompt and silently discard or awkwardly average the rest, so a long prompt on an older model is mostly inert."},{"slug":"reference-images","title":"When a reference image beats any sentence","url":"https://addaly.com/learn/making-things-with-ai/reference-images","api":"https://addaly.com/api/lesson/making-things-with-ai/reference-images","minutes":8,"keyIdea":"Conditioning on an image passes thousands of numbers of visual information where a prompt passes tens, so anything you can show is better shown than described."},{"slug":"metadata-and-reproducibility","title":"Reading the metadata, keeping the record","url":"https://addaly.com/learn/making-things-with-ai/metadata-and-reproducibility","api":"https://addaly.com/api/lesson/making-things-with-ai/metadata-and-reproducibility","minutes":7,"keyIdea":"Generation parameters are usually written into the output file, so a result is recoverable and auditable if you keep the file and know where to look."},{"slug":"hidden-rewriting","title":"The prompt you sent is not the prompt it got","url":"https://addaly.com/learn/making-things-with-ai/hidden-rewriting","api":"https://addaly.com/api/lesson/making-things-with-ai/hidden-rewriting","minutes":8,"keyIdea":"Hosted image services rewrite, expand and filter prompts before the model sees them, which explains results that do not match the words you typed and makes reproducibility a property of the service rather than of your record."},{"slug":"a-prompt-is-not-an-asset","title":"A prompt is not an asset","url":"https://addaly.com/learn/making-things-with-ai/a-prompt-is-not-an-asset","api":"https://addaly.com/api/lesson/making-things-with-ai/a-prompt-is-not-an-asset","minutes":7,"keyIdea":"Prompts are tightly coupled to one model version and transfer badly, so the durable asset is the reference material, the workflow and the record, not the words."}]},{"slug":"where-it-breaks","title":"Where it breaks, and why","summary":"Every generative failure has a mechanism, and knowing the mechanism tells you whether a prompt can fix it. This block works through the durable ones: counting and attribute binding, negation, spatial relations, the pull toward the training-set average, the bias that pull carries, physics and reflections, detail at small scale, refusals and false positives from safety filters, and the visible tells that used to identify a generated image and are now disappearing.","outcome":"Look at a failed generation and classify the failure by mechanism (binding, negation, resolution, distribution pull, physics or filtering) and state for each whether a prompt change, a structural control, a different model or a manual fix is the only thing that will work.","lessons":[{"slug":"hands-and-text","title":"What hands and text told us","url":"https://addaly.com/learn/making-things-with-ai/hands-and-text","api":"https://addaly.com/api/lesson/making-things-with-ai/hands-and-text","minutes":7,"keyIdea":"These models nail local texture and fail global constraints: anything you must count, spell, or match across a picture."},{"slug":"counting-and-binding","title":"Counting, and the objects that swap their attributes","url":"https://addaly.com/learn/making-things-with-ai/counting-and-binding","api":"https://addaly.com/api/lesson/making-things-with-ai/counting-and-binding","minutes":8,"keyIdea":"Nothing in the architecture ties an adjective to a noun or enforces a quantity, so counts and attribute assignments are emergent rather than guaranteed and degrade sharply above three or four objects."},{"slug":"negation","title":"Why \"without\" summons the thing","url":"https://addaly.com/learn/making-things-with-ai/negation","api":"https://addaly.com/api/lesson/making-things-with-ai/negation","minutes":8,"keyIdea":"A caption-trained encoder represents which concepts are present far better than logical operators over them, so naming something in order to exclude it tends to make it more likely."},{"slug":"spatial-relations","title":"Left, right, behind: the relations it cannot hold","url":"https://addaly.com/learn/making-things-with-ai/spatial-relations","api":"https://addaly.com/api/lesson/making-things-with-ai/spatial-relations","minutes":8,"keyIdea":"Spatial relations are learned as weak statistical associations rather than represented geometrically, so relational prompts fail unpredictably and are better solved with a conditioning map than with words."},{"slug":"the-average-face","title":"The pull toward the average","url":"https://addaly.com/learn/making-things-with-ai/the-average-face","api":"https://addaly.com/api/lesson/making-things-with-ai/the-average-face","minutes":8,"keyIdea":"Guidance and short prompts both push output toward the most typical example in the training distribution, which is why unspecified images converge on a narrow, glossy sameness."},{"slug":"bias-in-the-picture","title":"The bias, and what mitigating it actually does","url":"https://addaly.com/learn/making-things-with-ai/bias-in-the-picture","api":"https://addaly.com/api/lesson/making-things-with-ai/bias-in-the-picture","minutes":9,"keyIdea":"Demographic skew in generated images is the distribution pull applied to people, measured and reproducible, and every available mitigation trades one problem for another rather than removing it."},{"slug":"physics-and-continuity","title":"Reflections, shadows and things that must agree","url":"https://addaly.com/learn/making-things-with-ai/physics-and-continuity","api":"https://addaly.com/api/lesson/making-things-with-ai/physics-and-continuity","minutes":8,"keyIdea":"The model matches local texture statistics without enforcing any global constraint, so anything that must agree across the picture (a reflection, a shadow, a continuing line) fails in a characteristic way."},{"slug":"small-things","title":"Faces in crowds and other small things","url":"https://addaly.com/learn/making-things-with-ai/small-things","api":"https://addaly.com/api/lesson/making-things-with-ai/small-things","minutes":7,"keyIdea":"Detail quality is set by how many latent cells a subject occupies, so anything small in frame degrades regardless of prompt, model quality or output resolution."},{"slug":"when-it-refuses","title":"Refusals, filters and the false positives","url":"https://addaly.com/learn/making-things-with-ai/when-it-refuses","api":"https://addaly.com/api/lesson/making-things-with-ai/when-it-refuses","minutes":8,"keyIdea":"Safety filtering happens at several separate points with different failure characteristics, and the classifier-based stages produce predictable false positives on medical, artistic and non-Western content."},{"slug":"the-tells","title":"The tells, and why they are disappearing","url":"https://addaly.com/learn/making-things-with-ai/the-tells","api":"https://addaly.com/api/lesson/making-things-with-ai/the-tells","minutes":8,"keyIdea":"The visible artefacts people use to identify generated images are transient consequences of specific architectures, so a detection habit built on them expires and confident identification by eye is not reliable."}]},{"slug":"control-not-luck","title":"Control: getting the picture you actually need","summary":"Prompting produces a starting frame; control produces a deliverable. This block covers the mechanisms that let you decide rather than hope: the denoise strength that governs how much of an existing image survives, masked regeneration and its context window, structural conditioning maps, small fine-tunes trained on your own material, the honest state of character consistency, what an upscaler invents, why compositing is still the job, and the free toolchain that runs all of it on ordinary hardware.","outcome":"Take a nearly-right generation to a finished deliverable using the appropriate mechanism at each stage (denoise strength, masked regeneration, a conditioning map, a small fine-tune, an upscaler and a manual composite) and say which of those a given defect requires.","lessons":[{"slug":"editing-not-prompting","title":"Editing what you already have","url":"https://addaly.com/learn/making-things-with-ai/editing-not-prompting","api":"https://addaly.com/api/lesson/making-things-with-ai/editing-not-prompting","minutes":8,"keyIdea":"Prompting gets you a starting frame; masks, denoise strength and structural inputs get you a finished image."},{"slug":"denoise-strength","title":"Denoise strength: the number that decides how much survives","url":"https://addaly.com/learn/making-things-with-ai/denoise-strength","api":"https://addaly.com/api/lesson/making-things-with-ai/denoise-strength","minutes":8,"keyIdea":"Image-to-image adds noise to an existing picture and denoises from there, so the strength value sets how far back along the schedule you start and therefore how much of the original can survive."},{"slug":"masks-and-inpainting","title":"Masks, feathering and the context window","url":"https://addaly.com/learn/making-things-with-ai/masks-and-inpainting","api":"https://addaly.com/api/lesson/making-things-with-ai/masks-and-inpainting","minutes":8,"keyIdea":"Masked regeneration replaces only the masked latent while conditioning on the surrounding pixels, so what the model can see around the mask determines whether the repair matches."},{"slug":"structural-conditioning","title":"Conditioning on structure: depth, edges and pose","url":"https://addaly.com/learn/making-things-with-ai/structural-conditioning","api":"https://addaly.com/api/lesson/making-things-with-ai/structural-conditioning","minutes":9,"keyIdea":"A control network injects a spatial map into the denoising loop at every step, fixing geometry while leaving content and style to the prompt, and each map type constrains a different thing."},{"slug":"small-fine-tunes","title":"Teaching it something it does not know","url":"https://addaly.com/learn/making-things-with-ai/small-fine-tunes","api":"https://addaly.com/api/lesson/making-things-with-ai/small-fine-tunes","minutes":9,"keyIdea":"A small fine-tune such as a LoRA adjusts a low-rank correction to the model's weights from a few dozen images, which is the only reliable way to add a subject, style or object the base model has no coverage for."},{"slug":"keeping-a-character","title":"The same face twice","url":"https://addaly.com/learn/making-things-with-ai/keeping-a-character","api":"https://addaly.com/api/lesson/making-things-with-ai/keeping-a-character","minutes":8,"keyIdea":"Character consistency has no exact solution because nothing in the pipeline stores an identity, so the working methods all trade fidelity, effort and flexibility against each other."},{"slug":"upscaling-invents","title":"What an upscaler invents","url":"https://addaly.com/learn/making-things-with-ai/upscaling-invents","api":"https://addaly.com/api/lesson/making-things-with-ai/upscaling-invents","minutes":8,"keyIdea":"Upscaling adds plausible detail rather than recovering real detail, so it improves photographs and fabricates evidence, and the distinction matters most in exactly the cases people reach for it."},{"slug":"compositing-is-the-job","title":"Compositing is still the job","url":"https://addaly.com/learn/making-things-with-ai/compositing-is-the-job","api":"https://addaly.com/api/lesson/making-things-with-ai/compositing-is-the-job","minutes":8,"keyIdea":"Generated elements assembled by hand in an ordinary editor beat single-pass generation for anything that must be exact, which is why the finishing skill matters more than the prompting skill."},{"slug":"the-free-toolchain","title":"What runs on the machine you have","url":"https://addaly.com/learn/making-things-with-ai/the-free-toolchain","api":"https://addaly.com/api/lesson/making-things-with-ai/the-free-toolchain","minutes":8,"keyIdea":"Local generation is possible on modest hardware through quantisation, smaller models and tiled processing, so the choice between hosted and local is a real one rather than a matter of budget alone."}]},{"slug":"time-and-space","title":"Time and space: video and three dimensions","summary":"Adding time to a generative model changes the arithmetic and adds a whole class of failure. This block covers why a second of video costs what it costs, the mechanisms that hold a moving picture together and the ones that let it flicker, how motion and camera are conditioned, why clips drift as they lengthen, how a talking head is made and what consent it requires, how to test a claim that a model understands physics, how to evaluate a video model honestly, what synthetic video means for believing anything, and the separate world of generated three-dimensional objects.","outcome":"Explain why generated video is short, expensive and inconsistent in terms of its underlying mechanism, design a fair test of a video model's claims, and say what a generated 3D asset is actually made of and where it can and cannot be used.","lessons":[{"slug":"video-shots-not-films","title":"Video, and what it still cannot do","url":"https://addaly.com/learn/making-things-with-ai/video-shots-not-films","api":"https://addaly.com/api/lesson/making-things-with-ai/video-shots-not-films","minutes":8,"keyIdea":"Video models produce shots, not films; plan the edit and budget for the takes you throw away."},{"slug":"frames-are-expensive","title":"Why a second of video costs what it does","url":"https://addaly.com/learn/making-things-with-ai/frames-are-expensive","api":"https://addaly.com/api/lesson/making-things-with-ai/frames-are-expensive","minutes":8,"keyIdea":"Video generation is not image generation repeated, because the model must attend across frames as well as within them, so cost rises faster than the frame count and memory becomes the binding limit."},{"slug":"temporal-consistency","title":"What holds a moving picture together","url":"https://addaly.com/learn/making-things-with-ai/temporal-consistency","api":"https://addaly.com/api/lesson/making-things-with-ai/temporal-consistency","minutes":8,"keyIdea":"Consistency across frames comes from temporal attention over a limited window, so anything that must persist longer than that window has no mechanism keeping it stable."},{"slug":"conditioning-video","title":"Conditioning a clip: stills, frames and video in","url":"https://addaly.com/learn/making-things-with-ai/conditioning-video","api":"https://addaly.com/api/lesson/making-things-with-ai/conditioning-video","minutes":8,"keyIdea":"A video model can be anchored by a first frame, a last frame, a full input video or a reference image, and each conditioning route constrains a different thing and fails differently."},{"slug":"camera-and-motion","title":"Directing motion, and what actually lands","url":"https://addaly.com/learn/making-things-with-ai/camera-and-motion","api":"https://addaly.com/api/lesson/making-things-with-ai/camera-and-motion","minutes":8,"keyIdea":"Camera and motion instructions work only where the training captions contained consistent film vocabulary, so standard shot language lands and invented descriptions do not, and explicit trajectory conditioning beats both."},{"slug":"drift-and-extension","title":"Why clips get worse as they get longer","url":"https://addaly.com/learn/making-things-with-ai/drift-and-extension","api":"https://addaly.com/api/lesson/making-things-with-ai/drift-and-extension","minutes":8,"keyIdea":"Extending a clip by conditioning each chunk on the previous one accumulates error, because each chunk's small imperfections become the ground truth for the next."},{"slug":"talking-heads","title":"Talking heads, lip sync and the consent line","url":"https://addaly.com/learn/making-things-with-ai/talking-heads","api":"https://addaly.com/api/lesson/making-things-with-ai/talking-heads","minutes":9,"keyIdea":"A talking-head system drives face and mouth motion from an audio track, which makes convincing video of a person saying words they never said cheap, and the only real control on it is consent recorded before the fact."},{"slug":"world-model-claims","title":"Testing a claim that it understands physics","url":"https://addaly.com/learn/making-things-with-ai/world-model-claims","api":"https://addaly.com/api/lesson/making-things-with-ai/world-model-claims","minutes":8,"keyIdea":"Claims that a video model has learned physics should be tested with occlusion, conservation and causal-order cases, because local plausibility over a few seconds is achievable without any physical model at all."},{"slug":"evaluating-a-video-model","title":"Testing a video model honestly","url":"https://addaly.com/learn/making-things-with-ai/evaluating-a-video-model","api":"https://addaly.com/api/lesson/making-things-with-ai/evaluating-a-video-model","minutes":8,"keyIdea":"A demonstration reel is selected output, so judging a video model requires a fixed prompt battery, a stated number of attempts per prompt, and a usable-shot rate rather than an impression."},{"slug":"synthetic-video-and-trust","title":"What synthetic video does to believing anything","url":"https://addaly.com/learn/making-things-with-ai/synthetic-video-and-trust","api":"https://addaly.com/api/lesson/making-things-with-ai/synthetic-video-and-trust","minutes":8,"keyIdea":"The main effect of convincing synthetic video is not that fakes are believed but that real recordings can be denied, so the useful response is provenance and verification rather than detection."},{"slug":"three-dimensions","title":"Generated objects and the space around them","url":"https://addaly.com/learn/making-things-with-ai/three-dimensions","api":"https://addaly.com/api/lesson/making-things-with-ai/three-dimensions","minutes":8,"keyIdea":"Generated 3D comes in two incompatible forms (meshes you can edit and animate, and radiance representations you can only view) and confusing them wastes a great deal of time."}]},{"slug":"voice-and-speech","title":"Voice and speech","summary":"Speech is the medium where synthesis became convincing first and where the consequences are sharpest. This block covers how a synthetic voice is actually produced, what a voice print is and why a few seconds of audio is enough, why synthetic speech still sounds flat and what fixes it, how uneven the coverage of languages and accents is, the recognition half of the pipeline and where it fails, what breaks in a dubbing chain, why detecting a synthetic voice is harder than people assume, and the fraud pattern that every organisation should already have a control for.","outcome":"Describe the path from text to a waveform through tokens, an acoustic model and a vocoder, judge what a voice-cloning claim requires in consent and disclosure, and specify a verification control that defeats voice-impersonation fraud without relying on detection.","lessons":[{"slug":"voice-and-consent","title":"Voice, and the line you do not cross","url":"https://addaly.com/learn/making-things-with-ai/voice-and-consent","api":"https://addaly.com/api/lesson/making-things-with-ai/voice-and-consent","minutes":9,"keyIdea":"Clone a voice only with the owner's informed, written, revocable consent, and tell the audience before they believe it."},{"slug":"how-speech-is-made","title":"From text to a waveform","url":"https://addaly.com/learn/making-things-with-ai/how-speech-is-made","api":"https://addaly.com/api/lesson/making-things-with-ai/how-speech-is-made","minutes":8,"keyIdea":"Modern speech synthesis converts text into discrete audio tokens with a language model and turns those tokens back into sound with a neural codec, which is why it now sounds natural and why it hallucinates."},{"slug":"the-voice-print","title":"What a voice print actually is","url":"https://addaly.com/learn/making-things-with-ai/the-voice-print","api":"https://addaly.com/api/lesson/making-things-with-ai/the-voice-print","minutes":8,"keyIdea":"A speaker embedding is a few hundred numbers summarising vocal identity, extracted from seconds of audio and used as conditioning, which is why cloning is fast, cheap and effectively impossible to prevent."},{"slug":"prosody","title":"Prosody, and why it still sounds slightly wrong","url":"https://addaly.com/learn/making-things-with-ai/prosody","api":"https://addaly.com/api/lesson/making-things-with-ai/prosody","minutes":8,"keyIdea":"Prosody carries meaning that the text does not, so a system given only text has to guess the interpretation, and its guesses are wrong in ways that are subtle and cumulative."},{"slug":"languages-and-accents","title":"The languages it does badly, and who that is","url":"https://addaly.com/learn/making-things-with-ai/languages-and-accents","api":"https://addaly.com/api/lesson/making-things-with-ai/languages-and-accents","minutes":8,"keyIdea":"Speech systems inherit the distribution of their training audio, so quality varies by orders of magnitude across languages and accents, and the gap falls on exactly the people least able to route around it."},{"slug":"recognising-speech","title":"The other half: turning speech into text","url":"https://addaly.com/learn/making-things-with-ai/recognising-speech","api":"https://addaly.com/api/lesson/making-things-with-ai/recognising-speech","minutes":8,"keyIdea":"Recognition models are trained to produce plausible transcripts, so they fail by writing fluent text that was not said, which is more dangerous than failing by writing nothing."},{"slug":"dubbing-and-translation","title":"The dubbing chain, and where it breaks","url":"https://addaly.com/learn/making-things-with-ai/dubbing-and-translation","api":"https://addaly.com/api/lesson/making-things-with-ai/dubbing-and-translation","minutes":8,"keyIdea":"A dubbing pipeline is four error-prone models in series, so errors compound and the only reliable control is a human check at each stage rather than at the end."},{"slug":"detecting-synthetic-voice","title":"Can you tell? Mostly not","url":"https://addaly.com/learn/making-things-with-ai/detecting-synthetic-voice","api":"https://addaly.com/api/lesson/making-things-with-ai/detecting-synthetic-voice","minutes":8,"keyIdea":"Synthetic-speech detection relies on artefacts that compression and re-recording destroy and that new models do not produce, so detection is a weak signal and the practical defence is verification instead."},{"slug":"the-fraud-case","title":"The fraud that already happens","url":"https://addaly.com/learn/making-things-with-ai/the-fraud-case","api":"https://addaly.com/api/lesson/making-things-with-ai/the-fraud-case","minutes":8,"keyIdea":"Voice-impersonation fraud follows a fixed script (urgency, authority, secrecy, an irreversible payment) and the control that defeats it is an out-of-band check, which works regardless of how convincing the voice is."}]},{"slug":"music-and-sound","title":"Music and sound","summary":"Music is the medium where the technical problem and the legal problem are hardest at the same time. This block covers how audio is generated at all, why music is harder than speech, what source separation makes possible, where generated sound effects are genuinely good, the state of the training-data dispute, when a melody becomes infringement, what platforms do about generated tracks, and where generated music is the right answer rather than the cheap one.","outcome":"Explain how a music model represents and generates audio, judge whether a generated track carries a real infringement risk and on what basis, and choose between generated music, licensed library music and a commissioned composer for a specific brief with reasons you could defend.","lessons":[{"slug":"music-and-its-sources","title":"Music, and whose music it learned from","url":"https://addaly.com/learn/making-things-with-ai/music-and-its-sources","api":"https://addaly.com/api/lesson/making-things-with-ai/music-and-its-sources","minutes":8,"keyIdea":"Generated music can still infringe a real melody, and \"a model wrote it\" is not a defence."},{"slug":"how-audio-is-generated","title":"How a machine writes a waveform","url":"https://addaly.com/learn/making-things-with-ai/how-audio-is-generated","api":"https://addaly.com/api/lesson/making-things-with-ai/how-audio-is-generated","minutes":8,"keyIdea":"Music models generate stacks of discrete audio tokens produced by a neural codec, so the codec's bitrate sets the ceiling on quality and the token rate sets the cost of length."},{"slug":"why-music-is-hard","title":"Why music is harder than speech","url":"https://addaly.com/learn/making-things-with-ai/why-music-is-hard","api":"https://addaly.com/api/lesson/making-things-with-ai/why-music-is-hard","minutes":8,"keyIdea":"Music requires structure over minutes and simultaneous independent voices, both of which fall outside a model's attention window and neither of which local plausibility supplies."},{"slug":"stems-and-separation","title":"Pulling a mix apart","url":"https://addaly.com/learn/making-things-with-ai/stems-and-separation","api":"https://addaly.com/api/lesson/making-things-with-ai/stems-and-separation","minutes":8,"keyIdea":"Source separation splits a finished mix into instrument stems with free tools at usable quality, which enables real work and does not change the rights position of the recording at all."},{"slug":"sound-design","title":"Sound effects, foley and where it is already good","url":"https://addaly.com/learn/making-things-with-ai/sound-design","api":"https://addaly.com/api/lesson/making-things-with-ai/sound-design","minutes":8,"keyIdea":"Generated sound effects are at production quality for many categories because a sound effect is short and unstructured, which is exactly the regime these models handle well."},{"slug":"the-training-fight","title":"Whose music it learned from","url":"https://addaly.com/learn/making-things-with-ai/the-training-fight","api":"https://addaly.com/api/lesson/making-things-with-ai/the-training-fight","minutes":9,"keyIdea":"The music industry's dispute over training data is further advanced than in any other medium, and it has produced both litigation and licensing, which makes the shape of the disagreement unusually visible."},{"slug":"melody-and-infringement","title":"When a tune becomes somebody else's","url":"https://addaly.com/learn/making-things-with-ai/melody-and-infringement","api":"https://addaly.com/api/lesson/making-things-with-ai/melody-and-infringement","minutes":8,"keyIdea":"Music infringement can turn on a few seconds of melody, the standards are inconsistent and unpredictable, and \"a model generated it\" is not a defence anywhere."},{"slug":"platform-rules","title":"What platforms do about it","url":"https://addaly.com/learn/making-things-with-ai/platform-rules","api":"https://addaly.com/api/lesson/making-things-with-ai/platform-rules","minutes":8,"keyIdea":"Distribution platforms enforce their own rules on generated music through matching systems and upload policies, and those rules bite faster and harder than any court would."},{"slug":"when-music-fits","title":"When generated music is the right answer","url":"https://addaly.com/learn/making-things-with-ai/when-music-fits","api":"https://addaly.com/api/lesson/making-things-with-ai/when-music-fits","minutes":8,"keyIdea":"Generated music competes with library music rather than with composition, so the honest choice depends on whether the music needs to be specific, and saying which is which protects both your work and your relationships."}]},{"slug":"provenance-and-disclosure","title":"Provenance, detection and disclosure","summary":"If you cannot tell by looking, the question becomes what can be established and how. This block covers why detection is structurally weak, what a watermark can and cannot survive, how cryptographic content credentials work and where the chain breaks, how to verify a claim rather than an image, the second-order harm of universal doubt, how to write a disclosure that actually informs somebody, what the platforms currently require, and a verification routine borrowed from newsrooms that anybody can run.","outcome":"Assess an image or clip of unknown origin using provenance, source and corroboration rather than inspection, explain why a detector's positive result is a weak signal at realistic base rates, and write a disclosure that tells a reader what was synthetic and what was not.","lessons":[{"slug":"why-detection-fails","title":"Why detection is the wrong hope","url":"https://addaly.com/learn/making-things-with-ai/why-detection-fails","api":"https://addaly.com/api/lesson/making-things-with-ai/why-detection-fails","minutes":8,"keyIdea":"Detectors learn the fingerprints of the generators they were trained on, so they degrade on new models, on compressed files and at realistic base rates, which makes their output a signal to investigate rather than a verdict."},{"slug":"watermarking","title":"What a watermark can survive","url":"https://addaly.com/learn/making-things-with-ai/watermarking","api":"https://addaly.com/api/lesson/making-things-with-ai/watermarking","minutes":8,"keyIdea":"An invisible watermark embeds a signal robust to ordinary handling, which makes it a useful record of compliant generation and not a defence against anyone who does not want to be marked."},{"slug":"content-credentials","title":"Signed provenance, and where the chain breaks","url":"https://addaly.com/learn/making-things-with-ai/content-credentials","api":"https://addaly.com/api/lesson/making-things-with-ai/content-credentials","minutes":9,"keyIdea":"Content Credentials attach a cryptographically signed record of how a file was made and edited, which establishes origin rather than detecting fakery, and the chain breaks wherever a tool or platform does not carry it."},{"slug":"verifying-a-claim","title":"Verify the claim, not the picture","url":"https://addaly.com/learn/making-things-with-ai/verifying-a-claim","api":"https://addaly.com/api/lesson/making-things-with-ai/verifying-a-claim","minutes":8,"keyIdea":"Almost every question about a suspicious image is answered by finding its earliest appearance and its source, which is free, fast and unaffected by how good the generator was."},{"slug":"the-liars-dividend","title":"When everything can be denied","url":"https://addaly.com/learn/making-things-with-ai/the-liars-dividend","api":"https://addaly.com/api/lesson/making-things-with-ai/the-liars-dividend","minutes":8,"keyIdea":"Universal awareness that media can be fabricated lets genuine evidence be dismissed, so the second-order harm arrives without anyone needing to make a fake at all."},{"slug":"labelling-that-informs","title":"Writing a disclosure somebody can use","url":"https://addaly.com/learn/making-things-with-ai/labelling-that-informs","api":"https://addaly.com/api/lesson/making-things-with-ai/labelling-that-informs","minutes":8,"keyIdea":"A useful disclosure says what was synthetic and what was not, at the point of viewing, in the viewer's terms, which is a different thing from a legal label that protects the publisher."},{"slug":"platform-labelling","title":"What the platforms require now","url":"https://addaly.com/learn/making-things-with-ai/platform-labelling","api":"https://addaly.com/api/lesson/making-things-with-ai/platform-labelling","minutes":8,"keyIdea":"Platform disclosure rules are contractual, automatic and inconsistent between services, so the practical obligation on a publisher is set by where the work is distributed rather than by where they live."},{"slug":"a-verification-routine","title":"A routine you can actually run","url":"https://addaly.com/learn/making-things-with-ai/a-verification-routine","api":"https://addaly.com/api/lesson/making-things-with-ai/a-verification-routine","minutes":8,"keyIdea":"A short, written, repeatable checklist beats expertise applied inconsistently, because the failure in verification is almost always skipping a step under time pressure."}]},{"slug":"ownership-and-law","title":"Ownership, law and the parts nobody has settled","summary":"The legal questions around generative media are genuinely unresolved, differ by country, and are moving. This block sets out the shape of each disagreement rather than pretending to resolve it: whether training on copyrighted work is lawful, whether the output can be owned and by whom, what protects a person's face and voice, why style sits outside copyright, what the licence on a model actually permits, what a vendor's indemnity is worth, the disclosure duties that are already law in several places, and what to write into a contract when the law will not tell you.","outcome":"Identify which distinct legal question a given situation raises (training, output ownership, likeness, style, model licence, or disclosure duty) describe how the answer differs across jurisdictions, and draft the contractual terms that make a piece of AI-assisted client work defensible without relying on a resolution that does not exist.","lessons":[{"slug":"ownership-and-labels","title":"Who owns it, and who has to say it is AI","url":"https://addaly.com/learn/making-things-with-ai/ownership-and-labels","api":"https://addaly.com/api/lesson/making-things-with-ai/ownership-and-labels","minutes":12,"keyIdea":"Ownership of AI output differs by country and is genuinely unsettled; the duty to label it is not."},{"slug":"the-training-question","title":"Was the training lawful?","url":"https://addaly.com/learn/making-things-with-ai/the-training-question","api":"https://addaly.com/api/lesson/making-things-with-ai/the-training-question","minutes":9,"keyIdea":"Whether training on copyrighted work without permission is lawful is being answered differently in different countries and differently for different facts, so there is no single answer and any confident one is a jurisdiction or a sales position."},{"slug":"output-copyright","title":"Can anyone own the output?","url":"https://addaly.com/learn/making-things-with-ai/output-copyright","api":"https://addaly.com/api/lesson/making-things-with-ai/output-copyright","minutes":9,"keyIdea":"Most copyright systems require a human author, so purely prompted output is unprotected in several major jurisdictions while human contribution to selection, arrangement and editing can be, and a few countries have a specific rule for computer-generated works."},{"slug":"likeness-and-voice","title":"Faces, voices and the rights in a person","url":"https://addaly.com/learn/making-things-with-ai/likeness-and-voice","api":"https://addaly.com/api/lesson/making-things-with-ai/likeness-and-voice","minutes":9,"keyIdea":"Rights in a person's face and voice sit outside copyright, vary enormously by country, and are the area moving fastest in legislation, so this is where a generated work is most likely to be actionable."},{"slug":"style-and-trademark","title":"Style is not owned, and other things are","url":"https://addaly.com/learn/making-things-with-ai/style-and-trademark","api":"https://addaly.com/api/lesson/making-things-with-ai/style-and-trademark","minutes":8,"keyIdea":"Copyright does not protect artistic style, so the strongest objections to style imitation have no copyright remedy, while trademark, passing off and false endorsement can reach the same conduct from another direction."},{"slug":"the-model-licence","title":"Read the licence on the model","url":"https://addaly.com/learn/making-things-with-ai/the-model-licence","api":"https://addaly.com/api/lesson/making-things-with-ai/the-model-licence","minutes":8,"keyIdea":"Model weights come with licences that restrict use, and outputs come with terms of service that assign or condition rights, so what you may do with a generated file is set by two documents most people never open."},{"slug":"indemnity","title":"What an indemnity actually buys","url":"https://addaly.com/learn/making-things-with-ai/indemnity","api":"https://addaly.com/api/lesson/making-things-with-ai/indemnity","minutes":8,"keyIdea":"A vendor indemnity is a conditional contractual promise with exclusions and caps, so it shifts some risk on some facts and never removes the obligation to check your own work."},{"slug":"disclosure-in-law","title":"Where labelling is already the law","url":"https://addaly.com/learn/making-things-with-ai/disclosure-in-law","api":"https://addaly.com/api/lesson/making-things-with-ai/disclosure-in-law","minutes":9,"keyIdea":"Several jurisdictions now impose legal duties to label synthetic content, with different triggers, timings and penalties, so the applicable rule depends on where the audience is rather than where you are."},{"slug":"client-work","title":"What to write down before you start","url":"https://addaly.com/learn/making-things-with-ai/client-work","api":"https://addaly.com/api/lesson/making-things-with-ai/client-work","minutes":8,"keyIdea":"Because the law is unsettled, the contract is what actually allocates risk in AI-assisted client work, and the terms that matter are short, specific and better raised at the start than discovered at the end."},{"slug":"when-you-are-not-sure","title":"A procedure for the cases nobody has answered","url":"https://addaly.com/learn/making-things-with-ai/when-you-are-not-sure","api":"https://addaly.com/api/lesson/making-things-with-ai/when-you-are-not-sure","minutes":8,"keyIdea":"When the law is unsettled, a written decision procedure based on recognisability, substitution, deception and reversibility produces defensible choices without needing a resolution that does not exist."}]}]},{"slug":"evaluating-ai","title":"Knowing If It Works","tagline":"The least glamorous skill in applied AI, and the one that decides whether your thing actually works.","description":"Most AI features are shipped on a feeling. Someone tries eight examples, the outputs read well, and the thing goes live. And nobody finds out how often it fails until customers do. This course is about the other path: building a small evaluation set by hand, deciding what to measure when the output is prose, using a model as a judge without being lied to by it, catching regressions when you edit a prompt, running an honest A/B, and holding cost and latency in the same frame as quality. It ends with the situation every team eventually hits: the model changed under you, complaints went up, and you need an answer by tomorrow.","level":"intermediate","track":"build","url":"https://addaly.com/learn/evaluating-ai","lessons":76,"minutes":672,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/evaluating-ai.pdf","pages":422,"bytes":4667179,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/evaluating-ai.pdf","cover":"https://addaly.com/textbooks/look/evaluating-ai/1.webp?v=2026-10-07-4667179"},"film":{"url":"https://addaly.com/learn/evaluating-ai#film","video":"https://addaly.com/videos/evaluating-ai.mp4","captions":"https://addaly.com/videos/evaluating-ai.vtt","poster":"https://addaly.com/videos/evaluating-ai.jpg","seconds":969,"bytes":106178512,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"evidence","title":"What counts as evidence","summary":"Before any metric, you need a question worth answering and a set of examples worth trusting. This block builds the fixed, labelled, held-out set that every later lesson runs against: where the examples come from, how two people are made to agree on a label, what a synthetic example can and cannot stand in for, and what the number has to be compared against before it means anything.","outcome":"Turn a vague claim that a feature works into a fixed, labelled, held-out set with a stated agreement figure and a named baseline, and say what size of difference a set that size can and cannot detect.","lessons":[{"slug":"a-demo-is-not-a-measurement","title":"A demo is not a measurement","url":"https://addaly.com/learn/evaluating-ai/a-demo-is-not-a-measurement","api":"https://addaly.com/api/lesson/evaluating-ai/a-demo-is-not-a-measurement","minutes":7,"keyIdea":"A result is a number, on a fixed set, next to a comparison: anything else is an anecdote."},{"slug":"the-question-before-the-metric","title":"The decision the number has to serve","url":"https://addaly.com/learn/evaluating-ai/the-question-before-the-metric","api":"https://addaly.com/api/lesson/evaluating-ai/the-question-before-the-metric","minutes":8,"keyIdea":"Write the decision, the threshold and the unacceptable failure before you see any result, or every number you get will look like agreement."},{"slug":"the-hundred-examples","title":"A hundred examples, made by hand","url":"https://addaly.com/learn/evaluating-ai/the-hundred-examples","api":"https://addaly.com/api/lesson/evaluating-ai/the-hundred-examples","minutes":8,"keyIdea":"A hundred real labelled examples resolves fifteen-point differences and settles arguments; it cannot resolve three-point ones."},{"slug":"where-examples-come-from","title":"Where the examples come from","url":"https://addaly.com/learn/evaluating-ai/where-examples-come-from","api":"https://addaly.com/api/lesson/evaluating-ai/where-examples-come-from","minutes":9,"keyIdea":"Sample your traffic deliberately (stratified, deduplicated, and weighted back to real proportions) because the easiest hundred items to grab are the least representative hundred you own."},{"slug":"labelling-without-lying","title":"Writing a labelling guide two people can agree on","url":"https://addaly.com/learn/evaluating-ai/labelling-without-lying","api":"https://addaly.com/api/lesson/evaluating-ai/labelling-without-lying","minutes":9,"keyIdea":"Two people labelling the same twenty items blind, and a written ruling for every disagreement, is what turns an opinion into a criterion."},{"slug":"agreement-arithmetic","title":"How much your labellers actually agree","url":"https://addaly.com/learn/evaluating-ai/agreement-arithmetic","api":"https://addaly.com/api/lesson/evaluating-ai/agreement-arithmetic","minutes":9,"keyIdea":"Raw agreement flatters you whenever one class is common, so compute kappa as well, and read a low kappa as a fault in the definition rather than in the people."},{"slug":"synthetic-test-cases","title":"Test cases you generate, and what they cannot tell you","url":"https://addaly.com/learn/evaluating-ai/synthetic-test-cases","api":"https://addaly.com/api/lesson/evaluating-ai/synthetic-test-cases","minutes":8,"keyIdea":"Generated items measure whether a system can handle a shape of input; they cannot tell you how often that shape occurs, so they belong in a capability suite and never in the headline number."},{"slug":"splits-and-leakage","title":"Two sets, and the ways they get contaminated","url":"https://addaly.com/learn/evaluating-ai/splits-and-leakage","api":"https://addaly.com/api/lesson/evaluating-ai/splits-and-leakage","minutes":9,"keyIdea":"Keep a development set you tune against and a test set you almost never look at, split by group and by time, because a set you have optimised against no longer predicts anything."},{"slug":"baselines-and-ceilings","title":"The number above it and the number below it","url":"https://addaly.com/learn/evaluating-ai/baselines-and-ceilings","api":"https://addaly.com/api/lesson/evaluating-ai/baselines-and-ceilings","minutes":9,"keyIdea":"A score is only readable between a trivial baseline and the human agreement ceiling, and most impressive-looking results shrink to two or three points once both are drawn."},{"slug":"error-bars-you-can-compute","title":"How wrong your number probably is","url":"https://addaly.com/learn/evaluating-ai/error-bars-you-can-compute","api":"https://addaly.com/api/lesson/evaluating-ai/error-bars-you-can-compute","minutes":9,"keyIdea":"A pass rate on 100 items carries roughly eight points of uncertainty, but comparing two systems on the same items (counting which ones flipped) can detect far smaller differences."}]},{"slug":"metrics-that-mean-something","title":"Metrics that mean something","summary":"A number is only useful if it maps onto the decision you are making. This block works through the metrics for the shapes of output you will actually meet (a label, a probability, a quantity, a ranked list and prose), the curves that summarise a system across every threshold at once, and what each of them hides when you average it.","outcome":"Choose a metric that matches the decision at hand, set a threshold from a real confusion matrix or a precision-recall curve, say whether a model's 0.8 means anything about probability, and separate a retrieval failure from a generation failure in a system that does both.","lessons":[{"slug":"measuring-text","title":"What to measure when the output is prose","url":"https://addaly.com/learn/evaluating-ai/measuring-text","api":"https://addaly.com/api/lesson/evaluating-ai/measuring-text","minutes":8,"keyIdea":"Decompose quality into checks that are separately true or false; one blended score hides where it broke."},{"slug":"the-confusion-matrix","title":"Precision and recall, worked on real numbers","url":"https://addaly.com/learn/evaluating-ai/the-confusion-matrix","api":"https://addaly.com/api/lesson/evaluating-ai/the-confusion-matrix","minutes":9,"keyIdea":"Precision, recall and accuracy come from the same four cells, and under class imbalance accuracy rewards a system that does nothing."},{"slug":"multi-label-and-partial-credit","title":"When an item has several right answers","url":"https://addaly.com/learn/evaluating-ai/multi-label-and-partial-credit","api":"https://addaly.com/api/lesson/evaluating-ai/multi-label-and-partial-credit","minutes":8,"keyIdea":"Exact-match scoring on multi-label tasks collapses under its own arithmetic, so score at the level the product acts on and audit predicted labels by hand, because the gold set is rarely complete."},{"slug":"reading-the-curve","title":"What a curve says, and what its one number leaves out","url":"https://addaly.com/learn/evaluating-ai/reading-the-curve","api":"https://addaly.com/api/lesson/evaluating-ai/reading-the-curve","minutes":9,"keyIdea":"AUC is the probability that a random positive outranks a random negative, so it measures ranking across thresholds you would never run: quote recall at a fixed precision, or precision at your real review budget, instead."},{"slug":"thresholds-and-the-cost-of-being-wrong","title":"Moving the threshold is a business decision","url":"https://addaly.com/learn/evaluating-ai/thresholds-and-the-cost-of-being-wrong","api":"https://addaly.com/api/lesson/evaluating-ai/thresholds-and-the-cost-of-being-wrong","minutes":10,"keyIdea":"The threshold is not a model parameter but a price you set on the two kinds of mistake, and a band with a human in the middle usually beats a single line."},{"slug":"probability-calibration","title":"Making a 0.8 mean eighty per cent","url":"https://addaly.com/learn/evaluating-ai/probability-calibration","api":"https://addaly.com/api/lesson/evaluating-ai/probability-calibration","minutes":9,"keyIdea":"Calibration is measured with a reliability diagram and summarised by expected calibration error or log loss; fitting it changes no rankings at all, which is exactly why it is cheap and why it cannot rescue a weak model."},{"slug":"metrics-for-numbers","title":"When the output is a quantity","url":"https://addaly.com/learn/evaluating-ai/metrics-for-numbers","api":"https://addaly.com/api/lesson/evaluating-ai/metrics-for-numbers","minutes":9,"keyIdea":"Choose between MAE and RMSE by deciding whether one large error is worse than several small ones, avoid MAPE because its asymmetry biases model selection towards under-forecasting, and score every forecast against the naive baseline."},{"slug":"retrieval-metrics","title":"Scoring a ranked list","url":"https://addaly.com/learn/evaluating-ai/retrieval-metrics","api":"https://addaly.com/api/lesson/evaluating-ai/retrieval-metrics","minutes":9,"keyIdea":"For a retrieval-augmented system, measure recall at the number of passages you actually pass to the model, because the generator cannot recover an answer that was never retrieved."},{"slug":"evaluating-rag","title":"Three questions, not one, for a retrieval system","url":"https://addaly.com/learn/evaluating-ai/evaluating-rag","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-rag","minutes":10,"keyIdea":"Measure retrieval, groundedness and relevance separately, and always include questions your corpus cannot answer so you find out whether the system says so."},{"slug":"the-benchmark-you-read-about","title":"Public benchmarks, and what they are for","url":"https://addaly.com/learn/evaluating-ai/the-benchmark-you-read-about","api":"https://addaly.com/api/lesson/evaluating-ai/the-benchmark-you-read-about","minutes":8,"keyIdea":"Public benchmarks are a shortlist of models worth testing, never a decision, because contamination, format and their distance from your task all sit between the score and your product."}]},{"slug":"deciding-if-it-is-real","title":"Deciding whether a difference is real","summary":"Two systems, two numbers, and the question that decides the week: is the gap real, or is it the sample? This block does the arithmetic (a paired test you can compute on paper, a bootstrap in ten lines, the number of items a comparison actually needs) and the four ways a comparison lies to you before you have looked at the model at all.","outcome":"Decide whether an observed difference between two systems is larger than the noise in your set, compute an interval for any metric you can calculate using the bootstrap, and state in advance how many items the comparison needs to detect the effect you would act on.","lessons":[{"slug":"simulating-the-null","title":"Asking what pure chance would have produced","url":"https://addaly.com/learn/evaluating-ai/simulating-the-null","api":"https://addaly.com/api/lesson/evaluating-ai/simulating-the-null","minutes":9,"keyIdea":"Shuffle which system produced which result ten thousand times and see how often chance beats your observed gap: one loop replaces a shelf of named tests and encodes your design honestly."},{"slug":"p-values-and-what-they-do-not-say","title":"What a p-value is, and the four things it is not","url":"https://addaly.com/learn/evaluating-ai/p-values-and-what-they-do-not-say","api":"https://addaly.com/api/lesson/evaluating-ai/p-values-and-what-they-do-not-say","minutes":9,"keyIdea":"A p-value is the chance of seeing a gap this large if there were no effect. It is not the probability you are right, and when few of your ideas work most of your significant results are still wrong."},{"slug":"how-many-items-do-you-need","title":"Sizing the set before you run it","url":"https://addaly.com/learn/evaluating-ai/how-many-items-do-you-need","api":"https://addaly.com/api/lesson/evaluating-ai/how-many-items-do-you-need","minutes":9,"keyIdea":"Start from the smallest difference worth acting on, not the one you hope for, and compute the item count it needs: for a five-point gap around 80% that is roughly a thousand items per side unless the comparison is paired."},{"slug":"bootstrap-pitfalls","title":"The bootstrap, and the three places it lies","url":"https://addaly.com/learn/evaluating-ai/bootstrap-pitfalls","api":"https://addaly.com/api/lesson/evaluating-ai/bootstrap-pitfalls","minutes":9,"keyIdea":"Resampling can only ever redraw values you already observed, so it gives honest intervals for means and rates and badly overconfident ones for maxima, extreme percentiles and clustered data."},{"slug":"clustered-and-repeated-data","title":"Five hundred rows, forty users","url":"https://addaly.com/learn/evaluating-ai/clustered-and-repeated-data","api":"https://addaly.com/api/lesson/evaluating-ai/clustered-and-repeated-data","minutes":9,"keyIdea":"When rows share a source (the same user, the same document, repeated runs of the same item) your effective sample size is closer to the number of sources than the number of rows, so aggregate to the source before you compute anything."},{"slug":"many-comparisons","title":"Twenty slices and one guaranteed surprise","url":"https://addaly.com/learn/evaluating-ai/many-comparisons","api":"https://addaly.com/api/lesson/evaluating-ai/many-comparisons","minutes":8,"keyIdea":"Testing twenty slices at the five per cent level makes a false alarm more likely than not, so name one primary metric in advance and treat every slice as a lead to replicate rather than a result to ship."},{"slug":"peeking-and-stopping-rules","title":"Watching the dashboard until it says yes","url":"https://addaly.com/learn/evaluating-ai/peeking-and-stopping-rules","api":"https://addaly.com/api/lesson/evaluating-ai/peeking-and-stopping-rules","minutes":9,"keyIdea":"Checking an experiment repeatedly and stopping when it crosses the line turns a five per cent error rate into something far larger, and the effect you stop on is overestimated because you stopped at a high point."},{"slug":"variance-reduction","title":"Getting more signal from the items you already have","url":"https://addaly.com/learn/evaluating-ai/variance-reduction","api":"https://addaly.com/api/lesson/evaluating-ai/variance-reduction","minutes":9,"keyIdea":"Fix every source of noise the change did not cause (same items, same seeds, same retrieval snapshot, plus a covariate adjustment) and a set you cannot afford to enlarge starts detecting differences half the size."},{"slug":"simpsons-paradox","title":"Better in every group and worse overall","url":"https://addaly.com/learn/evaluating-ai/simpsons-paradox","api":"https://addaly.com/api/lesson/evaluating-ai/simpsons-paradox","minutes":8,"keyIdea":"An overall score is a weighted average, so a change in the mix of hard and easy items can reverse it while every group improves: fix the weights before comparing two numbers."}]},{"slug":"task-shapes","title":"The systems you will actually be handed","summary":"Everything so far assumed one output and one label. Real work arrives as a summariser, a translator, a code generator, an extractor, a chatbot, a ranking system, a vision or speech pipeline, or an ordinary tabular model, and each carries a failure the generic metric cannot see. This block gives each one an evaluation design and names what that design exists to catch.","outcome":"Design a defensible evaluation for a summariser, a translator, a code generator, a structured extractor, a multi-turn assistant, a ranking system, a vision or speech model, a document pipeline or a tabular model, and name the specific failure mode each design exists to catch.","lessons":[{"slug":"evaluating-summaries","title":"Summaries: what was invented, and what was left out","url":"https://addaly.com/learn/evaluating-ai/evaluating-summaries","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-summaries","minutes":9,"keyIdea":"Score a summary on two separate axes (every claim supported by the source, and every required fact present) because no automatic similarity metric can see an omission at all."},{"slug":"evaluating-translation","title":"Translation, and the languages nobody measures","url":"https://addaly.com/learn/evaluating-ai/evaluating-translation","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-translation","minutes":10,"keyIdea":"BLEU rewards matching one reference's word forms, so it under-rates morphologically rich languages and short segments: use chrF alongside it, test named phenomena separately, and say plainly when a language is simply unmeasured."},{"slug":"evaluating-code-generation","title":"Code: run it, in a box, against tests it has not seen","url":"https://addaly.com/learn/evaluating-ai/evaluating-code-generation","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-code-generation","minutes":9,"keyIdea":"Generated code is the one output you can grade by execution, so evaluate with hidden tests in a sandbox, quote pass@1 when a person will accept one answer, and build the set from your own repository because the public ones are in the training data."},{"slug":"evaluating-extraction","title":"Structured extraction, where normalisation is most of the work","url":"https://addaly.com/learn/evaluating-ai/evaluating-extraction","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-extraction","minutes":9,"keyIdea":"Score schema validity, field accuracy and whole-record correctness separately, normalise before comparing or you measure your own comparison code, and check every extracted value appears in the source to catch invention for free."},{"slug":"evaluating-conversation","title":"Multi-turn: score the session, not the turn","url":"https://addaly.com/learn/evaluating-ai/evaluating-conversation","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-conversation","minutes":9,"keyIdea":"One mistake at turn two corrupts every turn after it, so measure task success per session and record the turn where it first went wrong, then test retention, correction and truncation deliberately."},{"slug":"evaluating-search-and-recommendation","title":"Ranking systems, where the labels are clicks and the clicks are biased","url":"https://addaly.com/learn/evaluating-ai/evaluating-search-and-recommendation","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-search-and-recommendation","minutes":10,"keyIdea":"A click measures position as much as relevance, so correct for examination bias, compare rankers by interleaving rather than by A/B, and watch catalogue coverage because a recommender teaches itself what to show next."},{"slug":"evaluating-vision-models","title":"Images: the background the model is actually reading","url":"https://addaly.com/learn/evaluating-ai/evaluating-vision-models","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-vision-models","minutes":9,"keyIdea":"Vision sets leak through sessions and reward shortcuts in the background, so split by capture session, test with the correlation deliberately broken, and report accuracy under the blur and low light your users' phones actually produce."},{"slug":"evaluating-speech","title":"Speech: word error rate, and the words that matter","url":"https://addaly.com/learn/evaluating-ai/evaluating-speech","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-speech","minutes":9,"keyIdea":"Word error rate is meaningless without the text normaliser that produced it, and it weights every word equally while your product depends on names, numbers and dates, so measure entity accuracy and end-to-end task success beside it."},{"slug":"evaluating-documents-and-ocr","title":"Documents: stages that multiply, and checks that need no labels","url":"https://addaly.com/learn/evaluating-ai/evaluating-documents-and-ocr","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-documents-and-ocr","minutes":9,"keyIdea":"A document pipeline's accuracy is the product of its stages, so measure each one and the end-to-end separately, and use the document's own internal consistency, such as line items summing to the total, as a label-free check on live traffic."},{"slug":"evaluating-tabular-models","title":"Tables, cross-validation, and the leak that gives you 0.99","url":"https://addaly.com/learn/evaluating-ai/evaluating-tabular-models","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-tabular-models","minutes":9,"keyIdea":"Fit every preprocessing step inside the fold, split by group and by time rather than at random, and treat an implausibly high score on a business problem as a leak to be found rather than a result to be announced."}]},{"slug":"automating-judgement","title":"Automating judgement","summary":"Hand labelling does not scale past a few hundred items a week, so most of the checking has to be done by code and by models. This block builds that layer in the right order (deterministic checks first, a calibrated judge second, the biases of a judge measured rather than hoped away) and then points it at the three hardest cases: groundedness, safety and agents.","outcome":"Build a layered automatic check with cheap deterministic assertions underneath a rubric-driven model judge, state the agreement figure that licenses trusting the judge's numbers, and control the position bias, self-preference and cost that judging brings with it.","lessons":[{"slug":"the-judge-needs-judging","title":"LLM-as-judge, and where it misleads you","url":"https://addaly.com/learn/evaluating-ai/the-judge-needs-judging","api":"https://addaly.com/api/lesson/evaluating-ai/the-judge-needs-judging","minutes":9,"keyIdea":"A judge you have not measured against your own labels is an opinion with a decimal point."},{"slug":"writing-a-rubric-a-machine-can-follow","title":"Turning a quality you can feel into rules a machine can apply","url":"https://addaly.com/learn/evaluating-ai/writing-a-rubric-a-machine-can-follow","api":"https://addaly.com/api/lesson/evaluating-ai/writing-a-rubric-a-machine-can-follow","minutes":9,"keyIdea":"A usable rubric is a short list of single-property binary rules written from real failures, judged one per call, with the evidence quoted before the verdict."},{"slug":"reference-answers-and-equivalence","title":"Gold answers, and asking whether two answers agree","url":"https://addaly.com/learn/evaluating-ai/reference-answers-and-equivalence","api":"https://addaly.com/api/lesson/evaluating-ai/reference-answers-and-equivalence","minutes":9,"keyIdea":"Ask a judge whether the candidate says the same thing as the reference rather than whether it is good, write references as required and forbidden facts instead of prose, and audit the disagreements because a share of them are errors in your gold answers."},{"slug":"calibrating-and-monitoring-the-judge","title":"Proving the judge agrees with you, and re-proving it","url":"https://addaly.com/learn/evaluating-ai/calibrating-and-monitoring-the-judge","api":"https://addaly.com/api/lesson/evaluating-ai/calibrating-and-monitoring-the-judge","minutes":9,"keyIdea":"Judge quality is per-class recall on a stratified calibration set, not overall agreement, and it must be re-measured whenever the judge model, the prompt or the traffic changes."},{"slug":"ranking-systems-by-preference","title":"Turning pairwise wins into a ranking you can defend","url":"https://addaly.com/learn/evaluating-ai/ranking-systems-by-preference","api":"https://addaly.com/api/lesson/evaluating-ai/ranking-systems-by-preference","minutes":9,"keyIdea":"Fit a Bradley-Terry model to your pairwise comparisons rather than accumulating Elo, put a bootstrap interval on every rank, and remember that preference rewards length and confidence, so measure accuracy separately."},{"slug":"cheap-checks-first","title":"The checks that cost nothing and catch most of it","url":"https://addaly.com/learn/evaluating-ai/cheap-checks-first","api":"https://addaly.com/api/lesson/evaluating-ai/cheap-checks-first","minutes":8,"keyIdea":"Deterministic checks are free, exact and repeatable, so run them first and move every check you can down into code before spending a judge call on it."},{"slug":"groundedness-checks","title":"Checking an answer against the passages it was given","url":"https://addaly.com/learn/evaluating-ai/groundedness-checks","api":"https://addaly.com/api/lesson/evaluating-ai/groundedness-checks","minutes":9,"keyIdea":"Decompose an answer into claims and test each against the retrieved text with an entailment model, remembering that groundedness measures faithfulness to the source and never truth."},{"slug":"judging-on-a-budget","title":"What judging costs, and how to pay a tenth of it","url":"https://addaly.com/learn/evaluating-ai/judging-on-a-budget","api":"https://addaly.com/api/lesson/evaluating-ai/judging-on-a-budget","minutes":9,"keyIdea":"Cascade the checks (free code first, a small or local judge next, the expensive judge only on the uncertain remainder) and cache by output hash, because a rerun that changed no outputs should cost nothing."},{"slug":"red-teaming-and-safety-evals","title":"Testing what happens when somebody tries","url":"https://addaly.com/learn/evaluating-ai/red-teaming-and-safety-evals","api":"https://addaly.com/api/lesson/evaluating-ai/red-teaming-and-safety-evals","minutes":10,"keyIdea":"Measure harmful completions and false refusals as a pair, test injection through retrieved content rather than only through user messages, and run the adversarial set several times because attacks succeed probabilistically."},{"slug":"evaluating-agents","title":"When the output is a sequence of actions","url":"https://addaly.com/learn/evaluating-ai/evaluating-agents","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-agents","minutes":10,"keyIdea":"Score an agent on the final state, record the trajectory for diagnosis, run every task several times because a task that passes three times in five has not passed, and count cost and steps as part of the result."}]},{"slug":"evaluation-in-the-loop","title":"Evaluation in the working loop","summary":"A set that gets run once is a report. This block makes evaluation part of how the work happens: a harness that runs on every change without going red at random, traces complete enough to diagnose from, an error-analysis habit that turns failures into causes, an honest experiment when you want to claim an improvement, and a safe route onto live traffic.","outcome":"Run evaluation as part of development: a harness in CI that survives a stochastic model, logging complete enough to diagnose a failure you did not reproduce, a structured error-analysis session that names causes rather than symptoms, and a staged release with a metric that can stop it.","lessons":[{"slug":"the-eval-harness","title":"The harness, and why you should build the small one first","url":"https://addaly.com/learn/evaluating-ai/the-eval-harness","api":"https://addaly.com/api/lesson/evaluating-ai/the-eval-harness","minutes":9,"keyIdea":"A run is reproducible only if the dataset hash, prompt version and model version are recorded with it, and the useful output is a diff against the previous run, not a number."},{"slug":"evals-in-ci","title":"An evaluation that runs on every change without going red at random","url":"https://addaly.com/learn/evaluating-ai/evals-in-ci","api":"https://addaly.com/api/lesson/evaluating-ai/evals-in-ci","minutes":9,"keyIdea":"Block merges only on deterministic checks and on a band around a rolling baseline, quarantine flaky items instead of retrying them, and let the slow full run open an issue rather than stop the queue."},{"slug":"tracing-and-logging","title":"Recording enough to diagnose a failure you did not see happen","url":"https://addaly.com/learn/evaluating-ai/tracing-and-logging","api":"https://addaly.com/api/lesson/evaluating-ai/tracing-and-logging","minutes":9,"keyIdea":"Log the whole trace (the exact prompt sent, the retrieved chunks, the tool calls, the versions, the timings and the user's next action) because every production failure is diagnosed from what was recorded and never from what you can reproduce."},{"slug":"regression-testing-a-prompt","title":"Regression testing a prompt","url":"https://addaly.com/learn/evaluating-ai/regression-testing-a-prompt","api":"https://addaly.com/api/lesson/evaluating-ai/regression-testing-a-prompt","minutes":8,"keyIdea":"Track which items flipped, not just the total; an unchanged score can hide a rewritten system."},{"slug":"error-analysis","title":"Reading fifty failures","url":"https://addaly.com/learn/evaluating-ai/error-analysis","api":"https://addaly.com/api/lesson/evaluating-ai/error-analysis","minutes":9,"keyIdea":"Read fifty failures, write the cause in your own words before categorising, and label each cause as data, retrieval, prompt, model, label or product: most of them will not be prompt problems."},{"slug":"ab-testing-honestly","title":"A/B testing a feature honestly","url":"https://addaly.com/learn/evaluating-ai/ab-testing-honestly","api":"https://addaly.com/api/lesson/evaluating-ai/ab-testing-honestly","minutes":8,"keyIdea":"Fix the metric, the effect you would act on, and the stop date before you start; otherwise the result is a story."},{"slug":"shadow-and-canary-releases","title":"Getting evidence from live traffic without exposing users","url":"https://addaly.com/learn/evaluating-ai/shadow-and-canary-releases","api":"https://addaly.com/api/lesson/evaluating-ai/shadow-and-canary-releases","minutes":8,"keyIdea":"Run the new system on real inputs with its side effects disabled to compare distributions before anyone sees it, then ramp real traffic in stages with pre-agreed guardrails and a rollback you have rehearsed."},{"slug":"online-metrics-and-proxies","title":"The signals users give you without being asked","url":"https://addaly.com/learn/evaluating-ai/online-metrics-and-proxies","api":"https://addaly.com/api/lesson/evaluating-ai/online-metrics-and-proxies","minutes":9,"keyIdea":"Regeneration rate, edit distance and escalation are free quality proxies you probably already log, but they only become metrics once you have checked them against human labels on a sample."},{"slug":"human-review-that-scales","title":"Sampling live traffic, and keeping reviewers honest","url":"https://addaly.com/learn/evaluating-ai/human-review-that-scales","api":"https://addaly.com/api/lesson/evaluating-ai/human-review-that-scales","minutes":9,"keyIdea":"Review a random sample as well as a flagged one, because the flagged sample only ever teaches you about failures you can already detect."}]},{"slug":"assurance","title":"Evidence other people can act on","summary":"At some point the number leaves your team. A buyer, an auditor, a regulator, a journalist or a user asks what you know and how you know it. This block is about evaluation as a record rather than a result: what goes in a system card, what to ask a vendor before you build on them, what the emerging standards ask for, how to measure harm rather than error, and where measurement itself runs out.","outcome":"Assemble an evaluation record a stranger can audit (documented set, per-group results, stated limitations, reproducible run) interrogate a supplier's claims with a set of your own, and say clearly where a quality judgement is contested rather than merely unmeasured.","lessons":[{"slug":"writing-a-system-card","title":"The document that travels with the system","url":"https://addaly.com/learn/evaluating-ai/writing-a-system-card","api":"https://addaly.com/api/lesson/evaluating-ai/writing-a-system-card","minutes":9,"keyIdea":"A system card is only worth writing if every claim in it carries the measurement behind it and the out-of-scope section is specific enough to stop somebody using the thing wrongly."},{"slug":"evaluating-a-vendor-model","title":"Buying a model you will depend on","url":"https://addaly.com/learn/evaluating-ai/evaluating-a-vendor-model","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-a-vendor-model","minutes":10,"keyIdea":"Decide between suppliers on your own three hundred items and on cost per successful task rather than per token, and get the answers about version pinning, deprecation notice and data retention before the integration exists."},{"slug":"independent-evaluation","title":"Why the builder's own numbers are weak evidence","url":"https://addaly.com/learn/evaluating-ai/independent-evaluation","api":"https://addaly.com/api/lesson/evaluating-ai/independent-evaluation","minutes":8,"keyIdea":"The team that built a system chooses the set, the metric and what gets reported, so arrange for someone else to hold a set you never see, and accept that publishing an evaluation set is what destroys it."},{"slug":"standards-and-frameworks","title":"What the emerging rules ask for, and what they do not settle","url":"https://addaly.com/learn/evaluating-ai/standards-and-frameworks","api":"https://addaly.com/api/lesson/evaluating-ai/standards-and-frameworks","minutes":9,"keyIdea":"Every framework converges on the same practical demands (documented intended use, data provenance, measured per-group performance, logging, human oversight and re-evaluation) while the legal detail differs by country and is still being written."},{"slug":"evaluating-for-harm","title":"Measuring the worst case, not the average one","url":"https://addaly.com/learn/evaluating-ai/evaluating-for-harm","api":"https://addaly.com/api/lesson/evaluating-ai/evaluating-for-harm","minutes":9,"keyIdea":"Rank failures by severity, reversibility and whether the person can tell they were harmed, then test each harm category with cases written for it, because harm concentrates exactly where a user cannot check the answer."},{"slug":"human-oversight-that-is-real","title":"Measuring the human in the loop","url":"https://addaly.com/learn/evaluating-ai/human-oversight-that-is-real","api":"https://addaly.com/api/lesson/evaluating-ai/human-oversight-that-is-real","minutes":9,"keyIdea":"Oversight is a claim until you measure it, and the instrument is seeded errors, because reviewers catch fewer mistakes precisely as the system gets better and their attention drops."},{"slug":"privacy-and-memorisation","title":"Testing whether the system gives away what it was given","url":"https://addaly.com/learn/evaluating-ai/privacy-and-memorisation","api":"https://addaly.com/api/lesson/evaluating-ai/privacy-and-memorisation","minutes":9,"keyIdea":"Plant canary strings at known repetition counts to measure memorisation, and run a cross-tenant retrieval test in CI, because the commonest real leak is a filter applied after ranking rather than before."},{"slug":"the-whole-product-not-the-model","title":"When the model is right and the product still fails","url":"https://addaly.com/learn/evaluating-ai/the-whole-product-not-the-model","api":"https://addaly.com/api/lesson/evaluating-ai/the-whole-product-not-the-model","minutes":8,"keyIdea":"Measure the funnel from attempt to resolved outcome, because a model that is right nine times in ten routinely produces a feature that works four times in ten once asking, reading, trusting and acting are counted."},{"slug":"contested-quality","title":"When people disagree about what good means","url":"https://addaly.com/learn/evaluating-ai/contested-quality","api":"https://addaly.com/api/lesson/evaluating-ai/contested-quality","minutes":9,"keyIdea":"Keep every annotator's individual labels rather than only the majority vote, because aggregation converts one group's reading into ground truth, and measurement can show whether you apply your rule consistently, never whether the rule is right."}]},{"slug":"living-with-it","title":"Living with it","summary":"Everything so far measures a system before it ships. This block is about the years afterwards: watching it in production, the tails of cost and latency, the model that changed under you, the corpus that fills up with its own output, checking that it works as well for one group of users as another, and reporting a number to people who will act on it.","outcome":"Keep a shipped system honest over time: monitor for drift, measure the tail of cost and latency rather than the mean, measure quality separately for each group of users, convert incidents into permanent test items, and report a result with its uncertainty stated.","lessons":[{"slug":"cost-latency-and-drift","title":"Cost, latency, and the model that changed under you","url":"https://addaly.com/learn/evaluating-ai/cost-latency-and-drift","api":"https://addaly.com/api/lesson/evaluating-ai/cost-latency-and-drift","minutes":9,"keyIdea":"Pin the model and keep a frozen set, and a forced upgrade becomes an afternoon instead of a crisis."},{"slug":"latency-is-a-distribution","title":"The tail is what your users feel","url":"https://addaly.com/learn/evaluating-ai/latency-is-a-distribution","api":"https://addaly.com/api/lesson/evaluating-ai/latency-is-a-distribution","minutes":9,"keyIdea":"Report p50, p95 and p99 rather than a mean, because generation time is right-skewed and a session making ten calls meets the 95th percentile about forty per cent of the time."},{"slug":"monitoring-in-production","title":"Watching a system you can no longer test","url":"https://addaly.com/learn/evaluating-ai/monitoring-in-production","api":"https://addaly.com/api/lesson/evaluating-ai/monitoring-in-production","minutes":9,"keyIdea":"Without labels you can still watch the input and output distributions, and refusal rate is the fastest detector of a model that changed under you."},{"slug":"feedback-loops-and-self-poisoning","title":"The system that trains on its own output","url":"https://addaly.com/learn/evaluating-ai/feedback-loops-and-self-poisoning","api":"https://addaly.com/api/lesson/evaluating-ai/feedback-loops-and-self-poisoning","minutes":9,"keyIdea":"Tag the provenance of every document and every label, because a corpus filling with generated text keeps groundedness perfect while truth degrades, and treating accepted suggestions as gold teaches a model its own mistakes."},{"slug":"when-the-eval-set-goes-stale","title":"Refreshing a set without breaking every comparison","url":"https://addaly.com/learn/evaluating-ai/when-the-eval-set-goes-stale","api":"https://addaly.com/api/lesson/evaluating-ai/when-the-eval-set-goes-stale","minutes":8,"keyIdea":"Compare your set's mix against last month's traffic and retire it when the divergence gets large, but change it on a schedule with both versions reported for one cycle, because a silent set change looks exactly like a quality change."},{"slug":"fairness-you-can-measure","title":"Fairness as arithmetic, and the choice you cannot avoid","url":"https://addaly.com/learn/evaluating-ai/fairness-you-can-measure","api":"https://addaly.com/api/lesson/evaluating-ai/fairness-you-can-measure","minutes":10,"keyIdea":"Calibration and equalised odds cannot both hold when base rates differ, so fairness is a definition you choose and state, and a per-slice floor forces the work an average lets you avoid."},{"slug":"incident-to-eval-item","title":"Turning a complaint into a permanent test","url":"https://addaly.com/learn/evaluating-ai/incident-to-eval-item","api":"https://addaly.com/api/lesson/evaluating-ai/incident-to-eval-item","minutes":8,"keyIdea":"Every incident becomes a minimised, provenanced test item, but keep those in a regression suite so the eval set still resembles real traffic rather than a museum of old bugs."},{"slug":"reporting-a-number-honestly","title":"Writing the result down","url":"https://addaly.com/learn/evaluating-ai/reporting-a-number-honestly","api":"https://addaly.com/api/lesson/evaluating-ai/reporting-a-number-honestly","minutes":8,"keyIdea":"A result travels without you, so write one page carrying the set, the interval, the slices, the cost, what was not measured and the decision it supports."},{"slug":"how-much-evaluation-is-enough","title":"How much of this to actually do","url":"https://addaly.com/learn/evaluating-ai/how-much-evaluation-is-enough","api":"https://addaly.com/api/lesson/evaluating-ai/how-much-evaluation-is-enough","minutes":8,"keyIdea":"Match the evaluation to the consequences of failure, and re-ask which tier you are in every time a prototype goes in front of customers."}]}]},{"slug":"choosing-your-tools","title":"Choosing and Using the Tools","tagline":"A comparison written by someone selling none of them.","description":"A straight, comparative look at the AI tools people actually use: ChatGPT, Claude, Gemini, Copilot, and the open models you can download. What genuinely separates them, what each free tier really gives you, when paying is worth it, what happens to what you type, and how to re-check all of it in six months when the answers have moved.","level":"beginner","track":"work","url":"https://addaly.com/learn/choosing-your-tools","lessons":76,"minutes":608,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/choosing-your-tools.pdf","pages":422,"bytes":4551252,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/choosing-your-tools.pdf","cover":"https://addaly.com/textbooks/look/choosing-your-tools/1.webp?v=2026-10-07-4551252"},"film":null,"modules":[{"slug":"anatomy-of-a-tool","title":"What a tool is made of","summary":"Before any comparison, you need to know what you are looking at. This block takes a product apart: the model inside it and how to read its name, the size class that decides the price, the thinking mode that decides the wait, the context window that is a ceiling rather than a promise, the unseen instructions that shape its manners, and the tools it can reach for. By the end, when a tool behaves oddly, you will know which of those to blame.","outcome":"Take any AI product you are handed, name the exact model and size class inside it, say whether its thinking mode, context handling, system prompt or tool layer is producing the behaviour you are seeing, and predict which of those will change without notice.","lessons":[{"slug":"three-layers","title":"What you are actually choosing","url":"https://addaly.com/learn/choosing-your-tools/three-layers","api":"https://addaly.com/api/lesson/choosing-your-tools/three-layers","minutes":7,"keyIdea":"You are choosing three things at once: a model, the product wrapped around it, and the route you reach it by."},{"slug":"reading-a-model-name","title":"Reading a model's name","url":"https://addaly.com/learn/choosing-your-tools/reading-a-model-name","api":"https://addaly.com/api/lesson/choosing-your-tools/reading-a-model-name","minutes":9,"keyIdea":"A model name encodes family, version, size class and build date, and the size class and the build date are the two parts that quietly decide what you actually get."},{"slug":"sizes-and-tiers","title":"Small, medium, large: what the size label buys","url":"https://addaly.com/learn/choosing-your-tools/sizes-and-tiers","api":"https://addaly.com/api/lesson/choosing-your-tools/sizes-and-tiers","minutes":9,"keyIdea":"Start every task on the smallest model in the family and move up only when the failures are wrong facts or broken reasoning, because a fifth of failures are prompt problems and the price gap between sizes is around twentyfold."},{"slug":"thinking-modes","title":"Thinking modes, and what you pay for them","url":"https://addaly.com/learn/choosing-your-tools/thinking-modes","api":"https://addaly.com/api/lesson/choosing-your-tools/thinking-modes","minutes":8,"keyIdea":"Thinking modes buy accuracy on problems with a checkable internal structure and buy nothing on recall, style or extraction, while charging you for every hidden token and making you wait."},{"slug":"context-window-truth","title":"The context window is a ceiling, not a promise","url":"https://addaly.com/learn/choosing-your-tools/context-window-truth","api":"https://addaly.com/api/lesson/choosing-your-tools/context-window-truth","minutes":9,"keyIdea":"The advertised context window promises only that your request will be accepted, so test where a fact placed two-thirds of the way through a long document actually gets found, and put your question after the document rather than before it."},{"slug":"the-invisible-system-prompt","title":"The instructions you never see","url":"https://addaly.com/learn/choosing-your-tools/the-invisible-system-prompt","api":"https://addaly.com/api/lesson/choosing-your-tools/the-invisible-system-prompt","minutes":8,"keyIdea":"Most of what a chat product feels like (its refusals, its formatting, its persona, even whether it knows the date) comes from an unseen block of company instructions rather than from the model."},{"slug":"what-tool-use-means","title":"What 'it can browse the web' actually means","url":"https://addaly.com/learn/choosing-your-tools/what-tool-use-means","api":"https://addaly.com/api/lesson/choosing-your-tools/what-tool-use-means","minutes":9,"keyIdea":"Tool use is one loop (the model chooses to call a tool, the result is pasted into its context as text, and it continues) so most tool-assisted errors are bad tool output rather than bad reasoning."},{"slug":"multimodal-in-practice","title":"'It understands images': what that buys","url":"https://addaly.com/learn/choosing-your-tools/multimodal-in-practice","api":"https://addaly.com/api/lesson/choosing-your-tools/multimodal-in-practice","minutes":8,"keyIdea":"A vision model receives a downsampled, tokenised version of your image, so exact characters and counts should be extracted with OCR or a text layer first and only then handed to the model."},{"slug":"under-new-management","title":"When the engine gets swapped","url":"https://addaly.com/learn/choosing-your-tools/under-new-management","api":"https://addaly.com/api/lesson/choosing-your-tools/under-new-management","minutes":8,"keyIdea":"Tools change underneath you through moving aliases, retuned routers and rewritten system prompts, so keep ten fixed prompts with known answers and a dated note of the model string, and pin versions wherever the work runs unattended."}]},{"slug":"testing-it-yourself","title":"Testing a tool yourself","summary":"Every published comparison measures fit to a benchmark. This block builds the one that measures fit to your work: twelve real prompts in a plain text file, two of them with answers you already know, at least one in the language you actually use, scored blind against criteria written before you saw a single answer. It also covers what leaderboards can and cannot tell you, and how to record a decision so you stop making it again.","outcome":"Build a personal benchmark of a dozen real tasks with written success criteria, run a blind scored comparison across three candidates while accounting for run-to-run variation, and record a decision that names the exact model versions and the conditions that would reverse it.","lessons":[{"slug":"real-differences","title":"Where they differ, and where it is marketing","url":"https://addaly.com/learn/choosing-your-tools/real-differences","api":"https://addaly.com/api/lesson/choosing-your-tools/real-differences","minutes":8,"keyIdea":"Your five real tasks tell you more than any leaderboard, because a benchmark measures the test and not your work."},{"slug":"the-prompt-file","title":"The file you will keep for years","url":"https://addaly.com/learn/choosing-your-tools/the-prompt-file","api":"https://addaly.com/api/lesson/choosing-your-tools/the-prompt-file","minutes":9,"keyIdea":"Twelve real prompts in a plain text file, each with a written note of what a good answer contains, decided before you see any answers, is a better guide to tool choice than any published comparison."},{"slug":"known-answer-probes","title":"The prompts where you already know the answer","url":"https://addaly.com/learn/choosing-your-tools/known-answer-probes","api":"https://addaly.com/api/lesson/choosing-your-tools/known-answer-probes","minutes":8,"keyIdea":"Include prompts whose answers you already know, and score not just correctness but whether the tool hedged when uncertain and whether it abandoned a correct answer when you sounded doubtful."},{"slug":"testing-your-language","title":"Testing the language you actually work in","url":"https://addaly.com/learn/choosing-your-tools/testing-your-language","api":"https://addaly.com/api/lesson/choosing-your-tools/testing-your-language","minutes":9,"keyIdea":"Language quality varies between models far more than English benchmarks suggest, and non-Latin scripts also cost several times more tokens for the same text, so test drafting, register, code-switching and numbers in the language you actually use."},{"slug":"blind-comparison","title":"Taking the brand off the answers","url":"https://addaly.com/learn/choosing-your-tools/blind-comparison","api":"https://addaly.com/api/lesson/choosing-your-tools/blind-comparison","minutes":7,"keyIdea":"Score answers labelled A, B and C against criteria written in advance and only then reveal which tool produced which, because brand halo, order and length shift judgements more than the tools differ."},{"slug":"same-prompt-twice","title":"Run it five times","url":"https://addaly.com/learn/choosing-your-tools/same-prompt-twice","api":"https://addaly.com/api/lesson/choosing-your-tools/same-prompt-twice","minutes":8,"keyIdea":"Because products sample from a probability distribution rather than picking the single most likely reply, a single run is one draw and any tool difference smaller than a tool's own run-to-run variation is not a difference."},{"slug":"scoring-without-fooling-yourself","title":"A rubric you can apply in ten seconds","url":"https://addaly.com/learn/choosing-your-tools/scoring-without-fooling-yourself","api":"https://addaly.com/api/lesson/choosing-your-tools/scoring-without-fooling-yourself","minutes":7,"keyIdea":"Score each answer 0, 1 or 2 against criteria written before you saw any answers, and watch for the four biases (length, formatting, confidence and agreement) that inflate scores without improving usefulness."},{"slug":"reading-a-leaderboard","title":"Reading a leaderboard without being fooled","url":"https://addaly.com/learn/choosing-your-tools/reading-a-leaderboard","api":"https://addaly.com/api/lesson/choosing-your-tools/reading-a-leaderboard","minutes":9,"keyIdea":"Static benchmarks suffer contamination, saturation and best-case settings, arena votes reward length and confidence rather than correctness, and when a leaderboard disagrees with your own prompts, your prompts win."},{"slug":"testing-refusals","title":"Testing the edges: refusals and house manners","url":"https://addaly.com/learn/choosing-your-tools/testing-refusals","api":"https://addaly.com/api/lesson/choosing-your-tools/testing-refusals","minutes":8,"keyIdea":"For most professionals the costly failure is a false refusal on ordinary work, and because refusals live mostly in the product's instruction layer, they vary between products running the same model."},{"slug":"deciding-and-writing-it-down","title":"Making the decision, and recording it","url":"https://addaly.com/learn/choosing-your-tools/deciding-and-writing-it-down","api":"https://addaly.com/api/lesson/choosing-your-tools/deciding-and-writing-it-down","minutes":7,"keyIdea":"Write down the choice, the exact model strings, the date, and the specific conditions that would change your mind, because a decision you have not recorded gets silently re-litigated every time somebody publishes a benchmark."}]},{"slug":"the-routes-in","title":"The routes in","summary":"The same model reaches you through very different doors, and the door decides more than people expect. This block covers the web, phone and desktop apps and how they differ; the API, its request format and the spend cap you set before your first call; free front-ends that turn a key into a chat app you own; routers; where a coding assistant lives; the extension and wrapper trap; and the two routes most comparisons ignore entirely: a phone with 3 GB of RAM and a metered bundle, and a screen reader.","outcome":"Choose the right route to a model for a given job (web, phone, desktop, API, free front-end, router, editor or terminal) set one up with a hard spend cap and a revocable key, and judge an extension or wrapper by its permissions, publisher and disclosed data use before installing it.","lessons":[{"slug":"web-app-phone-app-desktop-app","title":"The web app, the phone app and the desktop app","url":"https://addaly.com/learn/choosing-your-tools/web-app-phone-app-desktop-app","api":"https://addaly.com/api/lesson/choosing-your-tools/web-app-phone-app-desktop-app","minutes":8,"keyIdea":"The website, the phone app and the desktop app are different products sharing one account, with the web usually ahead on features and app-store subscriptions usually costing more than the same plan bought on the website."},{"slug":"first-api-call","title":"Your first API call","url":"https://addaly.com/learn/choosing-your-tools/first-api-call","api":"https://addaly.com/api/lesson/choosing-your-tools/first-api-call","minutes":9,"keyIdea":"An API request is a model name, a list of role-tagged messages and a few settings, and because most providers accept the same format, moving between vendors or to a local model is usually a change of two lines."},{"slug":"keys-and-spend-caps","title":"Keys, spend caps, and the bill nobody wants","url":"https://addaly.com/learn/choosing-your-tools/keys-and-spend-caps","api":"https://addaly.com/api/lesson/choosing-your-tools/keys-and-spend-caps","minutes":8,"keyIdea":"Set a hard monthly spend cap before your first API request, keep keys out of any file you might share, use one key per use so a leak revokes one thing, and never put a key anywhere a user's device can read it."},{"slug":"free-front-ends","title":"Building your own chat app for nothing","url":"https://addaly.com/learn/choosing-your-tools/free-front-ends","api":"https://addaly.com/api/lesson/choosing-your-tools/free-front-ends","minutes":8,"keyIdea":"A free open-source front-end turns an API key into a chat application you control (your system prompt, your stored history, several providers and a local model in one window) at the cost of polish, built-in extras and support."},{"slug":"routers-and-aggregators","title":"Routers: one key, many models","url":"https://addaly.com/learn/choosing-your-tools/routers-and-aggregators","api":"https://addaly.com/api/lesson/choosing-your-tools/routers-and-aggregators","minutes":8,"keyIdea":"A router gives one key and one bill across hundreds of models, at the cost of a margin, an extra party in the data path, and (for open models) a back-end host chosen per request that may differ in quantisation and context length."},{"slug":"coding-routes","title":"Where a coding assistant lives","url":"https://addaly.com/learn/choosing-your-tools/coding-routes","api":"https://addaly.com/api/lesson/choosing-your-tools/coding-routes","minutes":9,"keyIdea":"Coding assistants differ mainly by what they can see and do (a file, a project, your terminal, or a cloud clone) so keep every change small, keep version control between you and any agent, and review each line before it lands."},{"slug":"extensions-and-wrappers","title":"Extensions, wrappers and the permission dialog","url":"https://addaly.com/learn/choosing-your-tools/extensions-and-wrappers","api":"https://addaly.com/api/lesson/choosing-your-tools/extensions-and-wrappers","minutes":8,"keyIdea":"An AI browser extension usually requests permission to read and change every page you visit, so check publisher, age, recent reviews and the data disclosure before installing, and never hand a third-party app a key you cannot cheaply revoke."},{"slug":"phone-first-and-low-bandwidth","title":"When the phone is the computer","url":"https://addaly.com/learn/choosing-your-tools/phone-first-and-low-bandwidth","api":"https://addaly.com/api/lesson/choosing-your-tools/phone-first-and-low-bandwidth","minutes":9,"keyIdea":"On a phone, install web apps to the home screen rather than native apps, treat text as effectively free but photographs and voice as expensive, prefer fast models on poor connections, and use a small local model when there is no connection at all."},{"slug":"accessibility-routes","title":"Voice, screen readers and hands-free use","url":"https://addaly.com/learn/choosing-your-tools/accessibility-routes","api":"https://addaly.com/api/lesson/choosing-your-tools/accessibility-routes","minutes":8,"keyIdea":"Route decides usability before model quality does: dictation and read-aloud are free on every device, streaming replies interact badly with screen readers, and a plain-text API client is accessible by construction when a product's interface is not."}]},{"slug":"what-it-costs","title":"What it actually costs","summary":"Money decides more tool choices than quality does, and almost nobody does the arithmetic. This block does it: what a token is and why output costs several times input, how to cost a job from a twenty-item pilot before running fifty thousand, the caching and batching discounts most people never switch on, how to route easy work to cheap models, the three billing shapes and their different risks, the costs that never reach the invoice, and what to do when the card does not work or the price is simply out of reach.","outcome":"Estimate the cost of a job from a measured sample before running it, cut that cost with prefix caching, batching and model routing without lowering quality, choose between a subscription, prepaid credit and pay-as-you-go for your own pattern of use, and set an enforced cap so the worst case is bounded.","lessons":[{"slug":"free-tiers","title":"The free tiers, and their traps","url":"https://addaly.com/learn/choosing-your-tools/free-tiers","api":"https://addaly.com/api/lesson/choosing-your-tools/free-tiers","minutes":8,"keyIdea":"A free tier shows you a product's floor, not its ceiling, and it will downgrade you without saying so."},{"slug":"paying-or-not","title":"When paying is worth it","url":"https://addaly.com/learn/choosing-your-tools/paying-or-not","api":"https://addaly.com/api/lesson/choosing-your-tools/paying-or-not","minutes":8,"keyIdea":"Pay when a cap is blocking work you would have done anyway, not to own the best model."},{"slug":"tokens-as-the-unit","title":"The unit you are billed in","url":"https://addaly.com/learn/choosing-your-tools/tokens-as-the-unit","api":"https://addaly.com/api/lesson/choosing-your-tools/tokens-as-the-unit","minutes":8,"keyIdea":"You are billed per token, output usually costs three to five times input, hidden thinking counts as output, and non-Latin scripts can take several times more tokens for identical content."},{"slug":"estimating-a-job","title":"Costing a job before you run it","url":"https://addaly.com/learn/choosing-your-tools/estimating-a-job","api":"https://addaly.com/api/lesson/choosing-your-tools/estimating-a-job","minutes":8,"keyIdea":"Run twenty real items, record actual token usage, multiply and add a third for retries, and run the same test on a small and a large model so the price of the extra accuracy is a number rather than an assumption."},{"slug":"caching-and-batching","title":"The two discounts almost nobody uses","url":"https://addaly.com/learn/choosing-your-tools/caching-and-batching","api":"https://addaly.com/api/lesson/choosing-your-tools/caching-and-batching","minutes":8,"keyIdea":"Put every stable block at the front of a request so prompt caching can match the prefix, send anything that can wait through the batch route at around half price, and cut what you send and what you ask for before you consider a cheaper model."},{"slug":"routing-by-difficulty","title":"Spending money where it matters","url":"https://addaly.com/learn/choosing-your-tools/routing-by-difficulty","api":"https://addaly.com/api/lesson/choosing-your-tools/routing-by-difficulty","minutes":8,"keyIdea":"A cascade (cheap model everywhere, expensive model only on flagged cases) commonly cuts cost by four fifths at equal or better quality, provided you have measured on a hundred items which cases the cheap model actually gets wrong."},{"slug":"three-billing-shapes","title":"Subscriptions, credits and pay-as-you-go","url":"https://addaly.com/learn/choosing-your-tools/three-billing-shapes","api":"https://addaly.com/api/lesson/choosing-your-tools/three-billing-shapes","minutes":7,"keyIdea":"Subscriptions cannot surprise you and are easy to underuse, prepaid credits fail safely by running out, and pay-as-you-go is the most efficient and the only shape that can produce a bill you did not expect."},{"slug":"hidden-costs","title":"The costs that are not on the invoice","url":"https://addaly.com/learn/choosing-your-tools/hidden-costs","api":"https://addaly.com/api/lesson/choosing-your-tools/hidden-costs","minutes":8,"keyIdea":"The invoice is the small number: verification time, rework, learning and automation bias decide whether a tool pays, and the returns are largest exactly where you can check an answer faster than you could produce it."},{"slug":"paying-from-anywhere","title":"Paying for it from where you live","url":"https://addaly.com/learn/choosing-your-tools/paying-from-anywhere","api":"https://addaly.com/api/lesson/choosing-your-tools/paying-from-anywhere","minutes":8,"keyIdea":"The sticker price is not what you pay (card fees, digital-services tax and local levies can add a quarter) and where a card or the service itself is unavailable, free tiers, prepaid API credit, hosted open models and a local model cover almost everything."},{"slug":"budget-that-holds","title":"A budget that actually holds","url":"https://addaly.com/learn/choosing-your-tools/budget-that-holds","api":"https://addaly.com/api/lesson/choosing-your-tools/budget-that-holds","minutes":7,"keyIdea":"Write down current spend, set an enforced hard cap with alerts on every pay-as-you-go account, and review every subscription quarterly against what you actually used rather than what you might use."}]},{"slug":"open-models-and-your-own-hardware","title":"Open models and your own hardware","summary":"Downloadable models are the route that costs nothing per use, keeps working when the internet does not, and cannot be deprecated. This block treats them as a purchasing decision rather than a hobby: the memory arithmetic including the cache people forget, reading a model card and its licence before spending the download, choosing a quantisation, renting an open model instead of running it, the honest cases where local is the wrong answer, and the two-model arrangement most people should end up with.","outcome":"Work out what your own machine will run including context and cache, read a model card and licence well enough to decide whether to build on it, choose a quantisation and format deliberately, compare hosted open-model providers on speed, precision, context and data terms, and set a routing rule between local and hosted work you can apply without thinking.","lessons":[{"slug":"open-models","title":"The open models","url":"https://addaly.com/learn/choosing-your-tools/open-models","api":"https://addaly.com/api/lesson/choosing-your-tools/open-models","minutes":8,"keyIdea":"Open weights means you can download and keep it; it rarely means open training data, and the licences differ."},{"slug":"on-your-laptop","title":"Running a model on your own machine","url":"https://addaly.com/learn/choosing-your-tools/on-your-laptop","api":"https://addaly.com/api/lesson/choosing-your-tools/on-your-laptop","minutes":9,"keyIdea":"A local model buys privacy, offline access and zero marginal cost, and charges you capability and speed for it."},{"slug":"sizing-for-your-machine","title":"Working out what your machine will run","url":"https://addaly.com/learn/choosing-your-tools/sizing-for-your-machine","api":"https://addaly.com/api/lesson/choosing-your-tools/sizing-for-your-machine","minutes":9,"keyIdea":"Budget memory for the weights, the KV cache that grows with your context length, and the operating system, and when a local model is too slow, cut context and cache precision before you cut model size."},{"slug":"reading-a-model-card","title":"Reading a model card before you download","url":"https://addaly.com/learn/choosing-your-tools/reading-a-model-card","api":"https://addaly.com/api/lesson/choosing-your-tools/reading-a-model-card","minutes":8,"keyIdea":"A model card tells you the licence, the format, the context length and the languages before you spend the download, and it almost never tells you what the model was trained on, which is the question you cannot answer for a customer later."},{"slug":"quantisation-in-practice","title":"Choosing a quantisation","url":"https://addaly.com/learn/choosing-your-tools/quantisation-in-practice","api":"https://addaly.com/api/lesson/choosing-your-tools/quantisation-in-practice","minutes":8,"keyIdea":"Take Q4_K_M unless you have memory to spare, prefer a smaller model at 4-bit over a larger one at 2-bit, and watch for drifting instruction-following as the sign that you have quantised too far."},{"slug":"hosted-open-models","title":"Renting an open model instead of running it","url":"https://addaly.com/learn/choosing-your-tools/hosted-open-models","api":"https://addaly.com/api/lesson/choosing-your-tools/hosted-open-models","minutes":8,"keyIdea":"Hosted open models sit between a laptop and a frontier subscription, and the same model name from two providers can differ in speed, quantisation, context length and data terms, so check those before comparing prices."},{"slug":"licences-as-a-decision","title":"The licence is a business decision","url":"https://addaly.com/learn/choosing-your-tools/licences-as-a-decision","api":"https://addaly.com/api/lesson/choosing-your-tools/licences-as-a-decision","minutes":8,"keyIdea":"Read the licence rather than the word used to describe it: Apache and MIT remove a whole class of question, community licences permit commercial use with conditions, and whether any of this counts as open source is a live, unresolved dispute."},{"slug":"when-local-is-wrong","title":"When running it yourself is the wrong answer","url":"https://addaly.com/learn/choosing-your-tools/when-local-is-wrong","api":"https://addaly.com/api/lesson/choosing-your-tools/when-local-is-wrong","minutes":7,"keyIdea":"Local models are the right answer for confidential, offline, high-volume and permanent work, and the wrong one for hard reasoning, whole-product needs, battery life, other people depending on it, and buying hardware to avoid a subscription."},{"slug":"the-hybrid-setup","title":"A working setup with two models","url":"https://addaly.com/learn/choosing-your-tools/the-hybrid-setup","api":"https://addaly.com/api/lesson/choosing-your-tools/the-hybrid-setup","minutes":8,"keyIdea":"Route work by what the material contains rather than by how hard it looks (confidential to the local model, routine and bulk to a cheap hosted one, the hard remainder to the strong one) and write the rule down once so the choice stops being a decision."}]},{"slug":"data-terms-and-law","title":"Data, terms and the law","summary":"What happens to what you type is the question most likely to matter and least likely to be answered on a comparison page. This block reads a privacy policy in ten minutes, says what a business agreement actually buys and what no agreement can give you, sets out the shared shape of data protection law without pretending to give legal advice, separates the three tangled questions about who owns the output, and covers redaction, secrets, shared devices and the workplace policy your employer probably has not written.","outcome":"Establish for any tool whether your content is trained on, retained or read by people and whether that covers your tier, redact material so the sensitive part is never sent, recognise which questions about ownership and legality are genuinely unresolved, and write the one-page record of tools and boundaries that a client or regulator would ask for.","lessons":[{"slug":"who-reads-this","title":"Who reads what you type","url":"https://addaly.com/learn/choosing-your-tools/who-reads-this","api":"https://addaly.com/api/lesson/choosing-your-tools/who-reads-this","minutes":8,"keyIdea":"Not training on your data and not storing it are different promises, and most providers only make the first."},{"slug":"reading-terms-in-ten-minutes","title":"Reading the terms in ten minutes","url":"https://addaly.com/learn/choosing-your-tools/reading-terms-in-ten-minutes","api":"https://addaly.com/api/lesson/choosing-your-tools/reading-terms-in-ten-minutes","minutes":8,"keyIdea":"Search a privacy policy for train, retention, human review, third part, delete and transfer, read the sentence around each, check whether it covers your tier, and screenshot it with the date, and treat an unfindable answer as the answer."},{"slug":"what-a-business-agreement-buys","title":"What a business agreement actually buys","url":"https://addaly.com/learn/choosing-your-tools/what-a-business-agreement-buys","api":"https://addaly.com/api/lesson/choosing-your-tools/what-a-business-agreement-buys","minutes":8,"keyIdea":"A business tier buys a contract rather than a better model (a training commitment, a data processing agreement, a sub-processor list, retention controls and regional processing) and none of it makes the output correct or moves the responsibility off you."},{"slug":"your-country-your-rules","title":"Your country, your rules","url":"https://addaly.com/learn/choosing-your-tools/your-country-your-rules","api":"https://addaly.com/api/lesson/choosing-your-tools/your-country-your-rules","minutes":9,"keyIdea":"Most data protection regimes share the same shape (you are the one deciding, you need a lawful basis and a purpose, people have rights, and sending data abroad is restricted) and your profession's rules sit on top of your country's."},{"slug":"who-owns-the-output","title":"Who owns what it produces","url":"https://addaly.com/learn/choosing-your-tools/who-owns-the-output","api":"https://addaly.com/api/lesson/choosing-your-tools/who-owns-the-output","minutes":8,"keyIdea":"Provider terms usually assign you their rights in the output, but whether that output is copyrightable at all and whether it infringes anyone else's rights are separate, unsettled questions answered differently in different countries."},{"slug":"redaction-that-works","title":"Redaction that actually works","url":"https://addaly.com/learn/choosing-your-tools/redaction-that-works","api":"https://addaly.com/api/lesson/choosing-your-tools/redaction-that-works","minutes":8,"keyIdea":"Replacing identities with roles preserves everything the model needs and removes most of the risk, but files carry authorship metadata, hidden rows, extractable text under black rectangles and location data, and removing a name column is not anonymisation."},{"slug":"secrets-and-what-not-to-paste","title":"Secrets, and what not to paste","url":"https://addaly.com/learn/choosing-your-tools/secrets-and-what-not-to-paste","api":"https://addaly.com/api/lesson/choosing-your-tools/secrets-and-what-not-to-paste","minutes":7,"keyIdea":"Never paste credentials or identity numbers at any tier, substitute placeholder values before copying config files and logs, and if it happens anyway rotate the secret first: deletion limits exposure but does not undo storage."},{"slug":"accounts-sharing-and-devices","title":"Accounts, sharing and devices","url":"https://addaly.com/learn/choosing-your-tools/accounts-sharing-and-devices","api":"https://addaly.com/api/lesson/choosing-your-tools/accounts-sharing-and-devices","minutes":7,"keyIdea":"Your conversations are visible to whoever holds the device, to an administrator on a work account, through browser sync and through any share link, so keep work and personal accounts apart, audit memory and connected apps, and treat a shared link as published."},{"slug":"the-work-policy","title":"What your workplace probably has not decided","url":"https://addaly.com/learn/choosing-your-tools/the-work-policy","api":"https://addaly.com/api/lesson/choosing-your-tools/the-work-policy","minutes":8,"keyIdea":"Check the confidentiality policy, your contract and your client agreements before asking about AI specifically, ask a specific bounded question rather than an open one, and keep a one-page record of which tools you use, for what, and what you never send."}]},{"slug":"beyond-chat","title":"Beyond the chat box","summary":"Most of the money in this field is spent outside the chat window, on tools nobody compares carefully. This block works through the categories: image generation, transcription and translation, voice, video, research and search, documents and OCR, spreadsheets and data, meeting notetakers, the per-seat office suite assistants, automation platforms, and the specialist products sold to your profession. Each one gets the same treatment: what genuinely separates the products, where the free path is good enough, and the specific way each category fails.","outcome":"Judge a tool in any of the main non-chat categories on the property that actually separates them (legible text, verifiable citations, licensed data, visible code, consent and retention) name the free path that does the same job, and identify the failure mode specific to that category before it costs you.","lessons":[{"slug":"choosing-an-image-tool","title":"Choosing an image tool","url":"https://addaly.com/learn/choosing-your-tools/choosing-an-image-tool","api":"https://addaly.com/api/lesson/choosing-your-tools/choosing-an-image-tool","minutes":9,"keyIdea":"Image tools differ most in rendering text, keeping a subject consistent, and editing an existing picture rather than in raw quality, and the free local route removes both the per-image cost and the content restrictions, along with the indemnity."},{"slug":"transcription-and-translation","title":"Transcription and translation","url":"https://addaly.com/learn/choosing-your-tools/transcription-and-translation","api":"https://addaly.com/api/lesson/choosing-your-tools/transcription-and-translation","minutes":8,"keyIdea":"Transcription is available free and locally at commercial quality, so accuracy is decided by microphone placement, overlapping speech and vocabulary hints rather than by which service you pay, and both transcription and translation fail silently."},{"slug":"voice-and-speech-tools","title":"Voice and speech tools","url":"https://addaly.com/learn/choosing-your-tools/voice-and-speech-tools","api":"https://addaly.com/api/lesson/choosing-your-tools/voice-and-speech-tools","minutes":8,"keyIdea":"Text-to-speech is free, local and good enough for accessibility, proofreading and reaching people who do not read the language, while voice cloning carries a real fraud risk that makes explicit consent and a household callback rule the load-bearing parts."},{"slug":"video-tools","title":"Video tools, generated and edited","url":"https://addaly.com/learn/choosing-your-tools/video-tools","api":"https://addaly.com/api/lesson/choosing-your-tools/video-tools","minutes":8,"keyIdea":"Nearly all the practical value in AI video is in editing, where free tools like DaVinci Resolve are professional-grade, while generation is priced per second with a high discard rate and works best as short ingredients cut into real footage."},{"slug":"research-and-search-tools","title":"Research and search tools","url":"https://addaly.com/learn/choosing-your-tools/research-and-search-tools","api":"https://addaly.com/api/lesson/choosing-your-tools/research-and-search-tools","minutes":9,"keyIdea":"Search-grounded answers are bounded by what the search returned, so click two citations to check they support the claim and read the source list before the report; and where you can supply the sources yourself, the failure mode becomes a safe one."},{"slug":"document-and-ocr-tools","title":"Documents, PDFs and OCR","url":"https://addaly.com/learn/choosing-your-tools/document-and-ocr-tools","api":"https://addaly.com/api/lesson/choosing-your-tools/document-and-ocr-tools","minutes":8,"keyIdea":"Check whether a PDF already has a text layer before anything else, because exact extraction beats recognition and both beat asking a vision model to read characters, and validate extracted tables by checking whether the rows still add to the printed total."},{"slug":"spreadsheet-and-data-tools","title":"Spreadsheets and data tools","url":"https://addaly.com/learn/choosing-your-tools/spreadsheet-and-data-tools","api":"https://addaly.com/api/lesson/choosing-your-tools/spreadsheet-and-data-tools","minutes":8,"keyIdea":"Data work is the category where checking is cheapest, so choose tools that show you the code, and make printing row counts before and after every operation the habit that catches silently dropped records."},{"slug":"meeting-notetakers","title":"Meeting notetakers","url":"https://addaly.com/learn/choosing-your-tools/meeting-notetakers","api":"https://addaly.com/api/lesson/choosing-your-tools/meeting-notetakers","minutes":7,"keyIdea":"Notetakers are adopted faster than the rules that govern them: consent for recording varies by jurisdiction, retention and who can search the archive are the questions to settle first, and summaries turn inconclusive discussions into decisions."},{"slug":"office-suite-assistants","title":"Office suite assistants","url":"https://addaly.com/learn/choosing-your-tools/office-suite-assistants","api":"https://addaly.com/api/lesson/choosing-your-tools/office-suite-assistants","minutes":8,"keyIdea":"An office suite assistant sells access to your own mail and files inside the organisation's boundary rather than a better model, so pilot five seats across different roles and read the distribution, and tidy file permissions before deploying, not after."},{"slug":"agent-platforms-and-automation","title":"Agents and automation platforms","url":"https://addaly.com/learn/choosing-your-tools/agent-platforms-and-automation","api":"https://addaly.com/api/lesson/choosing-your-tools/agent-platforms-and-automation","minutes":8,"keyIdea":"Most real value is in fixed workflows with a model in one step rather than in self-directing loops, because per-step reliability compounds badly, and any agent that reads untrusted text while holding permission to act is an unsolved security problem."},{"slug":"specialist-tools","title":"Specialist and industry tools","url":"https://addaly.com/learn/choosing-your-tools/specialist-tools","api":"https://addaly.com/api/lesson/choosing-your-tools/specialist-tools","minutes":8,"keyIdea":"A specialist tool is worth its premium when it has licensed data you cannot get, cites into verifiable sources, integrates with your working system, or carries accountability, and the professional stays responsible for the advice regardless."}]},{"slug":"living-with-it","title":"Living with it","summary":"The choice is the beginning. This block covers the years after it: turning repeated chatting into saved instructions you own rather than rent, keeping your work portable enough to act on your own review, what to do in the first hour after a deprecation notice, introducing a tool to colleagues without a mandate, measuring whether it actually helped, keeping up on an hour a month, when the right answer is to decline, and which parts of everything you have just read will still be true in three years.","outcome":"Turn repeated work into saved instructions kept in your own files, migrate to a replacement tool when one is withdrawn without losing your working setup, measure a tool's effect on your own work honestly enough to act on it, and separate the parts of any AI comparison that expire within months from the structural facts that do not.","lessons":[{"slug":"from-chat-to-workflow","title":"From chatting to a workflow","url":"https://addaly.com/learn/choosing-your-tools/from-chat-to-workflow","api":"https://addaly.com/api/lesson/choosing-your-tools/from-chat-to-workflow","minutes":8,"keyIdea":"The people who get most from these tools have stopped starting from nothing: four or five saved instructions containing context, format, standards and one example they liked, kept in their own plain text file rather than only inside a product's project feature."},{"slug":"portable-prompts","title":"Keeping your work portable","url":"https://addaly.com/learn/choosing-your-tools/portable-prompts","api":"https://addaly.com/api/lesson/choosing-your-tools/portable-prompts","minutes":7,"keyIdea":"Keep instructions, reference material and findings in your own plain text files, and test a product's export function in the first week rather than the week you decide to leave."},{"slug":"two-tools-and-a-date","title":"Two tools, and a date in your calendar","url":"https://addaly.com/learn/choosing-your-tools/two-tools-and-a-date","api":"https://addaly.com/api/lesson/choosing-your-tools/two-tools-and-a-date","minutes":7,"keyIdea":"Keep a default and a checker, and re-run your own five prompts twice a year."},{"slug":"when-your-tool-is-deprecated","title":"When your tool is withdrawn","url":"https://addaly.com/learn/choosing-your-tools/when-your-tool-is-deprecated","api":"https://addaly.com/api/lesson/choosing-your-tools/when-your-tool-is-deprecated","minutes":7,"keyIdea":"Export first because the data deadline is often earlier than the shutdown, treat the recommended successor as a suggestion to test with your own prompts, and expect migration regressions to come from expectations the old model inferred and the new one does not."},{"slug":"introducing-a-tool-to-a-team","title":"Introducing a tool to other people","url":"https://addaly.com/learn/choosing-your-tools/introducing-a-tool-to-a-team","api":"https://addaly.com/api/lesson/choosing-your-tools/introducing-a-tool-to-a-team","minutes":8,"keyIdea":"Start from one colleague's tedious task rather than from the tool, share the saved instruction rather than the enthusiasm, take specific objections as information, and measure a distribution across roles rather than an average."},{"slug":"measuring-whether-it-helped","title":"Measuring whether it actually helped","url":"https://addaly.com/learn/choosing-your-tools/measuring-whether-it-helped","api":"https://addaly.com/api/lesson/choosing-your-tools/measuring-whether-it-helped","minutes":8,"keyIdea":"Record minutes saved, minutes spent checking and one thing it could not do, on the day, per task, and never measure messages, words or lines produced, because those rise without anything being completed to a standard."},{"slug":"keeping-up-without-drowning","title":"Keeping up without drowning","url":"https://addaly.com/learn/choosing-your-tools/keeping-up-without-drowning","api":"https://addaly.com/api/lesson/choosing-your-tools/keeping-up-without-drowning","minutes":7,"keyIdea":"One hour a month on changelogs, one substantial piece and one thing tried is enough, because your decision record's change-my-mind conditions filter almost everything else, and only price changes, data-term changes, deprecations and capability arriving at a smaller size deserve interrupting it."},{"slug":"saying-no","title":"When the right answer is not to use it","url":"https://addaly.com/learn/choosing-your-tools/saying-no","api":"https://addaly.com/api/lesson/choosing-your-tools/saying-no","minutes":8,"keyIdea":"Declining is sometimes the right decision (where the point is that a person did it, where the struggle is the learning, where nobody can check the answer, and where somebody is owed an accountable human judgement) but an untested objection is a preference rather than a principle."},{"slug":"what-changed-and-what-did-not","title":"What changes, and what does not","url":"https://addaly.com/learn/choosing-your-tools/what-changed-and-what-did-not","api":"https://addaly.com/api/lesson/choosing-your-tools/what-changed-and-what-did-not","minutes":7,"keyIdea":"Prices, model names and capability claims expire within months, while the structural facts (fluency is not reliability, the product layer dominates experience, verification cost decides value, and your own prompts beat any comparison) have held for years."}]}]},{"slug":"how-software-changed","title":"How Software Development Changed","tagline":"Writing code got cheap. Knowing what to build did not.","description":"A plain account of what actually shifted in how software gets built, for people who write code or manage people who do. Where the bottleneck moved, why plausible-but-wrong code is a new kind of failure, how review and testing have to change, why specifications got more valuable, and which parts of the job got harder rather than easier. Vendor-neutral, with the contested parts marked as contested.","level":"intermediate","track":"work","url":"https://addaly.com/learn/how-software-changed","lessons":87,"minutes":789,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/how-software-changed.pdf","pages":492,"bytes":5536647,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/how-software-changed.pdf","cover":"https://addaly.com/textbooks/look/how-software-changed/1.webp?v=2026-10-07-5536647"},"film":null,"modules":[{"slug":"where-the-cost-went","title":"Where the cost actually went","summary":"The productivity claim, taken apart. What got cheaper, by how much, measured how, and why a faster writing stage does not make a faster team when the queue is somewhere else.","outcome":"Account for a productivity claim in numbers: name which stage of the delivery pipeline got faster, compute what that does to end-to-end throughput when the constraint sits elsewhere, and read a study or a vendor figure well enough to say precisely what it does and does not establish.","lessons":[{"slug":"the-cost-curve-moved","title":"The cost curve moved, but only part of it","url":"https://addaly.com/learn/how-software-changed/the-cost-curve-moved","api":"https://addaly.com/api/lesson/how-software-changed/the-cost-curve-moved","minutes":8,"keyIdea":"Generating code got cheap; deciding what to build and confirming it is right did not."},{"slug":"the-fifth-time-code-got-cheap","title":"The fifth time code got cheap","url":"https://addaly.com/learn/how-software-changed/the-fifth-time-code-got-cheap","api":"https://addaly.com/api/lesson/how-software-changed/the-fifth-time-code-got-cheap","minutes":9,"keyIdea":"Every wave of cheaper code has attacked the difficulty of expressing intent and left the difficulty of deciding what should happen untouched, and the current wave differs mainly in that it fails confidently rather than loudly."},{"slug":"induced-demand-for-software","title":"Cheaper software means more software","url":"https://addaly.com/learn/how-software-changed/induced-demand-for-software","api":"https://addaly.com/api/lesson/how-software-changed/induced-demand-for-software","minutes":9,"keyIdea":"Making software cheap to produce expands what gets built rather than shrinking the work, but it expands the maintenance surface at the same rate, and maintenance is made of the activities that did not get cheaper."},{"slug":"reading-a-productivity-study","title":"How to read a claim about developer productivity","url":"https://addaly.com/learn/how-software-changed/reading-a-productivity-study","api":"https://addaly.com/api/lesson/how-software-changed/reading-a-productivity-study","minutes":10,"keyIdea":"Match the claim to the study design that produced it: a fixed-task trial can only speak about fixed tasks, self-reported savings measure belief rather than time, and a speed result with no defect measure is half a finding."},{"slug":"the-perception-gap","title":"Why it feels faster than it measures","url":"https://addaly.com/learn/how-software-changed/the-perception-gap","api":"https://addaly.com/api/lesson/how-software-changed/the-perception-gap","minutes":8,"keyIdea":"Felt speed and measured speed diverge because waiting is not remembered as effort and debugging is charged to a different account, so decisions about how a team works need a clock and a defect count rather than an impression."},{"slug":"queues-not-speeds","title":"Queues, not speeds","url":"https://addaly.com/learn/how-software-changed/queues-not-speeds","api":"https://addaly.com/api/lesson/how-software-changed/queues-not-speeds","minutes":10,"keyIdea":"Throughput is set by the slowest stage, waiting time explodes non-linearly as that stage approaches full utilisation, so a faster writing stage in front of a busy review stage lengthens delivery rather than shortening it."},{"slug":"tasks-sorted-by-payoff","title":"Where the gain is large, small, and negative","url":"https://addaly.com/learn/how-software-changed/tasks-sorted-by-payoff","api":"https://addaly.com/api/lesson/how-software-changed/tasks-sorted-by-payoff","minutes":10,"keyIdea":"The payoff from generated code tracks how cheap verification is, not how easy the code is, so the strongest use is work with a perfect oracle such as a refactor and the weakest is work whose difficulty was deciding what should happen."},{"slug":"what-the-loop-costs","title":"What the loop costs, and the free path","url":"https://addaly.com/learn/how-software-changed/what-the-loop-costs","api":"https://addaly.com/api/lesson/how-software-changed/what-the-loop-costs","minutes":9,"keyIdea":"Token spend is only the visible cost of the loop, latency and attention are usually larger, and a free local model plus a strict type checker beats an expensive model with no oracles."},{"slug":"the-honest-ledger","title":"Measuring the effect on yourself","url":"https://addaly.com/learn/how-software-changed/the-honest-ledger","api":"https://addaly.com/api/lesson/how-software-changed/the-honest-ledger","minutes":9,"keyIdea":"A two-week self-experiment with coin-flip allocation, a merged-and-deployed end point and a thirty-day defect column will tell you more about your own practice than any published study, provided you write the decision rule before you see the data."}]},{"slug":"reading-what-you-did-not-write","title":"Reading what you did not write","summary":"Review became the constraint and the most valuable skill on a team. How to orient in an unfamiliar system, size and triage a diff, read generated tests, and find the safety that quietly went missing.","outcome":"Review a change whose author may not have read it closely: orient in an unfamiliar system fast, triage a diff by risk and cap it at a size where defect detection still works, judge tests and dependency changes on their own terms, and check the change against the stated intent rather than against its own internal consistency.","lessons":[{"slug":"reading-at-volume","title":"Reviewing code you did not write","url":"https://addaly.com/learn/how-software-changed/reading-at-volume","api":"https://addaly.com/api/lesson/how-software-changed/reading-at-volume","minutes":9,"keyIdea":"You own every line you submit, whoever typed it; if you cannot explain it in review, it is not ready."},{"slug":"plausible-but-wrong","title":"The new failure mode: plausible and wrong","url":"https://addaly.com/learn/how-software-changed/plausible-but-wrong","api":"https://addaly.com/api/lesson/how-software-changed/plausible-but-wrong","minutes":9,"keyIdea":"Code that looks right is no longer evidence that it is right; polish and correctness came apart."},{"slug":"orienting-in-an-unfamiliar-system","title":"Orienting in a system you have never seen","url":"https://addaly.com/learn/how-software-changed/orienting-in-an-unfamiliar-system","api":"https://addaly.com/api/lesson/how-software-changed/orienting-in-an-unfamiliar-system","minutes":10,"keyIdea":"Understand an unfamiliar system by reading its schema, tracing one request end to end and asking git which files really change, because the data model and the commit history are the two artefacts that cannot lie about what the system does."},{"slug":"the-review-budget","title":"Spending a review budget","url":"https://addaly.com/learn/how-software-changed/the-review-budget","api":"https://addaly.com/api/lesson/how-software-changed/the-review-budget","minutes":9,"keyIdea":"Review is a budget, so allocate it by what each file can cost rather than evenly across the diff, and record what you actually read so an approval carries a specific meaning rather than an implied one."},{"slug":"diff-size-economics","title":"Why the diff has to be small","url":"https://addaly.com/learn/how-software-changed/diff-size-economics","api":"https://addaly.com/api/lesson/how-software-changed/diff-size-economics","minutes":9,"keyIdea":"Defect detection per line falls as a review grows, because past a certain size a reviewer silently switches from comparing before and after states to pattern-matching on how the code looks, which is exactly the check generated code passes trivially."},{"slug":"reading-the-tests","title":"Reading a test suite you did not write","url":"https://addaly.com/learn/how-software-changed/reading-the-tests","api":"https://addaly.com/api/lesson/how-software-changed/reading-the-tests","minutes":10,"keyIdea":"A test's strength lies in where its expected value came from, so a suite whose assertions restate the implementation will pass through every bug and break on every refactor, and the cheapest way to find out is to break the code on purpose and watch."},{"slug":"safety-that-went-missing","title":"Safety that quietly went missing","url":"https://addaly.com/learn/how-software-changed/safety-that-went-missing","api":"https://addaly.com/api/lesson/how-software-changed/safety-that-went-missing","minutes":9,"keyIdea":"Removed checks are the highest-risk lines in a diff and the ones human attention least reliably reaches, so the fix is a mechanical grep over deletions plus a norm that every removed guard is explained in the description."},{"slug":"reviewing-dependency-changes","title":"Reviewing a dependency change","url":"https://addaly.com/learn/how-software-changed/reviewing-dependency-changes","api":"https://addaly.com/api/lesson/how-software-changed/reviewing-dependency-changes","minutes":9,"keyIdea":"A one-line dependency addition is an unbounded commitment to run other people's code with your permissions, so it earns the two-minute check (existence, publisher, transitive count, install scripts, licence, maintenance) that no other line in a diff needs."},{"slug":"review-as-knowledge-transfer","title":"The second job of review, and how it broke","url":"https://addaly.com/learn/how-software-changed/review-as-knowledge-transfer","api":"https://addaly.com/api/lesson/how-software-changed/review-as-knowledge-transfer","minutes":9,"keyIdea":"Review transferred understanding only because both people had thought hard about the change, so when the author has not, the knowledge-transfer half of review disappears silently and reappears as a system nobody can explain."},{"slug":"machine-assisted-review","title":"Letting a machine help you review","url":"https://addaly.com/learn/how-software-changed/machine-assisted-review","api":"https://addaly.com/api/lesson/how-software-changed/machine-assisted-review","minutes":9,"keyIdea":"Delegate review questions you can verify in under a minute and refuse the ones you cannot, and configure any review bot for precision over coverage, because a checker that is usually wrong trains people to dismiss the one time it is right."}]},{"slug":"oracles-and-verification","title":"Building oracles that stay ahead","summary":"If producing code is cheap, the scarce asset is anything that can tell you the code is wrong. Properties, differential runs, strict types, database constraints, mutation checks and staged release: the machinery of knowing.","outcome":"Assemble a layered set of oracles for a change (properties and differential runs where behaviour must be preserved, types and database constraints that run for ever at no cost, mutation checks to prove the suite bites, and a staged release that can stop itself) and say for any change what would have to be true for it to be wrong and which layer would catch it.","lessons":[{"slug":"verification-is-the-bottleneck","title":"Testing when generating is free","url":"https://addaly.com/learn/how-software-changed/verification-is-the-bottleneck","api":"https://addaly.com/api/lesson/how-software-changed/verification-is-the-bottleneck","minutes":9,"keyIdea":"A test only counts if you have seen it fail for the right reason."},{"slug":"properties-not-examples","title":"Properties, not examples","url":"https://addaly.com/learn/how-software-changed/properties-not-examples","api":"https://addaly.com/api/lesson/how-software-changed/properties-not-examples","minutes":10,"keyIdea":"A property states what must be true of every input and lets the machine hunt for a counterexample, which is cheap for you to write and expensive for pattern-matched code to satisfy by accident."},{"slug":"differential-testing","title":"The old version is your best oracle","url":"https://addaly.com/learn/how-software-changed/differential-testing","api":"https://addaly.com/api/lesson/how-software-changed/differential-testing","minutes":10,"keyIdea":"When the requirement is that behaviour must not change, the previous version is a perfect oracle, so refactors and migrations should be verified by running both implementations over real traffic rather than by reading the diff."},{"slug":"types-as-always-on-oracles","title":"The type checker got more valuable","url":"https://addaly.com/learn/how-software-changed/types-as-always-on-oracles","api":"https://addaly.com/api/lesson/how-software-changed/types-as-always-on-oracles","minutes":9,"keyIdea":"A type checker is the only reviewer whose capacity scales with the amount of code, and it earns most when types carry meaning rather than shape, so identifiers, units and currencies become mistakes the compiler refuses."},{"slug":"constraints-in-the-database","title":"The database is the last honest gate","url":"https://addaly.com/learn/how-software-changed/constraints-in-the-database","api":"https://addaly.com/api/lesson/how-software-changed/constraints-in-the-database","minutes":9,"keyIdea":"A database constraint enforces a rule against every writer that will ever exist, so it converts a class of bug from unlikely to impossible for the price of one line of DDL and a validation scan."},{"slug":"mutation-testing","title":"Proving the suite bites","url":"https://addaly.com/learn/how-software-changed/mutation-testing","api":"https://addaly.com/api/lesson/how-software-changed/mutation-testing","minutes":9,"keyIdea":"Mutation testing measures whether a suite would notice if the code were wrong, which is the question coverage cannot answer, and the informative comparison is a module with high coverage and a low mutation score."},{"slug":"adversarial-inputs","title":"Inputs designed to hurt","url":"https://addaly.com/learn/how-software-changed/adversarial-inputs","api":"https://addaly.com/api/lesson/how-software-changed/adversarial-inputs","minutes":9,"keyIdea":"Keep a committed corpus of hostile inputs and fuzz anything that parses, remembering that a fuzzer finds crashes rather than wrong answers, so it layers with properties and differential runs rather than replacing them."},{"slug":"flaky-tests","title":"A suite that lies intermittently","url":"https://addaly.com/learn/how-software-changed/flaky-tests","api":"https://addaly.com/api/lesson/how-software-changed/flaky-tests","minutes":9,"keyIdea":"Flake probability compounds across a suite, so a small per-test failure rate makes a red build meaningless, and the fix is automatic detection, a capped quarantine with a deletion deadline, and never a blanket retry."},{"slug":"ci-as-the-gate","title":"Designing a pipeline that is actually a gate","url":"https://addaly.com/learn/how-software-changed/ci-as-the-gate","api":"https://addaly.com/api/lesson/how-software-changed/ci-as-the-gate","minutes":9,"keyIdea":"A pipeline is only a gate if it is fast enough that nobody routes around it and tests the merge result rather than the branch, so blocking checks must be limited to what is deterministic, quick and unambiguously wrong."},{"slug":"release-as-verification","title":"Verification that continues after merge","url":"https://addaly.com/learn/how-software-changed/release-as-verification","api":"https://addaly.com/api/lesson/how-software-changed/release-as-verification","minutes":9,"keyIdea":"Production is the last and most informative oracle, so design releases to be reversible and pick the halt metric and canary duration from your actual traffic rate rather than by feel."}]},{"slug":"saying-what-you-want","title":"Saying what you want","summary":"Ambiguity used to stop you while typing. Now it gets resolved silently, in some direction. Writing the decision down became a technical skill, and the same page can be the prompt, the review criterion and the test names.","outcome":"Turn a vague request into a written specification that serves as prompt, review criterion and test names at once: enumerate the ambiguities a competent stranger could not resolve, state the out-of-scope boundary, record the decisions that have no technically correct answer, and keep the whole thing in the repository so it cannot drift from the code.","lessons":[{"slug":"specification-got-more-valuable","title":"Why writing it down matters more now","url":"https://addaly.com/learn/how-software-changed/specification-got-more-valuable","api":"https://addaly.com/api/lesson/how-software-changed/specification-got-more-valuable","minutes":8,"keyIdea":"Ambiguity used to stop you while typing; now it gets resolved for you, silently, in some direction."},{"slug":"the-ambiguity-audit","title":"The ambiguity audit","url":"https://addaly.com/learn/how-software-changed/the-ambiguity-audit","api":"https://addaly.com/api/lesson/how-software-changed/the-ambiguity-audit","minutes":10,"keyIdea":"Run a request against a fixed list of ambiguity categories (matching, ordering, emptiness, permission, time, language, failure) because the questions you do not ask get answered anyway, silently, by whatever produces the code."},{"slug":"acceptance-criteria-as-tests","title":"Criteria that become test names","url":"https://addaly.com/learn/how-software-changed/acceptance-criteria-as-tests","api":"https://addaly.com/api/lesson/how-software-changed/acceptance-criteria-as-tests","minutes":9,"keyIdea":"Replace every adjective in a requirement with an observation somebody could make, and write criteria as worked examples with real values, because a specification's expected values are the only ones that come from outside the code."},{"slug":"decision-records","title":"Writing down the why","url":"https://addaly.com/learn/how-software-changed/decision-records","api":"https://addaly.com/api/lesson/how-software-changed/decision-records","minutes":9,"keyIdea":"A decision record earns its place through the alternatives it rejects and the costs it admits, and a one-line comment linking code to its record is what stops a deliberate oddity from being helpfully corrected later."},{"slug":"what-the-tool-can-know","title":"What the tool can actually know about your codebase","url":"https://addaly.com/learn/how-software-changed/what-the-tool-can-know","api":"https://addaly.com/api/lesson/how-software-changed/what-the-tool-can-know","minutes":9,"keyIdea":"A model reasons only over the text in its window, so it invents helpers it cannot see, and the fix is naming specific files plus a short honest conventions file rather than expecting retrieval to find the constraint that is worded differently."},{"slug":"interfaces-before-implementations","title":"Design the seam, generate the filling","url":"https://addaly.com/learn/how-software-changed/interfaces-before-implementations","api":"https://addaly.com/api/lesson/how-software-changed/interfaces-before-implementations","minutes":9,"keyIdea":"Interfaces are commitments and implementations are disposable, so spend your thinking on the signature, the types and the documented contract, then let the body be generated against tests that came from the contract rather than from the code."},{"slug":"scope-and-blast-radius","title":"Bounding what a change is allowed to touch","url":"https://addaly.com/learn/how-software-changed/scope-and-blast-radius","api":"https://addaly.com/api/lesson/how-software-changed/scope-and-blast-radius","minutes":9,"keyIdea":"A change with no stated boundary expands to the complete version of what the tool recognises, so name what is out of scope, forbid new dependencies by default, and instruct it to stop and ask rather than route around an obstacle."},{"slug":"examples-beat-adjectives","title":"Examples beat adjectives","url":"https://addaly.com/learn/how-software-changed/examples-beat-adjectives","api":"https://addaly.com/api/lesson/how-software-changed/examples-beat-adjectives","minutes":8,"keyIdea":"An example fixes the properties you would not have thought to name, so replace adjectives with worked cases and domain vocabulary, while varying the examples along dimensions that do not matter, or they will be copied too."},{"slug":"specs-that-do-not-rot","title":"Keeping the written thing true","url":"https://addaly.com/learn/how-software-changed/specs-that-do-not-rot","api":"https://addaly.com/api/lesson/how-software-changed/specs-that-do-not-rot","minutes":8,"keyIdea":"Written specifications stay true through two mechanisms only (living in the same commit as the code and being checked by something that fails) so make what you can executable, keep decisions immutable, and delete prose you are not maintaining."},{"slug":"when-not-to-specify","title":"When writing it down is the wrong move","url":"https://addaly.com/learn/how-software-changed/when-not-to-specify","api":"https://addaly.com/api/lesson/how-software-changed/when-not-to-specify","minutes":8,"keyIdea":"Write down what would be expensive or invisible to get wrong, and nothing else: a specification's value lies entirely in the decisions a human made in it, so a long generated document with no choices in it is not a specification at all."}]},{"slug":"the-working-loop","title":"The working loop","summary":"What the day actually looks like: small reversible steps, git as a safety net, sandboxed agents whose diffs you read, debugging that still works the old way, and knowing when to stop arguing and start again.","outcome":"Run a change through a loop that keeps the cost of being wrong at fifteen minutes: steps small enough to throw away, git used so that reversal is instant, an agent confined so a mistake cannot reach production or your credentials, and an explicit rule for abandoning a conversation that has gone wrong twice.","lessons":[{"slug":"pairing-on-a-real-task","title":"Pairing with a model on real work","url":"https://addaly.com/learn/how-software-changed/pairing-on-a-real-task","api":"https://addaly.com/api/lesson/how-software-changed/pairing-on-a-real-task","minutes":10,"keyIdea":"Work in steps you can run and throw away; speed only helps when reversing it is cheap."},{"slug":"git-as-a-safety-net","title":"Git is what makes speed safe","url":"https://addaly.com/learn/how-software-changed/git-as-a-safety-net","api":"https://addaly.com/api/lesson/how-software-changed/git-as-a-safety-net","minutes":9,"keyIdea":"Small reversible steps are only cheap if reversal is instant, so commit constantly, stage with `git add -p`, keep a clean tree before letting any tool edit files, and remember that reflog holds almost everything you think you destroyed."},{"slug":"agents-and-blast-radius","title":"Confining an agent","url":"https://addaly.com/learn/how-software-changed/agents-and-blast-radius","api":"https://addaly.com/api/lesson/how-software-changed/agents-and-blast-radius","minutes":10,"keyIdea":"An unattended agent inherits everything you can read and run, and text it reads can act as instruction, so confinement must be a real boundary (a container without your credentials) with a permission list narrow enough that a prompt still means something."},{"slug":"debugging-did-not-change","title":"Debugging still works the old way","url":"https://addaly.com/learn/how-software-changed/debugging-did-not-change","api":"https://addaly.com/api/lesson/how-software-changed/debugging-did-not-change","minutes":9,"keyIdea":"Debugging held its value because the evidence lives in the running system rather than in any text, so the method stays reproduce, minimise, bisect, hypothesise and instrument, and a suggested cause is a hypothesis to test rather than a diagnosis."},{"slug":"refactoring-and-codemods","title":"The task it is best at","url":"https://addaly.com/learn/how-software-changed/refactoring-and-codemods","api":"https://addaly.com/api/lesson/how-software-changed/refactoring-and-codemods","minutes":9,"keyIdea":"Mechanical change is the safest use of generation because the old version is a perfect oracle, so keep behaviour-preserving work in its own verified commit and prefer a deterministic pattern tool wherever the change is a pattern."},{"slug":"unfamiliar-language","title":"Shipping in a language you do not know","url":"https://addaly.com/learn/how-software-changed/unfamiliar-language","api":"https://addaly.com/api/lesson/how-software-changed/unfamiliar-language","minutes":9,"keyIdea":"Generation lets you ship in an unfamiliar language but not maintain or debug in one, and what still bites is the language's error-handling norms, concurrency model and tooling, so turn the strictest linter on first and get one fluent human to read the first thing you ship."},{"slug":"when-not-to-reach-for-it","title":"When to put the tool down","url":"https://addaly.com/learn/how-software-changed/when-not-to-reach-for-it","api":"https://addaly.com/api/lesson/how-software-changed/when-not-to-reach-for-it","minutes":8,"keyIdea":"Generation serves output and undermines understanding, so name which one you are after before you start, and schedule unassisted practice deliberately, because the fast review judgement everything now depends on is built only by having written the code yourself."},{"slug":"restarting-the-conversation","title":"Knowing when to start again","url":"https://addaly.com/learn/how-software-changed/restarting-the-conversation","api":"https://addaly.com/api/lesson/how-software-changed/restarting-the-conversation","minutes":8,"keyIdea":"A conversation that has been wrong twice is a context containing the wrong approach three times, so restart with what the failure taught you rather than making a third correction, and time-box the decision because judgement is compromised exactly when it is needed."},{"slug":"a-loop-that-costs-nothing","title":"A complete free workflow","url":"https://addaly.com/learn/how-software-changed/a-loop-that-costs-nothing","api":"https://addaly.com/api/lesson/how-software-changed/a-loop-that-costs-nothing","minutes":9,"keyIdea":"A completely free stack (strict type checker, tests, property testing, git, a quantised local coding model and a free pipeline) covers most of the work, and the tasks where a small local model falls short are largely the tasks you should be doing yourself anyway."},{"slug":"signs-the-loop-has-gone-bad","title":"Signs the loop has gone bad","url":"https://addaly.com/learn/how-software-changed/signs-the-loop-has-gone-bad","api":"https://addaly.com/api/lesson/how-software-changed/signs-the-loop-has-gone-bad","minutes":8,"keyIdea":"The dangerous session is the one that feels productive for two hours, so watch for the diff growing unread, nothing being run, tests moving to match code, and suppressions appearing, and go back to the last commit that worked rather than pushing on."}]},{"slug":"teams-and-delivery","title":"Teams, process and delivery","summary":"What a manager or a tech lead has to change. Measuring delivery rather than activity, planning verification as work, capping the queue, defending architectural coherence, and writing a tool policy people will follow.","outcome":"Change a team's process to match the new constraint: measure delivery with the four keys rather than activity counts, cap work in progress at the bottleneck, put verification in the plan with a named owner and real hours, schedule consolidation, defend coherence with automated fitness functions, and write a one-page tool policy that survives a deadline.","lessons":[{"slug":"what-got-harder","title":"The parts that got harder","url":"https://addaly.com/learn/how-software-changed/what-got-harder","api":"https://addaly.com/api/lesson/how-software-changed/what-got-harder","minutes":10,"keyIdea":"More code with unchanged verification capacity is not more throughput; it is a growing queue."},{"slug":"measuring-delivery-not-activity","title":"Four numbers that resist gaming","url":"https://addaly.com/learn/how-software-changed/measuring-delivery-not-activity","api":"https://addaly.com/api/lesson/how-software-changed/measuring-delivery-not-activity","minutes":10,"keyIdea":"Measure at the end of the pipeline with deployment frequency, lead time, change failure rate and recovery time, because those four interlock so that cheating on one degrades another, while every activity count rises with tool use regardless of what is delivered."},{"slug":"estimation-and-the-demo-effect","title":"Why everything looks nearly done","url":"https://addaly.com/learn/how-software-changed/estimation-and-the-demo-effect","api":"https://addaly.com/api/lesson/how-software-changed/estimation-and-the-demo-effect","minutes":9,"keyIdea":"The demo now arrives on day one and completion takes as long as it ever did, so estimate by counting unresolved decisions against a reference class of past work, state the estimate to deployed rather than to demo, and put the edge cases on the board before anybody sees it working."},{"slug":"work-in-progress-limits","title":"Capping the queue","url":"https://addaly.com/learn/how-software-changed/work-in-progress-limits","api":"https://addaly.com/api/lesson/how-software-changed/work-in-progress-limits","minutes":9,"keyIdea":"Capping work in progress moves effort to the constraint automatically and cuts time in system without changing throughput, and the argument that persuades managers is Little's Law computed from the team's own numbers."},{"slug":"planning-verification-as-work","title":"Putting verification in the plan","url":"https://addaly.com/learn/how-software-changed/planning-verification-as-work","api":"https://addaly.com/api/lesson/how-software-changed/planning-verification-as-work","minutes":8,"keyIdea":"Verification is work, so it belongs in the plan with an oracle, a named person and hours rather than being the residue of whatever time is left, and the cheapest version is one sentence naming who confirms what by which method."},{"slug":"consolidation-and-entropy","title":"Scheduling the deletion","url":"https://addaly.com/learn/how-software-changed/consolidation-and-entropy","api":"https://addaly.com/api/lesson/how-software-changed/consolidation-and-entropy","minutes":9,"keyIdea":"Adding code is easy and locally justified while deleting requires understanding the whole system, so consolidation must be scheduled rather than hoped for, and the argument that works with management is incident arithmetic rather than elegance."},{"slug":"architectural-coherence","title":"Coherence has to be defended by something","url":"https://addaly.com/learn/how-software-changed/architectural-coherence","api":"https://addaly.com/api/lesson/how-software-changed/architectural-coherence","minutes":9,"keyIdea":"No individual diff is where architectural drift gets decided, so coherence needs a written page of how this codebase does recurring things plus an automated fitness function that fails the build, while the genuinely architectural bets stay with people."},{"slug":"onboarding-without-an-author","title":"Onboarding into code nobody wrote","url":"https://addaly.com/learn/how-software-changed/onboarding-without-an-author","api":"https://addaly.com/api/lesson/how-software-changed/onboarding-without-an-author","minutes":8,"keyIdea":"Onboarding used to run on an author's memory, so where that memory does not exist it must be replaced by verifiable exercises (a request trace, a schema drawn from scratch, a reverse review) and by tracking how many people can explain each service."},{"slug":"incidents-and-on-call","title":"Operating a system nobody wrote by hand","url":"https://addaly.com/learn/how-software-changed/incidents-and-on-call","api":"https://addaly.com/api/lesson/how-software-changed/incidents-and-on-call","minutes":9,"keyIdea":"When nobody remembers writing the code, the first question at 3am becomes what changed in the last day, so build the change timeline and stamp every log line with the deploy version, and convert every incident into one permanent test in the same week."},{"slug":"a-tool-policy-people-follow","title":"A policy people will actually follow","url":"https://addaly.com/learn/how-software-changed/a-tool-policy-people-follow","api":"https://addaly.com/api/lesson/how-software-changed/a-tool-policy-people-follow","minutes":9,"keyIdea":"A workable tool policy is one page with an approved list, a specific data rule that names a permitted alternative, the author owning every line, review scrutiny tiered by risk, and an explicit ban on measuring individuals by activity counts."}]},{"slug":"skill-and-the-missing-rung","title":"Skill, hiring and the missing rung","summary":"How competence actually forms, why generated code short-circuits the loop that forms it, what a team can do to rebuild the first rung of the ladder on purpose, and how to hire when every candidate has the same tools open.","outcome":"Diagnose where skill formation has been short-circuited and design around it: separate fluency from understanding with a test you can run in five minutes, name the parts of the craft whose feedback loop a generator cannot close, construct an apprenticeship task that is still expensive to generate, and run a hiring loop that discriminates between candidates who all have the same tools open.","lessons":[{"slug":"the-missing-rung","title":"Juniors, and the rung that went missing","url":"https://addaly.com/learn/how-software-changed/the-missing-rung","api":"https://addaly.com/api/lesson/how-software-changed/the-missing-rung","minutes":9,"keyIdea":"The work that used to make people senior is the work that got cheapest, so the rung has to be rebuilt on purpose."},{"slug":"how-skill-forms","title":"Why the hard part was the part that taught you","url":"https://addaly.com/learn/how-software-changed/how-skill-forms","api":"https://addaly.com/api/lesson/how-software-changed/how-skill-forms","minutes":9,"keyIdea":"Learning comes from retrieval under difficulty, and reading generated code substitutes recognition for retrieval while producing the identical feeling of understanding, so the internal signal that used to indicate learning now tracks fluency instead."},{"slug":"the-competence-illusion","title":"A five-minute test for whether you understood it","url":"https://addaly.com/learn/how-software-changed/the-competence-illusion","api":"https://addaly.com/api/lesson/how-software-changed/the-competence-illusion","minutes":9,"keyIdea":"Confidence tracks how fluently something reads rather than whether you could reproduce it, so the only reliable check is to close the file and attempt the explanation, and the cheapest version of that is predicting the branches before you generate."},{"slug":"what-stays-worth-learning","title":"The layer that does not get cheaper","url":"https://addaly.com/learn/how-software-changed/what-stays-worth-learning","api":"https://addaly.com/api/lesson/how-software-changed/what-stays-worth-learning","minutes":10,"keyIdea":"Invest study time where a wrong answer fails silently or late, because loud immediate failures are corrected by the loop itself while silent ones need a person who already knows."},{"slug":"practising-with-the-answer-available","title":"Practising when the answer is one keystroke away","url":"https://addaly.com/learn/how-software-changed/practising-with-the-answer-available","api":"https://addaly.com/api/lesson/how-software-changed/practising-with-the-answer-available","minutes":9,"keyIdea":"Design practice that pays off immediately as well as eventually: predicting the branches before generating catches bugs today and forces retrieval at the same time, which is why it survives a deadline when abstinence does not."},{"slug":"rebuilding-the-apprenticeship","title":"Tasks that are still expensive to generate","url":"https://addaly.com/learn/how-software-changed/rebuilding-the-apprenticeship","api":"https://addaly.com/api/lesson/how-software-changed/rebuilding-the-apprenticeship","minutes":10,"keyIdea":"Apprenticeship work now has to be selected for tasks where deciding what to do is the expensive part (diagnosis, migration, incident write-ups, ambiguous requests) because the tasks that were cheap to get wrong are exactly the ones generation made free."},{"slug":"interviews-that-still-discriminate","title":"Hiring when everyone has the same tools open","url":"https://addaly.com/learn/how-software-changed/interviews-that-still-discriminate","api":"https://addaly.com/api/lesson/how-software-changed/interviews-that-still-discriminate","minutes":10,"keyIdea":"Run the exercise with the tools on and score the process around them (whether the candidate runs it, reads the error, rejects an output, checks the documentation) because what became scarce is reading and judgment, not recall of syntax."},{"slug":"what-a-portfolio-proves-now","title":"What a repository proves, and what it stopped proving","url":"https://addaly.com/learn/how-software-changed/what-a-portfolio-proves-now","api":"https://addaly.com/api/lesson/how-software-changed/what-a-portfolio-proves-now","minutes":9,"keyIdea":"The finished artefact stopped carrying information, so the signal moved to things somebody else gated or that record the process: a merged pull request, a minimal reproduction, a review you left, a post-mortem, a commit history that shows a reversal."},{"slug":"roles-that-grew-and-shrank","title":"Where the work moved, and what is genuinely unknown","url":"https://addaly.com/learn/how-software-changed/roles-that-grew-and-shrank","api":"https://addaly.com/api/lesson/how-software-changed/roles-that-grew-and-shrank","minutes":9,"keyIdea":"Work sold as transcription lost its price while work that decides what should exist and confirms it is right did not, and the employment data from 2023 onward is too confounded by interest rates and post-2021 over-hiring to attribute the junior-hiring fall to any single cause."}]},{"slug":"provenance-security-and-law","title":"Provenance, security and the unsettled law","summary":"The attack surface that opened when code started arriving faster than anybody could read it (invented package names, insecure defaults inherited from old public code, secrets leaving in context, instructions hidden in data an agent reads) and the licensing and copyright questions that remain genuinely unresolved.","outcome":"Secure a change whose author may have been a model: verify a dependency before installation rather than after, name the vulnerability classes that arrive by default and the one class no scanner can find, break the lethal trifecta so an injected instruction cannot both reach secrets and send them anywhere, and state the shape of the copyright disagreement across jurisdictions without pretending it is settled.","lessons":[{"slug":"packages-that-do-not-exist","title":"The package that did not exist until an attacker made it","url":"https://addaly.com/learn/how-software-changed/packages-that-do-not-exist","api":"https://addaly.com/api/lesson/how-software-changed/packages-that-do-not-exist","minutes":9,"keyIdea":"Invented package names repeat across runs, which turns a hallucination into a predictable target an attacker can pre-register, so the defence is verifying a package exists and has history before installing rather than trusting that a failed install will catch it."},{"slug":"vulnerabilities-that-arrive-by-default","title":"Insecure defaults, inherited","url":"https://addaly.com/learn/how-software-changed/vulnerabilities-that-arrive-by-default","api":"https://addaly.com/api/lesson/how-software-changed/vulnerabilities-that-arrive-by-default","minutes":10,"keyIdea":"Generated code inherits the insecure defaults of old public code, and the one class that no scanner can catch is missing authorisation, because who may touch which object is a business rule that exists in nobody's training corpus."},{"slug":"what-leaves-the-building","title":"What leaves the building when you type","url":"https://addaly.com/learn/how-software-changed/what-leaves-the-building","api":"https://addaly.com/api/lesson/how-software-changed/what-leaves-the-building","minutes":9,"keyIdea":"Retention and training are separate questions answered differently by consumer and business tiers, and since you cannot verify either claim, the only control you actually hold is minimising what goes into context in the first place."},{"slug":"instructions-hidden-in-data","title":"Instructions hidden in the things an agent reads","url":"https://addaly.com/learn/how-software-changed/instructions-hidden-in-data","api":"https://addaly.com/api/lesson/how-software-changed/instructions-hidden-in-data","minutes":10,"keyIdea":"A model cannot distinguish instructions from data, so safety comes from architecture rather than wording: break the combination of private data access, untrusted content and an outbound channel, because any two of the three are survivable and all three are an exfiltration path."},{"slug":"scanning-what-you-did-not-write","title":"Scanners, and the trick that makes them usable","url":"https://addaly.com/learn/how-software-changed/scanning-what-you-did-not-write","api":"https://addaly.com/api/lesson/how-software-changed/scanning-what-you-did-not-write","minutes":9,"keyIdea":"Scan for the mechanical vulnerability classes and block only on findings the change introduced, because a baseline ratchet is the difference between a tool people act on and a wall of pre-existing findings that trains everyone to ignore alerts."},{"slug":"threat-modelling-a-change","title":"Four questions before you merge","url":"https://addaly.com/learn/how-software-changed/threat-modelling-a-change","api":"https://addaly.com/api/lesson/how-software-changed/threat-modelling-a-change","minutes":8,"keyIdea":"Four questions per diff (where untrusted input enters, what privilege the code holds, which line checks permission, and what an attacker gains if it is wrong) direct attention at exactly the classes no scanner can reach."},{"slug":"provenance-and-inventory","title":"Knowing what you actually shipped","url":"https://addaly.com/learn/how-software-changed/provenance-and-inventory","api":"https://addaly.com/api/lesson/how-software-changed/provenance-and-inventory","minutes":9,"keyIdea":"Component inventory and pinning are solvable and pay off on the morning of an advisory, while identifying which lines were generated is not solvable at all: watermarks do not survive code's constraints and detectors misfire on clean, conventional writing."},{"slug":"licences-and-familiar-code","title":"When the output looks like something else","url":"https://addaly.com/learn/how-software-changed/licences-and-familiar-code","api":"https://addaly.com/api/lesson/how-software-changed/licences-and-familiar-code","minutes":9,"keyIdea":"Verbatim reproduction concentrates in distinctive, heavily duplicated fragments rather than ordinary application code, so the practical controls are duplication filters, similarity scanning before release, and never asking a model to reimplement a specific named project."},{"slug":"copyright-and-training-unresolved","title":"The disagreement, laid out without a verdict","url":"https://addaly.com/learn/how-software-changed/copyright-and-training-unresolved","api":"https://addaly.com/api/lesson/how-software-changed/copyright-and-training-unresolved","minutes":10,"keyIdea":"Training and output raise separate unresolved questions decided differently under US fair use, the EU's opt-out TDM exception, the UK's research-only exception and regimes with no exception at all, so the only sound planning rule is to avoid depending on a particular ruling."},{"slug":"maintainers-and-the-flood","title":"The commons under a flood of free submissions","url":"https://addaly.com/learn/how-software-changed/maintainers-and-the-flood","api":"https://addaly.com/api/lesson/how-software-changed/maintainers-and-the-flood","minutes":9,"keyIdea":"Producing a plausible report costs seconds while disproving one costs a maintainer half an hour, so sustainable policy filters on evidence (a reproduction, passing tests, the ability to answer a question) rather than on guessing how a submission was written."}]},{"slug":"what-did-not-change","title":"What did not change, and what to do now","summary":"The constraints that survived every previous cost collapse and survived this one (essential complexity, irreversible decisions, domain knowledge, the ten-year cost of code), what history says about automations that grew a job and ones that ended it, an honest list of the questions still open, and a plan for the next month.","outcome":"Separate what got cheaper from what did not: identify which decisions in a design are one-way doors worth slowing down for, estimate a change by its ten-year cost rather than its writing cost, state what it would cost to leave a tool before adopting it, and name which questions in this field are genuinely open along with the evidence that would settle each one.","lessons":[{"slug":"essence-and-accident","title":"The distinction that keeps being right","url":"https://addaly.com/learn/how-software-changed/essence-and-accident","api":"https://addaly.com/api/lesson/how-software-changed/essence-and-accident","minutes":9,"keyIdea":"Generation attacks the accidental difficulty of expressing a decision and leaves the essential difficulty of making one, which is why identical tools produce large gains on representation-dominated work and none where requirements, domain or organisational agreement are the constraint."},{"slug":"one-way-doors","title":"Decisions that do not swing back","url":"https://addaly.com/learn/how-software-changed/one-way-doors","api":"https://addaly.com/api/lesson/how-software-changed/one-way-doors","minutes":9,"keyIdea":"Reversible decisions got much cheaper and irreversible ones did not move at all, so deliberation should now concentrate on the few choices (interface shape, key scheme, time representation, tenancy, what you collect) whose reversal costs weeks rather than an afternoon."},{"slug":"domain-knowledge-as-the-moat","title":"The facts that exist in no corpus","url":"https://addaly.com/learn/how-software-changed/domain-knowledge-as-the-moat","api":"https://addaly.com/api/lesson/how-software-changed/domain-knowledge-as-the-moat","minutes":9,"keyIdea":"The rules that decide whether software is correct live in regulations, in practitioners' heads and in the behaviour of the system being replaced, so acquiring them deliberately is what converts fast generation from plausible output into correct output."},{"slug":"the-ten-year-cost","title":"Writing cost, and the cost that follows it","url":"https://addaly.com/learn/how-software-changed/the-ten-year-cost","api":"https://addaly.com/api/lesson/how-software-changed/the-ten-year-cost","minutes":9,"keyIdea":"Generation cut the cost of writing code and not the cost of keeping it, while plausibly raising the second through volume, duplicated concepts and absent reasoning, so review and design should optimise for how few distinct concepts a system contains rather than for how fast each part arrived."},{"slug":"what-it-costs-to-leave","title":"Ask the exit question before you enter","url":"https://addaly.com/learn/how-software-changed/what-it-costs-to-leave","api":"https://addaly.com/api/lesson/how-software-changed/what-it-costs-to-leave","minutes":8,"keyIdea":"Lock-in accumulates in prompts, evaluation suites and habits rather than in the model itself, so keeping instructions and evaluations as ordinary files in your repository and building against an interface several providers implement keeps switching to a configuration change."},{"slug":"the-hardware-you-have","title":"Doing this work on the machine you own","url":"https://addaly.com/learn/how-software-changed/the-hardware-you-have","api":"https://addaly.com/api/lesson/how-software-changed/the-hardware-you-have","minutes":9,"keyIdea":"A phone with a terminal plus a borrowed machine covers nearly all of this work, and the honest hardware floor is a 4-bit 7B model at roughly 4 to 5 GB of memory, with training, large models and Apple-platform development being the things that genuinely require hardware you may not have."},{"slug":"what-previous-automations-did","title":"What happened the last few times","url":"https://addaly.com/learn/how-software-changed/what-previous-automations-did","api":"https://addaly.com/api/lesson/how-software-changed/what-previous-automations-did","minutes":10,"keyIdea":"Automations have both grown and destroyed occupations, and the outcome turned on whether cheaper supply expanded demand and whether the remaining tasks still needed those workers, so the actionable question is which of your own tasks are the automated part and which are the residue."},{"slug":"the-questions-that-stay-open","title":"What this course could not tell you","url":"https://addaly.com/learn/how-software-changed/the-questions-that-stay-open","api":"https://addaly.com/api/lesson/how-software-changed/the-questions-that-stay-open","minutes":9,"keyIdea":"The practical recommendations in this field rest on a small set of established mechanisms, while the headline empirical questions (productivity, skill, employment, law, maintainability) remain genuinely open, so advice that depends on those is advice that expires."},{"slug":"what-to-do-on-monday","title":"The next month, in order","url":"https://addaly.com/learn/how-software-changed/what-to-do-on-monday","api":"https://addaly.com/api/lesson/how-software-changed/what-to-do-on-monday","minutes":9,"keyIdea":"Make reversal instant first, add the always-on checkers second, and only then change how you work, because every practice worth adopting assumes that throwing away fifteen minutes of work is free and that something mechanical is watching while you read."}]}]},{"slug":"ai-for-small-business","title":"AI for a Small Business","tagline":"Two or three tasks, honestly measured. Not a new department.","description":"A practical course for someone whose own money is at stake: a shop, a workshop, a clinic, a small agency, a nonprofit. How to find the two or three tasks where AI saves real hours, how to keep invented numbers and customer data out of trouble, what it should cost you a month, and how to run a two-week trial that gives you an honest answer instead of a hopeful one.","level":"beginner","track":"work","url":"https://addaly.com/learn/ai-for-small-business","lessons":88,"minutes":768,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-for-small-business.pdf","pages":502,"bytes":5254572,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-for-small-business.pdf","cover":"https://addaly.com/textbooks/look/ai-for-small-business/1.webp?v=2026-10-07-5254572"},"film":{"url":"https://addaly.com/learn/ai-for-small-business#film","video":"https://addaly.com/videos/ai-for-small-business.mp4","captions":"https://addaly.com/videos/ai-for-small-business.vtt","poster":"https://addaly.com/videos/ai-for-small-business.jpg","seconds":882,"bytes":97125772,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"where-it-belongs","title":"Working out where AI belongs in your business","summary":"Before any tool, a diagnosis. This block starts from how the machine actually produces text (because that is what predicts which of your tasks it will handle and which it will quietly ruin) and ends with a one-page map of your own week: the two candidate tasks, the hours each takes now, the cost of checking the output, and the honest baseline that every later claim of improvement has to be measured against.","outcome":"Produce a one-page map of your own week that names two candidate tasks, states the hours each takes today from a real five-day count, prices the checking those tasks will need, and explains from the model's mechanism which of your tasks it will fail at.","lessons":[{"slug":"find-the-two-tasks","title":"The Two Tasks Worth Doing","url":"https://addaly.com/learn/ai-for-small-business/find-the-two-tasks","api":"https://addaly.com/api/lesson/ai-for-small-business/find-the-two-tasks","minutes":7,"keyIdea":"Start from where your hours actually go (frequent, text-shaped, cheap-to-check work) not from what the tool can do."},{"slug":"what-the-machine-is-doing","title":"Fluent and wrong come from the same place","url":"https://addaly.com/learn/ai-for-small-business/what-the-machine-is-doing","api":"https://addaly.com/api/lesson/ai-for-small-business/what-the-machine-is-doing","minutes":10,"keyIdea":"A language model predicts likely next words rather than retrieving facts, so its confidence is a property of the writing and never evidence about truth, which is why the facts must go in for the words to come out safely."},{"slug":"the-checking-tax","title":"The checking tax nobody counts","url":"https://addaly.com/learn/ai-for-small-business/the-checking-tax","api":"https://addaly.com/api/lesson/ai-for-small-business/the-checking-tax","minutes":9,"keyIdea":"The saving from a drafting tool is the drafting time minus the checking time, and a task whose errors are silent rather than loud can cost more to verify than it ever cost to do."},{"slug":"where-ai-arrives","title":"Four doors AI comes through, and what each one costs","url":"https://addaly.com/learn/ai-for-small-business/where-ai-arrives","api":"https://addaly.com/api/lesson/ai-for-small-business/where-ai-arrives","minutes":9,"keyIdea":"Chat window, built-in feature, API and local model are four routes to similar capability that differ in setup cost, price per use and where your data ends up, and the built-in feature is usually cheapest because the data is already there."},{"slug":"draw-the-process-first","title":"Draw the process before you change it","url":"https://addaly.com/learn/ai-for-small-business/draw-the-process-first","api":"https://addaly.com/api/lesson/ai-for-small-business/draw-the-process-first","minutes":8,"keyIdea":"Map the job as steps, mark each one as text, rules or judgement, and ask why each step exists before automating any of them, because a step that can be deleted saves all of its minutes and needs no checking."},{"slug":"the-five-day-tally","title":"The five-day tally, and why memory is not a baseline","url":"https://addaly.com/learn/ai-for-small-business/the-five-day-tally","api":"https://addaly.com/api/lesson/ai-for-small-business/the-five-day-tally","minutes":8,"keyIdea":"Count the task for five ordinary days before changing anything, because memory inflates hated work and erases frequent short interruptions, and without a written before there is no after: only the good feeling every new tool produces."},{"slug":"jobs-it-cannot-do","title":"Seven things it will fail at, and why","url":"https://addaly.com/learn/ai-for-small-business/jobs-it-cannot-do","api":"https://addaly.com/api/lesson/ai-for-small-business/jobs-it-cannot-do","minutes":9,"keyIdea":"The model fails wherever producing text that has the shape of a correct answer is not the same as computing one (arithmetic, rotas, exhaustive lists, counting) and the test is whether a wrong answer would look any different from a right one."},{"slug":"one-owner-one-tool","title":"One person owns it, for one month","url":"https://addaly.com/learn/ai-for-small-business/one-owner-one-tool","api":"https://addaly.com/api/lesson/ai-for-small-business/one-owner-one-tool","minutes":8,"keyIdea":"Competence with these tools is built by one person doing one task repeatedly until they can predict its failures, so adoption in a small business is one person, one tool, one month: with what is learned written into a file that survives that person leaving."},{"slug":"why-pilots-die","title":"Five ways a small-business pilot dies","url":"https://addaly.com/learn/ai-for-small-business/why-pilots-die","api":"https://addaly.com/api/lesson/ai-for-small-business/why-pilots-die","minutes":8,"keyIdea":"Pilots die from missing baselines, impressive-but-rare tasks, uncounted checking, tools bought before problems, and knowledge held by one person; and even a successful one fails if the hours saved were never assigned to anything."}]},{"slug":"asking-properly","title":"Asking properly: prompting for business work","summary":"A prompt is not a magic phrase, it is a briefing. This block builds the briefing a small business actually needs (the one page of facts that travels with every request, the five parts a good request always has, the examples that carry your voice where adjectives cannot, and the instruction that turns invention into a visible gap), then tests it against ten real cases and hardens it against the customer message written to manipulate it.","outcome":"Write, harden and test a reusable prompt for a real task in your business: with a dated facts sheet attached, a rule that makes missing information visible, and a ten-case test that says whether it is safe to use unsupervised.","lessons":[{"slug":"the-facts-sheet","title":"The one page that travels with every request","url":"https://addaly.com/learn/ai-for-small-business/the-facts-sheet","api":"https://addaly.com/api/lesson/ai-for-small-business/the-facts-sheet","minutes":9,"keyIdea":"One dated page of prices, boundaries, terms and voice, stored where every conversation sees it, is what turns a plausibility machine into a useful assistant; and a stale sheet is more dangerous than no sheet, because wrong facts arrive with no hesitancy at all."},{"slug":"the-five-part-request","title":"Five parts a request should always have","url":"https://addaly.com/learn/ai-for-small-business/the-five-part-request","api":"https://addaly.com/api/lesson/ai-for-small-business/the-five-part-request","minutes":8,"keyIdea":"A good request states situation, facts, one task, constraints and format, and the part most people skimp, the raw facts, is exactly the part whose absence produces the empty prose that reads as generated."},{"slug":"examples-beat-instructions","title":"Five examples teach what adjectives cannot","url":"https://addaly.com/learn/ai-for-small-business/examples-beat-instructions","api":"https://addaly.com/api/lesson/ai-for-small-business/examples-beat-instructions","minutes":9,"keyIdea":"Five real, varied, clearly labelled samples of your own writing transfer voice in a way no list of adjectives can, because the model continues the pattern in front of it, but examples carry manner rather than knowledge, so the facts sheet is still doing the other half of the job."},{"slug":"making-it-admit-ignorance","title":"Making the gaps visible","url":"https://addaly.com/learn/ai-for-small-business/making-it-admit-ignorance","api":"https://addaly.com/api/lesson/ai-for-small-business/making-it-admit-ignorance","minutes":9,"keyIdea":"You cannot stop a model inventing, but grounding it in a named source, licensing a NOT IN FACTS answer and requiring a quote for every claim converts invisible invention into visible gaps you can fix in seconds."},{"slug":"fixing-a-bad-draft","title":"Repairing a draft instead of starting again","url":"https://addaly.com/learn/ai-for-small-business/fixing-a-bad-draft","api":"https://addaly.com/api/lesson/ai-for-small-business/fixing-a-bad-draft","minutes":8,"keyIdea":"Repair a draft by naming the specific defect rather than asking for something better, stop after two failed turns, and promote any correction you make three times into the prompt itself so you never make it again."},{"slug":"context-and-forgetting","title":"Why long conversations go strange","url":"https://addaly.com/learn/ai-for-small-business/context-and-forgetting","api":"https://addaly.com/api/lesson/ai-for-small-business/context-and-forgetting","minutes":8,"keyIdea":"The whole thread is re-read on every turn, so long conversations cost more, slow down, and silently drop their oldest material, which is why standing instructions beat a facts sheet pasted at the top of an hour-old chat."},{"slug":"the-settings-that-matter","title":"The four settings that change the answer","url":"https://addaly.com/learn/ai-for-small-business/the-settings-that-matter","api":"https://addaly.com/api/lesson/ai-for-small-business/the-settings-that-matter","minutes":8,"keyIdea":"Model choice, search on or off, reasoning mode and temperature are the four settings that change the answer, and search state matters most because a model with search off answers from a stale memory with no visible sign it has done so."},{"slug":"a-prompt-library","title":"A prompt library a two-person business can keep","url":"https://addaly.com/learn/ai-for-small-business/a-prompt-library","api":"https://addaly.com/api/lesson/ai-for-small-business/a-prompt-library","minutes":8,"keyIdea":"Keep working prompts in one shared, dated file with a known-failures line for each, because that line is the accumulated experience of the person who used it three hundred times and is what actually transfers when they are away."},{"slug":"hostile-input","title":"The customer message written to manipulate your assistant","url":"https://addaly.com/learn/ai-for-small-business/hostile-input","api":"https://addaly.com/api/lesson/ai-for-small-business/hostile-input","minutes":9,"keyIdea":"A model cannot reliably distinguish instructions from the text it was asked to read, so hostile content in a message, file or web page can redirect any system that acts without a person, which is why capability, not cleverer filtering, is the thing to ration."},{"slug":"testing-a-prompt","title":"Ten cases before you trust it","url":"https://addaly.com/learn/ai-for-small-business/testing-a-prompt","api":"https://addaly.com/api/lesson/ai-for-small-business/testing-a-prompt","minutes":8,"keyIdea":"Test a prompt against ten real cases (four ordinary, two with missing information, two awkward, one out of range, one hostile) scored pass or fail on behaviour, and re-run the whole set whenever the prompt, the facts or the model changes."}]},{"slug":"your-own-knowledge","title":"Your own documents, and getting straight answers out of them","summary":"A model that has never seen your business is a guesser. The same model handed your price list, your contracts and your past emails is a reader, which is a different and far more reliable thing. This block explains what actually happens when you upload a file, why the passage it finds is chosen by meaning rather than by words, what OCR and transcription really cost you in errors, and how to tell whether an answer came from your document or from the model's memory.","outcome":"Turn your business's own files into something you can ask questions of, and for any answer it gives, say whether that answer came from your document or from the model's memory and verify it against the source in under a minute.","lessons":[{"slug":"asking-your-own-documents","title":"What actually happens when you upload a file","url":"https://addaly.com/learn/ai-for-small-business/asking-your-own-documents","api":"https://addaly.com/api/lesson/ai-for-small-business/asking-your-own-documents","minutes":9,"keyIdea":"Uploading a document may put all of it in front of the model or only the few passages your question retrieved, which is why pinpoint questions work well, exhaustive ones return confident incomplete lists, and \"is this clause absent?\" is the least trustworthy question you can ask."},{"slug":"why-retrieval-beats-memory","title":"Grounding: answering from your material rather than its memory","url":"https://addaly.com/learn/ai-for-small-business/why-retrieval-beats-memory","api":"https://addaly.com/api/lesson/ai-for-small-business/why-retrieval-beats-memory","minutes":9,"keyIdea":"Grounding converts the task from recall, where models fabricate, to reading comprehension, where they are strong, but it inherits everything wrong with your documents, so a grounded answer from a stale price list is a confident error with a citation attached."},{"slug":"embeddings-for-non-programmers","title":"Why it finds \"refund\" when the customer typed \"money back\"","url":"https://addaly.com/learn/ai-for-small-business/embeddings-for-non-programmers","api":"https://addaly.com/api/lesson/ai-for-small-business/embeddings-for-non-programmers","minutes":10,"keyIdea":"An embedding turns text into a position in a space of meaning, so search becomes a distance calculation rather than a word hunt, which is why it matches paraphrases and other languages, and also why \"our refund policy\" and \"our no-refund policy\" sit dangerously close together."},{"slug":"the-tools-that-hold-your-files","title":"Four ways to keep a small library, and what each costs","url":"https://addaly.com/learn/ai-for-small-business/the-tools-that-hold-your-files","api":"https://addaly.com/api/lesson/ai-for-small-business/the-tools-that-hold-your-files","minutes":9,"keyIdea":"Notebook products, projects in tools you already pay for, features inside software that already holds your data, and a local setup are four places a small document library can live, and the deciding questions are whether the material is confidential and how you would get it out again."},{"slug":"scanning-the-paper-drawer","title":"Turning paper into rows you can check","url":"https://addaly.com/learn/ai-for-small-business/scanning-the-paper-drawer","api":"https://addaly.com/api/lesson/ai-for-small-business/scanning-the-paper-drawer","minutes":9,"keyIdea":"OCR combined with a language model produces clean, plausible text rather than obvious garbage, so a misread digit arrives repaired and unmarked, which is why extracted figures get checked against the paper and against an external total, never against how sensible they look."},{"slug":"contracts-and-long-documents","title":"Reading a contract you were going to skim anyway","url":"https://addaly.com/learn/ai-for-small-business/contracts-and-long-documents","api":"https://addaly.com/api/lesson/ai-for-small-business/contracts-and-long-documents","minutes":10,"keyIdea":"On a long agreement a model reliably finds and explains a clause you name, and reliably fails to tell you a clause is absent, so use it to arrive at an adviser prepared, never to conclude that something is not there."},{"slug":"meetings-calls-and-notes","title":"Transcription, and the consent question nobody asks","url":"https://addaly.com/learn/ai-for-small-business/meetings-calls-and-notes","api":"https://addaly.com/api/lesson/ai-for-small-business/meetings-calls-and-notes","minutes":9,"keyIdea":"Transcription errors concentrate on names, numbers and unusual words, the very content you wanted, so a transcript is a memory aid rather than a record, and the short written confirmation you send afterwards is the thing that counts."},{"slug":"keeping-the-knowledge-current","title":"The stale document problem","url":"https://addaly.com/learn/ai-for-small-business/keeping-the-knowledge-current","api":"https://addaly.com/api/lesson/ai-for-small-business/keeping-the-knowledge-current","minutes":8,"keyIdea":"A grounded system inherits the currency of its documents exactly, so an out-of-date source produces confident cited errors indefinitely, which is why every document carries a date and a named owner, superseded versions leave the library, and a change to a price is a change to the facts sheet on the same checklist."},{"slug":"when-the-answer-is-not-in-the-file","title":"Checking a grounded answer in under a minute","url":"https://addaly.com/learn/ai-for-small-business/when-the-answer-is-not-in-the-file","api":"https://addaly.com/api/lesson/ai-for-small-business/when-the-answer-is-not-in-the-file","minutes":8,"keyIdea":"Check a grounded answer by confirming a citation exists, that the quoted text is really in the source, that it supports the claim rather than merely sitting near it, and that the source is current, and treat a completely confident answer with no gaps as the one most worth examining."}]},{"slug":"customers-and-the-front-desk","title":"Customers, from first message to resolved complaint","summary":"The front desk is where most small businesses spend their words: enquiries, bookings, reminders, complaints, reviews and the phone. This block works through each of them with one rule underneath: a customer must never receive a price, a promise or an apology the owner did not approve. And it treats the handover to a person as the part of the design that decides whether any of it helps.","outcome":"Run the enquiry-to-resolution path with AI help without a customer ever receiving a price, promise or apology you did not approve, name the point at which the system must hand over to a person, and measure whether customers were served better rather than merely faster.","lessons":[{"slug":"customer-messages","title":"Answering Customers Without Losing Your Voice","url":"https://addaly.com/learn/ai-for-small-business/customer-messages","api":"https://addaly.com/api/lesson/ai-for-small-business/customer-messages","minutes":8,"keyIdea":"Give it your facts on one page, ask it to flag what it does not know, and keep your hand on the send button."},{"slug":"sorting-the-inbox","title":"Sorting before drafting","url":"https://addaly.com/learn/ai-for-small-business/sorting-the-inbox","api":"https://addaly.com/api/lesson/ai-for-small-business/sorting-the-inbox","minutes":9,"keyIdea":"Classification is safer and often more valuable than drafting because the output is a label from your own list, and an explicit UNSURE bucket plus written tie-break rules are what stop awkward messages disappearing into the wrong pile."},{"slug":"a-bot-on-your-website","title":"Putting a bot on your website, with your eyes open","url":"https://addaly.com/learn/ai-for-small-business/a-bot-on-your-website","api":"https://addaly.com/api/lesson/ai-for-small-business/a-bot-on-your-website","minutes":10,"keyIdea":"A bot on your site speaks as your business and may bind it, so ground it in your own documents, refuse it the ability to quote custom prices, discounts or dates, give it read access rather than write access, and read twenty real transcripts every week."},{"slug":"the-handover","title":"Designing the moment it gives up","url":"https://addaly.com/learn/ai-for-small-business/the-handover","api":"https://addaly.com/api/lesson/ai-for-small-business/the-handover","minutes":8,"keyIdea":"The handover is the part of the design that decides whether automation helps, so hand over after two failures, on any money or emotional signal, and instantly on request; and never measure success by deflection, which counts abandonment as a win."},{"slug":"complaints-and-refunds","title":"The angry message, and what your reply commits you to","url":"https://addaly.com/learn/ai-for-small-business/complaints-and-refunds","api":"https://addaly.com/api/lesson/ai-for-small-business/complaints-and-refunds","minutes":9,"keyIdea":"A drafted complaint reply defaults to accepting fault and offering remedies you did not authorise, so read every one for commitments alone and delete rather than soften: sympathy is free, fault and remedy are decisions you make."},{"slug":"bookings-reminders-no-shows","title":"Bookings and no-shows: the case where AI is the wrong tool","url":"https://addaly.com/learn/ai-for-small-business/bookings-reminders-no-shows","api":"https://addaly.com/api/lesson/ai-for-small-business/bookings-reminders-no-shows","minutes":9,"keyIdea":"Reminders and confirmations are rules work that a booking system does free and reliably, and a deposit beats every message; the model earns its place only on the varying parts: filling a cancelled slot, the awkward conversation, and finding the pattern in six months of bookings."},{"slug":"reviews-and-reputation","title":"Reviews: asking, answering, and the line you must not cross","url":"https://addaly.com/learn/ai-for-small-business/reviews-and-reputation","api":"https://addaly.com/api/lesson/ai-for-small-business/reviews-and-reputation","minutes":9,"keyIdea":"Fabricating reviews is prohibited in a growing number of regimes and detectable by platforms, asking only your happy customers is gating and is banned on major platforms, and the highest-value use of AI here is reading two years of reviews in bulk to find what customers value that you never advertise."},{"slug":"phone-and-voice","title":"The phone: what a voice assistant can and cannot do yet","url":"https://addaly.com/learn/ai-for-small-business/phone-and-voice","api":"https://addaly.com/api/lesson/ai-for-small-business/phone-and-voice","minutes":9,"keyIdea":"Voice adds latency, interruption and irrecoverable mis-hearing to every text problem, so it suits narrow bounded jobs with no money in them, and for most small businesses transcribed voicemail with a summary solves the real problem, which is failing to call back."},{"slug":"working-across-languages","title":"Serving customers in a language you do not read","url":"https://addaly.com/learn/ai-for-small-business/working-across-languages","api":"https://addaly.com/api/lesson/ai-for-small-business/working-across-languages","minutes":9,"keyIdea":"Translation quality drops sharply outside the best-resourced languages and fails fluently rather than visibly, so back-translate to catch gross errors, have a real speaker read ten replies before you rely on a language, and never publish permanent text in a language nobody in the business can read."},{"slug":"measuring-service-not-speed","title":"Did the customer actually get better service?","url":"https://addaly.com/learn/ai-for-small-business/measuring-service-not-speed","api":"https://addaly.com/api/lesson/ai-for-small-business/measuring-service-not-speed","minutes":8,"keyIdea":"Speed improves immediately and means little on its own, so measure first-contact resolution, repeat contact within 48 hours, enquiry-to-outcome and complaints about the service itself, and never report hours saved without the outcome rate beside it."}]},{"slug":"selling-and-being-found","title":"Selling: listings, images, marketing and price","summary":"Everything a customer sees before they buy. This block covers the copy that carries facts only you have, the photograph that has to be accurate rather than flattering, two hundred listings produced in an afternoon with a stated error bound, what changed about being found when search engines started answering questions themselves, and the one thing in the whole block that must never come out of a model: the price.","outcome":"Produce listings, images and marketing that carry facts only you have, comply with advertising and platform rules, and come with a stated bound on how many of them you actually checked.","lessons":[{"slug":"listings-quotes-proposals","title":"Listings, Menus, Quotes and Proposals","url":"https://addaly.com/learn/ai-for-small-business/listings-quotes-proposals","api":"https://addaly.com/api/lesson/ai-for-small-business/listings-quotes-proposals","minutes":8,"keyIdea":"The model writes the sentences; every number, date and promise has to come from you."},{"slug":"marketing-that-sounds-like-you","title":"Posts That Do Not Sound Generated","url":"https://addaly.com/learn/ai-for-small-business/marketing-that-sounds-like-you","api":"https://addaly.com/api/lesson/ai-for-small-business/marketing-that-sounds-like-you","minutes":7,"keyIdea":"Generated text reads generated because it is empty; fill it with what only you saw today."},{"slug":"product-photos-honestly","title":"Editing a product photo, and where editing becomes a lie","url":"https://addaly.com/learn/ai-for-small-business/product-photos-honestly","api":"https://addaly.com/api/lesson/ai-for-small-business/product-photos-honestly","minutes":9,"keyIdea":"Retouching toward what the object actually looks like is fine and retouching toward something else is a misleading advertisement, and the test is whether the customer opening the parcel would call the photograph accurate, with colour the place honest businesses most often cross the line."},{"slug":"generated-images-and-copyright","title":"Generated images: what is unsettled, and the three rules that are not","url":"https://addaly.com/learn/ai-for-small-business/generated-images-and-copyright","api":"https://addaly.com/api/lesson/ai-for-small-business/generated-images-and-copyright","minutes":10,"keyIdea":"Whether training on copyrighted images was lawful and whether you own the output are separate questions, both unresolved and answered differently by country, but never depicting a product you do not sell, never presenting a generated face as a real person, and never generating another brand's marks are settled everywhere."},{"slug":"a-catalogue-of-two-hundred","title":"Doing two hundred at once, and knowing how many to check","url":"https://addaly.com/learn/ai-for-small-business/a-catalogue-of-two-hundred","api":"https://addaly.com/api/lesson/ai-for-small-business/a-catalogue-of-two-hundred","minutes":10,"keyIdea":"Batch generation is safe when the facts come from a spreadsheet, missing fields are flagged rather than filled, and you know how many rows you checked, because zero errors in twenty samples still allows a true error rate near 15%, and in fifty it is about 6%."},{"slug":"being-found","title":"Being found, now that search engines answer questions themselves","url":"https://addaly.com/learn/ai-for-small-business/being-found","api":"https://addaly.com/api/lesson/ai-for-small-business/being-found","minutes":9,"keyIdea":"Search engines answering questions directly has cut informational traffic while transactional and local queries still end at a business, so the durable work is an accurate local listing, pages answering real customer questions with real numbers, and consistent descriptions elsewhere."},{"slug":"writing-what-persuades","title":"The objection it cannot know","url":"https://addaly.com/learn/ai-for-small-business/writing-what-persuades","api":"https://addaly.com/api/lesson/ai-for-small-business/writing-what-persuades","minutes":9,"keyIdea":"Generated copy is polite and ineffective because the model cannot know which specific hesitation is stopping your customers, so mine the objections out of your own enquiries and feed them in; and remember that changing the offer moves conversion far more than any rewrite."},{"slug":"ads-without-burning-money","title":"Automated advertising on a small budget","url":"https://addaly.com/learn/ai-for-small-business/ads-without-burning-money","api":"https://addaly.com/api/lesson/ai-for-small-business/ads-without-burning-money","minutes":9,"keyIdea":"Automated bidding needs roughly fifty conversions a month to learn, so a small business never leaves the learning phase and pays for the guessing, which is why intent-based search advertising, negative keywords and a known value per lead beat any amount of platform automation at small scale."},{"slug":"pricing-conversations","title":"Price: the one thing that never comes out of the model","url":"https://addaly.com/learn/ai-for-small-business/pricing-conversations","api":"https://addaly.com/api/lesson/ai-for-small-business/pricing-conversations","minutes":9,"keyIdea":"A model has no access to your costs, your market or your need for the work, so any price it produces is a plausible shape rather than a figure: use it for the spreadsheet formula, the tier structure and the increase letter, and never for the number itself."}]},{"slug":"money-and-the-back-office","title":"Money, paperwork and the back office","summary":"The unglamorous half of a business: spreadsheets, cash, stock, rotas, hiring, procedures and official forms. This block draws one line through all of it: the model writes the formula, the letter and the procedure, and never computes the number, decides the filing or chooses the person. And it names the places where a plain automation rule beats a model outright.","outcome":"Use AI across the paperwork of the business (formulas, cash forecasts, reorder points, supplier comparisons, rotas, job ads and procedures) without it ever becoming the place a number is computed, a record is kept, or a decision about a person is made.","lessons":[{"slug":"books-and-invoices","title":"Bookkeeping Without Handing Over Your Accounts","url":"https://addaly.com/learn/ai-for-small-business/books-and-invoices","api":"https://addaly.com/api/lesson/ai-for-small-business/books-and-invoices","minutes":8,"keyIdea":"Use it to sort and to write; never to add up, and never as the place your records live."},{"slug":"spreadsheets-without-fear","title":"Ask for the formula, never for the total","url":"https://addaly.com/learn/ai-for-small-business/spreadsheets-without-fear","api":"https://addaly.com/api/lesson/ai-for-small-business/spreadsheets-without-fear","minutes":9,"keyIdea":"A formula is structured text the model produces reliably and a total is arithmetic it produces plausibly, so ask for the formula and let the spreadsheet compute; then test it on three rows whose answers you already know, including one awkward boundary case."},{"slug":"cash-flow-on-one-page","title":"Thirteen weeks, and why profitable businesses run out of money","url":"https://addaly.com/learn/ai-for-small-business/cash-flow-on-one-page","api":"https://addaly.com/api/lesson/ai-for-small-business/cash-flow-on-one-page","minutes":9,"keyIdea":"Profit is a period and cash is a moment, and the gap between them is timing, so a thirteen-week rolling forecast, updated for fifteen minutes every week with your own figures, turns a future shortfall into a date you can act on."},{"slug":"stock-and-suppliers","title":"Reorder points, and comparing quotes that are not comparable","url":"https://addaly.com/learn/ai-for-small-business/stock-and-suppliers","api":"https://addaly.com/api/lesson/ai-for-small-business/stock-and-suppliers","minutes":9,"keyIdea":"A reorder point is lead-time demand plus safety stock and takes two minutes to calculate for the ten items that matter, and the real work in comparing supplier quotes is normalising them into the same units, where NOT STATED is often the most informative field."},{"slug":"rotas-routes-and-solvers","title":"Rotas and routes: the tools that actually solve them","url":"https://addaly.com/learn/ai-for-small-business/rotas-routes-and-solvers","api":"https://addaly.com/api/lesson/ai-for-small-business/rotas-routes-and-solvers","minutes":9,"keyIdea":"Rotas, routes and allocation are constraint problems that need a solver, not a generator, so use a spreadsheet solver or OR-Tools for the answer, use the model to elicit the constraints and explain the result, and always verify with a separate rule-by-rule check."},{"slug":"hiring-without-discriminating","title":"Hiring: where automation is most regulated","url":"https://addaly.com/learn/ai-for-small-business/hiring-without-discriminating","api":"https://addaly.com/api/lesson/ai-for-small-business/hiring-without-discriminating","minutes":10,"keyIdea":"Hiring is the most regulated place an automated decision can sit, and bias arrives through proxies that no prompt removes, so use AI for the advert, the structured interview and the scoring guide, and never to sift, rank or score the candidates themselves."},{"slug":"writing-down-what-is-in-your-head","title":"Getting the procedure out of your head and onto a page","url":"https://addaly.com/learn/ai-for-small-business/writing-down-what-is-in-your-head","api":"https://addaly.com/api/lesson/ai-for-small-business/writing-down-what-is-in-your-head","minutes":9,"keyIdea":"Speak the procedure aloud and have the transcript turned into numbered steps with GAP markers where something is missing, because the gaps are the unstated steps you no longer notice. And never let it fill them, or you get a plausible document describing a business that does not exist."},{"slug":"forms-tax-and-officialdom","title":"Official letters, forms and the line at filing","url":"https://addaly.com/learn/ai-for-small-business/forms-tax-and-officialdom","api":"https://addaly.com/api/lesson/ai-for-small-business/forms-tax-and-officialdom","minutes":9,"keyIdea":"A model is good at explaining what an official letter says and what happens if you ignore it, and unreliable on tax because the rules are jurisdictional, annual and conditional, so use it to form the precise question, then check the answer against the authority's own guidance."},{"slug":"rules-beat-models","title":"When a plain rule beats a model","url":"https://addaly.com/learn/ai-for-small-business/rules-beat-models","api":"https://addaly.com/api/lesson/ai-for-small-business/rules-beat-models","minutes":9,"keyIdea":"Anything that happens the same way every time is a rule, and rules are cheaper, instant, deterministic and impossible to talk into inventing something, so build the rules first and add a model step only where the input varies and a person checks the output."},{"slug":"working-with-your-accountant","title":"Arriving prepared, and what never to outsource","url":"https://addaly.com/learn/ai-for-small-business/working-with-your-accountant","api":"https://addaly.com/api/lesson/ai-for-small-business/working-with-your-accountant","minutes":8,"keyIdea":"You are buying a professional's accountability as much as their knowledge, so use AI on the preparation (the briefing, the questions, the organised papers, and the plain explanation afterwards) and take every answer back for confirmation rather than acting on it."}]},{"slug":"letting-it-act","title":"Letting it act: automation you can trust with the keys","summary":"Module six drew the line between a rule and a model. This block is about what happens after that line is drawn and you start letting the thing do rather than suggest. It covers the ladder of autonomy and what evidence licenses each rung, how to make a model return fields a machine can check instead of prose a person must read, what a call actually costs and how a loop becomes a bill, what an agent is underneath the marketing, and the operational plumbing (permissions, duplicate protection, logs, approval queues) that decides whether an automated business is calm or occasionally catastrophic.","outcome":"Take one repeating job from suggestion to supervised action: choose a rung of autonomy you can defend with evidence, make the model return checkable fields rather than prose, bound what a confused or hijacked run can do, guarantee that a retry cannot send the same thing twice, and reconstruct from your own log why any given action was taken three weeks after it happened.","lessons":[{"slug":"the-permission-ladder","title":"Five rungs of letting go, and what licenses each one","url":"https://addaly.com/learn/ai-for-small-business/the-permission-ladder","api":"https://addaly.com/api/lesson/ai-for-small-business/the-permission-ladder","minutes":9,"keyIdea":"The rung you are on decides how long an error lives before anybody sees it, so climb only where the action is cheaply reversible and you have evidence about errors of the kind sampling can actually detect."},{"slug":"fields-not-prose","title":"Getting fields out instead of paragraphs","url":"https://addaly.com/learn/ai-for-small-business/fields-not-prose","api":"https://addaly.com/api/lesson/ai-for-small-business/fields-not-prose","minutes":9,"keyIdea":"Asking for named fields turns an output a person must read into one a machine can check, because a missing field is an error your software can catch while a missing sentence is not."},{"slug":"what-a-call-costs","title":"What a call costs, and how a loop becomes a bill","url":"https://addaly.com/learn/ai-for-small-business/what-a-call-costs","api":"https://addaly.com/api/lesson/ai-for-small-business/what-a-call-costs","minutes":9,"keyIdea":"Usage pricing is charged per token in and out, so cost scales with how much context you resend rather than with how many tasks you do, which is why an automated loop is a financial exposure and a spending cap is not optional."},{"slug":"what-an-agent-actually-is","title":"What an agent is underneath, and why ten steps go wrong","url":"https://addaly.com/learn/ai-for-small-business/what-an-agent-actually-is","api":"https://addaly.com/api/lesson/ai-for-small-business/what-an-agent-actually-is","minutes":10,"keyIdea":"An agent is a model in a loop that can call tools and decide when to stop, so its reliability is the per-step reliability raised to the number of steps, which is why long autonomous chains fail far more often than each step suggests."},{"slug":"blast-radius","title":"Blast radius: what one confused run can reach","url":"https://addaly.com/learn/ai-for-small-business/blast-radius","api":"https://addaly.com/api/lesson/ai-for-small-business/blast-radius","minutes":9,"keyIdea":"Automations should be given the narrowest access that does the job, in their own account with their own revocable key, because the question is never whether something will go wrong but how much a single wrong run can touch."},{"slug":"the-duplicate-problem","title":"The duplicate problem, and the one line that fixes it","url":"https://addaly.com/learn/ai-for-small-business/the-duplicate-problem","api":"https://addaly.com/api/lesson/ai-for-small-business/the-duplicate-problem","minutes":8,"keyIdea":"A retry cannot tell a failed action from a slow one, so every automated action needs a key that makes doing it twice the same as doing it once."},{"slug":"a-log-you-can-read","title":"A log that answers \"why did it do that?\" three weeks later","url":"https://addaly.com/learn/ai-for-small-business/a-log-you-can-read","api":"https://addaly.com/api/lesson/ai-for-small-business/a-log-you-can-read","minutes":8,"keyIdea":"A run is only defensible if you kept the input, the output, the decision and the version of the prompt and model that produced it, because a model's output is not reproducible from the prompt alone."},{"slug":"the-approval-queue","title":"Designing the four-second approval","url":"https://addaly.com/learn/ai-for-small-business/the-approval-queue","api":"https://addaly.com/api/lesson/ai-for-small-business/the-approval-queue","minutes":8,"keyIdea":"An approval step only protects you if approving is fast and rejecting is easy, because a queue that takes too long is rubber-stamped and a rubber-stamped queue is rung five wearing a costume."},{"slug":"the-ai-employee-pitch","title":"The AI employee pitch, and the five questions that deflate it","url":"https://addaly.com/learn/ai-for-small-business/the-ai-employee-pitch","api":"https://addaly.com/api/lesson/ai-for-small-business/the-ai-employee-pitch","minutes":9,"keyIdea":"A product sold as an autonomous member of staff is the same model and tools you have just learned about, priced against a salary, so the questions that matter are how many steps a run takes, who is liable, and how you get your data out."},{"slug":"automating-away-the-noticing","title":"The thing you lose that nobody counts","url":"https://addaly.com/learn/ai-for-small-business/automating-away-the-noticing","api":"https://addaly.com/api/lesson/ai-for-small-business/automating-away-the-noticing","minutes":8,"keyIdea":"Routine work carries incidental noticing (the odd invoice, the customer who has gone quiet) and automating the work removes the noticing unless you deliberately rebuild it somewhere else."}]},{"slug":"your-own-numbers","title":"Learning from your own numbers","summary":"Every business in this course is sitting on two or three years of transactions, bookings, invoices and messages, and almost none of it has ever been looked at properly. This block is about getting a defensible answer out of it: what is usable and what is not, why cleaning is most of the work, how to make a tool compute rather than guess, why a forecast that cannot beat last year's figure is not a forecast, what a prediction about people is really telling you when the thing you are predicting is rare, the mistake that makes a model look brilliant and useless, and the point at which your data is too small to answer the question and an experiment is the honest alternative.","outcome":"Get a defensible answer out of a year of your own transactions: clean it so the counts mean something, make the tool show the code that produced every figure, beat a stated naive baseline before believing any forecast, read a classifier against its base rate rather than its accuracy, name the leak that would have flattered it, and say when the data is too small to support the question and an experiment is the honest alternative.","lessons":[{"slug":"the-data-you-already-have","title":"What you are already sitting on, and what of it is usable","url":"https://addaly.com/learn/ai-for-small-business/the-data-you-already-have","api":"https://addaly.com/api/lesson/ai-for-small-business/the-data-you-already-have","minutes":9,"keyIdea":"Your transaction records are far more useful than any dataset you could buy, but only for questions about things you recorded, and the row that matters is usually a customer over time, not a sale on a day."},{"slug":"cleaning-before-counting","title":"Why cleaning is most of the job","url":"https://addaly.com/learn/ai-for-small-business/cleaning-before-counting","api":"https://addaly.com/api/lesson/ai-for-small-business/cleaning-before-counting","minutes":9,"keyIdea":"Counts are only as meaningful as the categories underneath them, and a category spelled four ways is four categories; so the work of making numbers comparable is the analysis, not preparation for it."},{"slug":"the-analysis-that-shows-its-working","title":"Make it compute, do not let it estimate","url":"https://addaly.com/learn/ai-for-small-business/the-analysis-that-shows-its-working","api":"https://addaly.com/api/lesson/ai-for-small-business/the-analysis-that-shows-its-working","minutes":9,"keyIdea":"A tool that writes and runs code on your file produces arithmetic you can check and rerun, while a model reading the same file produces a plausible figure with no working, and the two look identical on screen."},{"slug":"the-naive-baseline","title":"The number any forecast has to beat","url":"https://addaly.com/learn/ai-for-small-business/the-naive-baseline","api":"https://addaly.com/api/lesson/ai-for-small-business/the-naive-baseline","minutes":9,"keyIdea":"A forecast is only worth having if it beats the simplest possible guess on data it has never seen, so you state the naive baseline and the holdout period before you build anything."},{"slug":"seasonality-and-the-events-register","title":"Patterns you can name, and the promotion that poisons the history","url":"https://addaly.com/learn/ai-for-small-business/seasonality-and-the-events-register","api":"https://addaly.com/api/lesson/ai-for-small-business/seasonality-and-the-events-register","minutes":8,"keyIdea":"Most of the variation in small-business demand is explained by things you already know the names of, and an unrecorded promotion or closure turns a knowable pattern into noise for every analysis you do afterwards."},{"slug":"predicting-who-leaves","title":"Predicting something rare, and why accuracy lies","url":"https://addaly.com/learn/ai-for-small-business/predicting-who-leaves","api":"https://addaly.com/api/lesson/ai-for-small-business/predicting-who-leaves","minutes":10,"keyIdea":"When the thing you are predicting is rare, a model can be 95% accurate by never predicting it at all, so judge it by how many of its warnings were right and how many real cases it caught, at a threshold set by what the warning costs you."},{"slug":"leakage-the-flattering-mistake","title":"The mistake that makes a model look brilliant","url":"https://addaly.com/learn/ai-for-small-business/leakage-the-flattering-mistake","api":"https://addaly.com/api/lesson/ai-for-small-business/leakage-the-flattering-mistake","minutes":9,"keyIdea":"A model that scores far better than seems plausible is usually reading a column that would not exist at the moment of prediction, so the test is whether every input would have been available before the thing you are predicting happened."},{"slug":"automl-and-what-it-hides","title":"AutoML: what it genuinely does, and what it cannot do for you","url":"https://addaly.com/learn/ai-for-small-business/automl-and-what-it-hides","api":"https://addaly.com/api/lesson/ai-for-small-business/automl-and-what-it-hides","minutes":9,"keyIdea":"AutoML automates model selection and tuning, which was never the hard part, and leaves you the whole of the hard part: the question, the definition, the columns, and whether the score is real."},{"slug":"small-numbers-and-superstition","title":"When your data is too small, and what to do instead","url":"https://addaly.com/learn/ai-for-small-business/small-numbers-and-superstition","api":"https://addaly.com/api/lesson/ai-for-small-business/small-numbers-and-superstition","minutes":9,"keyIdea":"Small samples produce large swings by chance and a busy owner tests many ideas against the same data, so most patterns found this way are noise, which is why a deliberate change measured forwards beats a pattern discovered backwards."}]},{"slug":"cost-risk-and-the-long-run","title":"What it costs, what it risks, and what happens in a year","summary":"Everything so far has been about getting the work done. This block is about still being glad you did it twelve months later: pricing each tool against what it actually replaces, understanding what a free tier takes instead of money, writing the one page of rules your staff need, handling the fact that AI has made fraud against small businesses meaningfully better, keeping access straight when somebody leaves, telling customers the truth about where a machine is answering, knowing what you have warranted to your own clients, surviving a vendor's disappearance, and going back at six months to the figures you wrote down at the start.","outcome":"Run the AI side of a business for a year without a surprise: price every tool against what it replaces rather than against zero, keep customer data inside terms you have actually read, verify a payment instruction in a way a cloned voice cannot defeat, keep working when a member of staff or a vendor disappears, say in one sentence where a customer is dealing with a machine, and re-measure at six months against the baseline you recorded at the start.","lessons":[{"slug":"what-it-costs","title":"What It Costs, and Keeping It Near Zero","url":"https://addaly.com/learn/ai-for-small-business/what-it-costs","api":"https://addaly.com/api/lesson/ai-for-small-business/what-it-costs","minutes":8,"keyIdea":"Price every tool against the hours or the cheaper tool it replaces, never against zero."},{"slug":"the-bill-that-creeps","title":"The bill that creeps, and the quarterly hour that stops it","url":"https://addaly.com/learn/ai-for-small-business/the-bill-that-creeps","api":"https://addaly.com/api/lesson/ai-for-small-business/the-bill-that-creeps","minutes":8,"keyIdea":"Per-seat subscriptions grow by addition and never by subtraction, so the cost of AI in a small business is decided by an audit nobody schedules rather than by any purchasing decision."},{"slug":"free-and-what-it-costs","title":"Free tiers, and what they take instead of money","url":"https://addaly.com/learn/ai-for-small-business/free-and-what-it-costs","api":"https://addaly.com/api/lesson/ai-for-small-business/free-and-what-it-costs","minutes":9,"keyIdea":"A free tier is paid for in data rights, rate limits or a smaller model, and which of the three it is determines whether it is fine for your marketing copy and unacceptable for your client files."},{"slug":"customer-data-and-the-law","title":"Your Customers' Data, and the Law Where You Are","url":"https://addaly.com/learn/ai-for-small-business/customer-data-and-the-law","api":"https://addaly.com/api/lesson/ai-for-small-business/customer-data-and-the-law","minutes":9,"keyIdea":"Strip the data down, check and date the settings, and tell people in one honest sentence: you stay responsible either way."},{"slug":"one-page-ai-policy","title":"The one page your staff actually need","url":"https://addaly.com/learn/ai-for-small-business/one-page-ai-policy","api":"https://addaly.com/api/lesson/ai-for-small-business/one-page-ai-policy","minutes":8,"keyIdea":"Staff will use AI whether or not you have a policy, so the useful document names the approved tool and the three things that must never be pasted, rather than attempting a ban that only removes your visibility."},{"slug":"security-got-harder","title":"Why fraud against small businesses got better","url":"https://addaly.com/learn/ai-for-small-business/security-got-harder","api":"https://addaly.com/api/lesson/ai-for-small-business/security-got-harder","minutes":9,"keyIdea":"Generative tools removed the cues small businesses relied on to spot fraud (bad grammar, a wrong voice, a generic message) so verification has to move to a channel the attacker does not control."},{"slug":"when-somebody-leaves","title":"The week somebody leaves","url":"https://addaly.com/learn/ai-for-small-business/when-somebody-leaves","api":"https://addaly.com/api/lesson/ai-for-small-business/when-somebody-leaves","minutes":8,"keyIdea":"AI work concentrates in one person's personal accounts and chat history, so a departure removes the tooling, the accumulated knowledge and your access to the customer data in it unless the accounts were the business's from the start."},{"slug":"telling-customers","title":"Saying where the machine is, in one sentence","url":"https://addaly.com/learn/ai-for-small-business/telling-customers","api":"https://addaly.com/api/lesson/ai-for-small-business/telling-customers","minutes":9,"keyIdea":"Disclosure is settled where a customer might otherwise believe they are talking to a person and genuinely unsettled elsewhere, so the practical rule is to disclose the interaction rather than to label every sentence."},{"slug":"what-you-warrant","title":"What you have already promised your clients","url":"https://addaly.com/learn/ai-for-small-business/what-you-warrant","api":"https://addaly.com/api/lesson/ai-for-small-business/what-you-warrant","minutes":8,"keyIdea":"Your own contracts and professional rules may restrict AI use before any AI law does, and confidentiality clauses written years ago frequently forbid sending client material to a third-party service."},{"slug":"the-vendor-disappears","title":"When the tool goes away","url":"https://addaly.com/learn/ai-for-small-business/the-vendor-disappears","api":"https://addaly.com/api/lesson/ai-for-small-business/the-vendor-disappears","minutes":8,"keyIdea":"AI products are discontinued, acquired and repriced at a rate that makes dependence on any single one a live operational risk, so the test is how long it would take you to work without it."},{"slug":"the-two-week-trial","title":"The Cheap Tool, and an Honest Two Weeks","url":"https://addaly.com/learn/ai-for-small-business/the-two-week-trial","api":"https://addaly.com/api/lesson/ai-for-small-business/the-two-week-trial","minutes":9,"keyIdea":"Measure the week before, name the kill line in advance, and count the time spent fixing the output."},{"slug":"six-months-later","title":"Going back to the numbers you wrote down","url":"https://addaly.com/learn/ai-for-small-business/six-months-later","api":"https://addaly.com/api/lesson/ai-for-small-business/six-months-later","minutes":9,"keyIdea":"The trial measured a fortnight under attention, so the only honest verdict comes from re-measuring six months later against the same baseline, when the novelty has gone and the tool is being used the way it will actually be used."}]}]},{"slug":"ai-for-students","title":"AI for Students","tagline":"How to use these tools and still end up knowing things.","description":"A course for school and university students on using AI without losing the ability to think. It covers what actually happens to memory when the model does the work, how to get unstuck rather than finished, how to make it quiz you, how to check a citation exists, writing with it without losing your voice, why detectors do not work, and revision that survives an exam hall with no AI.","level":"beginner","track":"work","url":"https://addaly.com/learn/ai-for-students","lessons":73,"minutes":597,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-for-students.pdf","pages":420,"bytes":4738970,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-for-students.pdf","cover":"https://addaly.com/textbooks/look/ai-for-students/1.webp?v=2026-10-07-4738970"},"film":{"url":"https://addaly.com/learn/ai-for-students#film","video":"https://addaly.com/videos/ai-for-students.mp4","captions":"https://addaly.com/videos/ai-for-students.vtt","poster":"https://addaly.com/videos/ai-for-students.jpg","seconds":883,"bytes":102437297,"low":null,"lowBytes":null,"narration":"synthetic voice"},"modules":[{"slug":"what-the-machine-is-doing","title":"What the machine is doing when it helps you","summary":"Before any study technique, the mechanism: what a language model computes, why it sounds certain when it is wrong, what that does to your memory, and which tool actually belongs to which job.","outcome":"Explain what a language model computes when it answers you, predict from that mechanism which study tasks it will help with and which it will quietly damage, and pick the right free tool for a given piece of schoolwork instead of defaulting to a chatbot.","lessons":[{"slug":"two-kinds-of-help","title":"Two Kinds of Help","url":"https://addaly.com/learn/ai-for-students/two-kinds-of-help","api":"https://addaly.com/api/lesson/ai-for-students/two-kinds-of-help","minutes":7,"keyIdea":"After a study session, ask what changed: the document, or you."},{"slug":"what-happens-to-your-memory","title":"What Happens To Your Memory","url":"https://addaly.com/learn/ai-for-students/what-happens-to-your-memory","api":"https://addaly.com/api/lesson/ai-for-students/what-happens-to-your-memory","minutes":8,"keyIdea":"The tutor that gave answers raised practice scores and lowered exam scores; the one that gave hints did neither harm."},{"slug":"what-a-model-actually-does","title":"What it is actually doing","url":"https://addaly.com/learn/ai-for-students/what-a-model-actually-does","api":"https://addaly.com/api/lesson/ai-for-students/what-a-model-actually-does","minutes":9,"keyIdea":"A language model predicts the next token from a compressed statistical impression of its training text, so it is strong on repeated general material, weak on specific rare facts, and blind to the letters inside words."},{"slug":"why-it-invents-things","title":"Why it invents things, and when","url":"https://addaly.com/learn/ai-for-students/why-it-invents-things","api":"https://addaly.com/api/lesson/ai-for-students/why-it-invents-things","minutes":9,"keyIdea":"Fabrication is the model doing its job (producing plausible text) so risk concentrates in names, numbers, dates and references, not in the general explanation around them."},{"slug":"the-fluency-trap","title":"The fluency trap","url":"https://addaly.com/learn/ai-for-students/the-fluency-trap","api":"https://addaly.com/api/lesson/ai-for-students/the-fluency-trap","minutes":8,"keyIdea":"Clarity produces the feeling of understanding before any of the work that earns it, so the only honest test of an AI explanation is whether you can reproduce it from a blank page afterwards."},{"slug":"context-limits-and-forgetting","title":"Context, limits, and why it forgets","url":"https://addaly.com/learn/ai-for-students/context-limits-and-forgetting","api":"https://addaly.com/api/lesson/ai-for-students/context-limits-and-forgetting","minutes":8,"keyIdea":"Everything the model can use must fit in a fixed token window, it attends least to the middle of a long one, and quotas are measured in the same tokens, so pasting less and starting fresh chats improves answers and stretches a free tier at once."},{"slug":"which-tool-for-which-job","title":"Which tool for which job","url":"https://addaly.com/learn/ai-for-students/which-tool-for-which-job","api":"https://addaly.com/api/lesson/ai-for-students/which-tool-for-which-job","minutes":9,"keyIdea":"Match the tool to the failure you can afford: deterministic tools for arithmetic, existence and data, and the model for explanation, phrasing, and deciding which deterministic tool to reach for."},{"slug":"getting-set-up-free","title":"Getting set up for nothing","url":"https://addaly.com/learn/ai-for-students/getting-set-up-free","api":"https://addaly.com/api/lesson/ai-for-students/getting-set-up-free","minutes":8,"keyIdea":"Free tiers, Hugging Face Spaces, Colab, and a small local model on Ollama cover almost everything in this course, so the real skill is spending a limited allowance on the questions that are actually hard."},{"slug":"a-working-agreement-with-yourself","title":"A working agreement with yourself","url":"https://addaly.com/learn/ai-for-students/a-working-agreement-with-yourself","api":"https://addaly.com/api/lesson/ai-for-students/a-working-agreement-with-yourself","minutes":7,"keyIdea":"Write down in advance the five or six capabilities you will never outsource, your disclosure sentence, your verification rule and your evidence habit, because the decision made calmly is the one that holds at midnight."}]},{"slug":"asking-well","title":"Asking well","summary":"The difference between a useless answer and a useful one is usually the question. Task, level, constraint, form; the source supplied rather than remembered; the follow-up that finds the weak joint.","outcome":"Write a study prompt that states the task, the level, the constraints and the required form, ground it in a source you supply rather than the model's memory, and diagnose from a bad answer whether the fault was the model's or your instruction's.","lessons":[{"slug":"anatomy-of-a-study-prompt","title":"The anatomy of a study prompt","url":"https://addaly.com/learn/ai-for-students/anatomy-of-a-study-prompt","api":"https://addaly.com/api/lesson/ai-for-students/anatomy-of-a-study-prompt","minutes":9,"keyIdea":"State level, task, constraints and form, include your current wrong understanding, and when an answer disappoints work out which of those four you left out."},{"slug":"give-it-the-source","title":"Give it the source","url":"https://addaly.com/learn/ai-for-students/give-it-the-source","api":"https://addaly.com/api/lesson/ai-for-students/give-it-the-source","minutes":9,"keyIdea":"Paste the smallest span of the real source rather than relying on the model's memory, then check the summary against the passage instead of checking whether the fact exists."},{"slug":"ask-for-the-working","title":"Ask for the working, then check it","url":"https://addaly.com/learn/ai-for-students/ask-for-the-working","api":"https://addaly.com/api/lesson/ai-for-students/ask-for-the-working","minutes":8,"keyIdea":"Ask for steps because they improve accuracy and give you something auditable, then audit with units, magnitude and the one difficult joint, never treating the stated reasoning as proof that it is what produced the answer."},{"slug":"follow-ups-that-find-the-weak-joint","title":"Follow-ups that find the weak joint","url":"https://addaly.com/learn/ai-for-students/follow-ups-that-find-the-weak-joint","api":"https://addaly.com/api/lesson/ai-for-students/follow-ups-that-find-the-weak-joint","minutes":8,"keyIdea":"Replace \"are you sure\" with follow-ups that produce checkable material (what would make this wrong, argue the opposite, what would a marker criticise) and test stability by re-asking cold in a fresh chat."},{"slug":"explain-it-at-three-levels","title":"Explain it at three levels","url":"https://addaly.com/learn/ai-for-students/explain-it-at-three-levels","api":"https://addaly.com/api/lesson/ai-for-students/explain-it-at-three-levels","minutes":8,"keyIdea":"Ask for the same idea below your level, at your level, and above it: the third pass names which parts of what you were taught are teaching approximations, and that is usually what separates a good answer from an excellent one."},{"slug":"conversations-have-a-shape","title":"Conversations have a shape","url":"https://addaly.com/learn/ai-for-students/conversations-have-a-shape","api":"https://addaly.com/api/lesson/ai-for-students/conversations-have-a-shape","minutes":8,"keyIdea":"A conversation is a growing block of text the model re-reads every turn, so drift, anchoring and agreeableness accumulate: carry a short summary into a fresh chat instead of arguing with a long one."},{"slug":"what-not-to-paste","title":"What not to paste","url":"https://addaly.com/learn/ai-for-students/what-not-to-paste","api":"https://addaly.com/api/lesson/ai-for-students/what-not-to-paste","minutes":9,"keyIdea":"You can consent to a service handling your own data but never somebody else's, so placement, participant and classmate material stays out of the window regardless of privacy settings."},{"slug":"diagnosing-a-bad-answer","title":"Diagnosing a bad answer","url":"https://addaly.com/learn/ai-for-students/diagnosing-a-bad-answer","api":"https://addaly.com/api/lesson/ai-for-students/diagnosing-a-bad-answer","minutes":8,"keyIdea":"Bad answers have five distinguishable causes (underspecified question, missing material, genuine error, degraded conversation, wrong tool) and each has its own fix, so diagnose before you reword."},{"slug":"prompts-worth-keeping","title":"Prompts worth keeping","url":"https://addaly.com/learn/ai-for-students/prompts-worth-keeping","api":"https://addaly.com/api/lesson/ai-for-students/prompts-worth-keeping","minutes":7,"keyIdea":"Keep six to ten prompts you actually reuse in one plain file, and note that the clauses doing the real work are the restrictions: one at a time, do not rewrite, do not help me."}]},{"slug":"study-that-raises-difficulty","title":"Study that raises the difficulty","summary":"The techniques with the strongest evidence behind them all feel worse than the ones that do not work. Hint ladders, retrieval, spacing, interleaving and self-explanation, rebuilt around a tool that will otherwise hand you the answer.","outcome":"Run a study session in which the assistant raises the difficulty rather than lowering it (a hint ladder instead of a solution, retrieval before review, spaced and interleaved practice, explanation produced by you) and demonstrate afterwards what you can do with the window closed.","lessons":[{"slug":"getting-unstuck-not-finished","title":"Getting Unstuck, Not Getting Finished","url":"https://addaly.com/learn/ai-for-students/getting-unstuck-not-finished","api":"https://addaly.com/api/lesson/ai-for-students/getting-unstuck-not-finished","minutes":8,"keyIdea":"Ask for the smallest hint that lets you continue, then finish it yourself."},{"slug":"make-it-quiz-you","title":"Make It Quiz You","url":"https://addaly.com/learn/ai-for-students/make-it-quiz-you","api":"https://addaly.com/api/lesson/ai-for-students/make-it-quiz-you","minutes":7,"keyIdea":"A model that asks you questions is worth more than one that answers them."},{"slug":"building-a-hint-ladder","title":"Building a hint ladder","url":"https://addaly.com/learn/ai-for-students/building-a-hint-ladder","api":"https://addaly.com/api/lesson/ai-for-students/building-a-hint-ladder","minutes":8,"keyIdea":"Take the smallest hint that lets you continue, and when checking work ask only for the number of the first wrong line: the gap between locating an error and being told the fix is where the learning is."},{"slug":"retrieval-before-review","title":"Retrieval before review","url":"https://addaly.com/learn/ai-for-students/retrieval-before-review","api":"https://addaly.com/api/lesson/ai-for-students/retrieval-before-review","minutes":9,"keyIdea":"Write from a blank page before you open anything, because the gap that matters is what you were confident about and had wrong, and no fluent explanation will ever show you that."},{"slug":"spacing-and-interleaving","title":"Spacing and interleaving","url":"https://addaly.com/learn/ai-for-students/spacing-and-interleaving","api":"https://addaly.com/api/lesson/ai-for-students/spacing-and-interleaving","minutes":8,"keyIdea":"Forgetting a little between sessions is the ingredient that makes spacing work, and mixing problem types without labelling them is what trains the recognition an exam actually tests."},{"slug":"explaining-it-back","title":"Explaining it back","url":"https://addaly.com/learn/ai-for-students/explaining-it-back","api":"https://addaly.com/api/lesson/ai-for-students/explaining-it-back","minutes":8,"keyIdea":"Explaining from memory to a listener who refuses to help produces the learning; the most useful feedback to ask for is which parts you have memorised correctly without understanding."},{"slug":"worked-examples-and-fading","title":"Worked examples, and when to stop using them","url":"https://addaly.com/learn/ai-for-students/worked-examples-and-fading","api":"https://addaly.com/api/lesson/ai-for-students/worked-examples-and-fading","minutes":8,"keyIdea":"Worked examples help beginners and hinder people who already have the method, so fade from full example to blank problem by removing steps from the end, and cap how many examples you read before moving on."},{"slug":"a-session-that-works","title":"A study session that works","url":"https://addaly.com/learn/ai-for-students/a-session-that-works","api":"https://addaly.com/api/lesson/ai-for-students/a-session-that-works","minutes":9,"keyIdea":"Bookend every session with a blank page, cap the assisted block with a timer, and close with three lines saying what you can now do unaided and what you cannot."},{"slug":"study-groups-and-peer-explanation","title":"Study groups, with and without the machine","url":"https://addaly.com/learn/ai-for-students/study-groups-and-peer-explanation","api":"https://addaly.com/api/lesson/ai-for-students/study-groups-and-peer-explanation","minutes":8,"keyIdea":"Answer alone, argue with someone who disagreed, then check the source. A group that consults the assistant first has an answer and stops producing the reasoning that the exercise exists to train."},{"slug":"proving-it-to-yourself","title":"Proving it to yourself","url":"https://addaly.com/learn/ai-for-students/proving-it-to-yourself","api":"https://addaly.com/api/lesson/ai-for-students/proving-it-to-yourself","minutes":8,"keyIdea":"Predict your score before you check it, and record specific failures rather than grades: the average gap between what you predict and what you get is the most useful number you can have about yourself."}]},{"slug":"subject-by-subject","title":"Subject by subject","summary":"The same tool behaves differently in maths, code, the lab sciences, the essay subjects and language learning. Each has a characteristic failure, and each has one check that catches it.","outcome":"Name the characteristic failure mode of an AI assistant in a given subject (arithmetic in maths, plausible invalid steps in proof, code that runs and is wrong, invented quotations in history, fossilised errors in language learning) and apply the specific check that catches it, using a free tool where a deterministic one is required.","lessons":[{"slug":"maths-and-arithmetic","title":"Maths, and the arithmetic problem","url":"https://addaly.com/learn/ai-for-students/maths-and-arithmetic","api":"https://addaly.com/api/lesson/ai-for-students/maths-and-arithmetic","minutes":9,"keyIdea":"Digits are tokenised without place value, so arithmetic degrades with length while looking perfectly normal: take the method from the model and the number from SymPy, Maxima or a code interpreter."},{"slug":"proofs-and-reasoning","title":"Proofs, and the step that looks fine","url":"https://addaly.com/learn/ai-for-students/proofs-and-reasoning","api":"https://addaly.com/api/lesson/ai-for-students/proofs-and-reasoning","minutes":8,"keyIdea":"Generated proofs fail by making one unjustified move inside otherwise correct working, so read upward from the conclusion asking what licenses each step, and check the seven standard illegal moves."},{"slug":"programming-and-cs","title":"Code that runs and is wrong","url":"https://addaly.com/learn/ai-for-students/programming-and-cs","api":"https://addaly.com/api/lesson/ai-for-students/programming-and-cs","minutes":9,"keyIdea":"Generated code that runs is not code that is correct: read every line, test the boundary case, refuse rewrites when debugging, and write the tests yourself from the specification."},{"slug":"lab-sciences-and-units","title":"The lab sciences, and the dimension check","url":"https://addaly.com/learn/ai-for-students/lab-sciences-and-units","api":"https://addaly.com/api/lesson/ai-for-students/lab-sciences-and-units","minutes":8,"keyIdea":"Carry units through every line as algebra and the dimensions will catch most wrong formulae instantly; then apply significant figures and uncertainty yourself, because those are the parts a lab report is actually marked on."},{"slug":"history-and-sources","title":"History, and the quotation that was never said","url":"https://addaly.com/learn/ai-for-students/history-and-sources","api":"https://addaly.com/api/lesson/ai-for-students/history-and-sources","minutes":8,"keyIdea":"History runs on exactly the specifics a model is weakest at, so trace every quotation to a primary source: a phrase search in Google Books restricted by date will expose most invented attributions in two minutes."},{"slug":"literature-and-close-reading","title":"Literature, and the text it half remembers","url":"https://addaly.com/learn/ai-for-students/literature-and-close-reading","api":"https://addaly.com/api/lesson/ai-for-students/literature-and-close-reading","minutes":8,"keyIdea":"Generated quotations from literary works are usually near-misses, and an argument built on words that are not in the book is worth nothing: read and notice first, consult the critical consensus only afterwards."},{"slug":"learning-a-language","title":"Languages, where it is genuinely excellent","url":"https://addaly.com/learn/ai-for-students/learning-a-language","api":"https://addaly.com/api/lesson/ai-for-students/learning-a-language","minutes":9,"keyIdea":"The tool is genuinely excellent for input, explanation and drilling, but an agreeable partner that understands your errors without flagging them will fossilise them: demand a correction list after every message."},{"slug":"statistics-for-coursework","title":"Statistics for coursework","url":"https://addaly.com/learn/ai-for-students/statistics-for-coursework","api":"https://addaly.com/api/lesson/ai-for-students/statistics-for-coursework","minutes":9,"keyIdea":"Give the model the design, the measurement level, the sample sizes and the real question, then run the test in jamovi or R and plot the data before you trust any number, because most analysis errors are visible in the plot."},{"slug":"essays-across-subjects","title":"The essay subjects, and what a marker is reading for","url":"https://addaly.com/learn/ai-for-students/essays-across-subjects","api":"https://addaly.com/api/lesson/ai-for-students/essays-across-subjects","minutes":8,"keyIdea":"Generated essays fail identically across subjects (uncontestable thesis, generic evidence, straw objection, reorderable paragraphs) so own the outline, and check every case, statute or named source against a free primary database."}]},{"slug":"research-and-evidence","title":"Research, sources and evidence","summary":"How a citation gets invented, how to find the real paper for nothing, how to read one quickly, and how to say what level of evidence a claim actually rests on.","outcome":"Take a claim from a model to a verifiable primary source using free tools, judge what strength of evidence that source carries, and build a bibliography in which you have opened every item.","lessons":[{"slug":"research-and-real-sources","title":"Research, And Sources That Exist","url":"https://addaly.com/learn/ai-for-students/research-and-real-sources","api":"https://addaly.com/api/lesson/ai-for-students/research-and-real-sources","minutes":8,"keyIdea":"Never cite a source you have not opened. Asking the model if it is real does not count."},{"slug":"how-a-citation-gets-invented","title":"How a citation gets invented","url":"https://addaly.com/learn/ai-for-students/how-a-citation-gets-invented","api":"https://addaly.com/api/lesson/ai-for-students/how-a-citation-gets-invented","minutes":8,"keyIdea":"Citations are a rigid form that a predictor reproduces easily, so plausible fabrications and real-paper hybrids both occur: resolve the DOI to check existence, and read the page to check support."},{"slug":"finding-the-paper-free","title":"Finding the paper, for nothing","url":"https://addaly.com/learn/ai-for-students/finding-the-paper-free","api":"https://addaly.com/api/lesson/ai-for-students/finding-the-paper-free","minutes":9,"keyIdea":"Library proxy, Unpaywall, Scholar's all-versions, preprint servers, PMC and emailing the author will reach almost any paper free; and the page number you record while reading is what turns a citation into evidence."},{"slug":"reading-a-paper-fast","title":"Reading a paper without reading all of it","url":"https://addaly.com/learn/ai-for-students/reading-a-paper-fast","api":"https://addaly.com/api/lesson/ai-for-students/reading-a-paper-fast","minutes":8,"keyIdea":"Read in the order abstract, figures, aim, discussion, limitations, and check any claim that matters against the results section rather than the abstract, because abstracts systematically overstate."},{"slug":"what-counts-as-evidence","title":"What counts as evidence","url":"https://addaly.com/learn/ai-for-students/what-counts-as-evidence","api":"https://addaly.com/api/lesson/ai-for-students/what-counts-as-evidence","minutes":8,"keyIdea":"Match the claim to the design: causal language requires randomisation, and comparing response rates across two separate trials is invalid however natural it reads."},{"slug":"search-grounded-answers","title":"When it searches the web","url":"https://addaly.com/learn/ai-for-students/search-grounded-answers","api":"https://addaly.com/api/lesson/ai-for-students/search-grounded-answers","minutes":8,"keyIdea":"Retrieval replaces invented sources with real sources attached to claims they do not make, so the check is unchanged: open the link, find the sentence, and follow reporting back to the original."},{"slug":"notes-that-survive","title":"Notes that survive the term","url":"https://addaly.com/learn/ai-for-students/notes-that-survive","api":"https://addaly.com/api/lesson/ai-for-students/notes-that-survive","minutes":8,"keyIdea":"Compression is the work, so an AI summary is a note nobody encoded: write in your own words, keep a confusion section, and use the model to interrogate your notes rather than to produce them."},{"slug":"building-a-bibliography","title":"Building a bibliography you can defend","url":"https://addaly.com/learn/ai-for-students/building-a-bibliography","api":"https://addaly.com/api/lesson/ai-for-students/building-a-bibliography","minutes":7,"keyIdea":"Every line of a reference list asserts that the work exists, that you read it, and that it supports the claim, so a model can be cited as a method you used, never as evidence for a fact."},{"slug":"misinformation-and-what-you-share","title":"Misinformation, and what you pass on","url":"https://addaly.com/learn/ai-for-students/misinformation-and-what-you-share","api":"https://addaly.com/api/lesson/ai-for-students/misinformation-and-what-you-share","minutes":8,"keyIdea":"Verify provenance rather than appearance (reverse image search, the primary record, the date, and lateral reading about who runs the page) because generated media can no longer be judged by looking at it."}]},{"slug":"writing-and-voice","title":"Writing, and keeping your voice","summary":"Where in the writing process the thinking actually happens, how to get help at the points that do not displace it, and what makes prose recognisably yours.","outcome":"Produce written work whose argument, structure and sentences are yours, use assistance at the specific points that do not displace your thinking, and show a process record demonstrating how the piece was made.","lessons":[{"slug":"writing-with-it","title":"Writing With It Without Losing Your Voice","url":"https://addaly.com/learn/ai-for-students/writing-with-it","api":"https://addaly.com/api/lesson/ai-for-students/writing-with-it","minutes":8,"keyIdea":"If the first draft is not yours, everything after is editing someone else's argument."},{"slug":"where-the-thinking-happens","title":"Where the thinking happens","url":"https://addaly.com/learn/ai-for-students/where-the-thinking-happens","api":"https://addaly.com/api/lesson/ai-for-students/where-the-thinking-happens","minutes":8,"keyIdea":"Ideas are finished by being ordered, so assistance at the claim and structure stages removes the thinking itself: the outline is the essay, and everything downstream can be helped safely."},{"slug":"the-blank-page","title":"The blank page, without outsourcing it","url":"https://addaly.com/learn/ai-for-students/the-blank-page","api":"https://addaly.com/api/lesson/ai-for-students/the-blank-page","minutes":8,"keyIdea":"Blank-page paralysis has four distinct causes with four different fixes, and the request that removes the essay is the short one: a suggested thesis is fifteen words and it is the entire piece."},{"slug":"structure-and-argument","title":"Structure that carries an argument","url":"https://addaly.com/learn/ai-for-students/structure-and-argument","api":"https://addaly.com/api/lesson/ai-for-students/structure-and-argument","minutes":8,"keyIdea":"Shuffle your paragraphs (an argument breaks when reordered and a list does not) and the marks live in analysis and in stating the objection at its strongest."},{"slug":"editing-your-own-prose","title":"Editing your own prose","url":"https://addaly.com/learn/ai-for-students/editing-your-own-prose","api":"https://addaly.com/api/lesson/ai-for-students/editing-your-own-prose","minutes":8,"keyIdea":"Accept only changes you can explain, ask for diagnosis rather than replacement, and reject the standard drift towards nominalisation, hedging and abstraction that makes edited prose lifeless."},{"slug":"your-voice-measurably","title":"Your voice, measurably","url":"https://addaly.com/learn/ai-for-students/your-voice-measurably","api":"https://addaly.com/api/lesson/ai-for-students/your-voice-measurably","minutes":8,"keyIdea":"Voice is the visible record of a person making choices (which example, which objection, which concession) and it is what markers reward, so build a corpus of your own writing to compare drafts against."},{"slug":"feedback-that-is-useful","title":"Feedback that is actually useful","url":"https://addaly.com/learn/ai-for-students/feedback-that-is-useful","api":"https://addaly.com/api/lesson/ai-for-students/feedback-that-is-useful","minutes":8,"keyIdea":"Paste the mark scheme, name a specific hostile reader, forbid rewriting and encouragement, and take feedback on structure before sentences; then use the comments on your last five assignments to find the fault that repeats."},{"slug":"presentations-and-visuals","title":"Presentations, posters and visuals","url":"https://addaly.com/learn/ai-for-students/presentations-and-visuals","api":"https://addaly.com/api/lesson/ai-for-students/presentations-and-visuals","minutes":8,"keyIdea":"Write the talk first and let slides follow from it, and never generate an image that carries information: a generated diagram is a picture of what a diagram looks like, with plausible wrong labels."},{"slug":"group-work-and-shared-rules","title":"Group work, and shared rules","url":"https://addaly.com/learn/ai-for-students/group-work-and-shared-rules","api":"https://addaly.com/api/lesson/ai-for-students/group-work-and-shared-rules","minutes":7,"keyIdea":"Agree the group's AI rule in writing before the first session, work in a shared document with version history, and require each person to confirm they opened every source in their own section."}]},{"slug":"rules-honesty-record","title":"Rules, honesty and the record","summary":"What your institution's policy actually says, how to disclose, why detectors are not evidence, what to do if you are accused, and the process record that protects you before anybody asks.","outcome":"Read your institution's AI policy and place a given piece of work on the permitted, disclosed or prohibited scale, write a disclosure statement, explain from its mechanism why a detector score is not evidence, and keep a process record that would survive an academic-integrity hearing.","lessons":[{"slug":"the-rules-and-the-detectors","title":"The Rules, And Why Detectors Do Not Work","url":"https://addaly.com/learn/ai-for-students/the-rules-and-the-detectors","api":"https://addaly.com/api/lesson/ai-for-students/the-rules-and-the-detectors","minutes":9,"keyIdea":"Detectors measure how typical your writing is, not who produced it; keep a process record instead."},{"slug":"reading-your-actual-policy","title":"Reading your actual policy","url":"https://addaly.com/learn/ai-for-students/reading-your-actual-policy","api":"https://addaly.com/api/lesson/ai-for-students/reading-your-actual-policy","minutes":8,"keyIdea":"Find the module handbook, the brief and the integrity policy, download them, and where they are silent ask in writing and keep the reply, because several policies make non-disclosure itself the offence."},{"slug":"writing-a-disclosure","title":"Writing a disclosure that helps you","url":"https://addaly.com/learn/ai-for-students/writing-a-disclosure","api":"https://addaly.com/api/lesson/ai-for-students/writing-a-disclosure","minutes":8,"keyIdea":"A disclosure is a factual account, not a confession: name the tool, the stage, what happened to the output, and state that you obtained and read every source, because unread sources is the actual offence in most cases."},{"slug":"how-detectors-work","title":"How detectors work, and why they cannot","url":"https://addaly.com/learn/ai-for-students/how-detectors-work","api":"https://addaly.com/api/lesson/ai-for-students/how-detectors-work","minutes":9,"keyIdea":"Detectors measure perplexity and burstiness (how typical the writing is) so they systematically misclassify second-language and formulaic writers, and the base rate means roughly half of flagged essays can be innocent even with generous accuracy assumptions."},{"slug":"the-process-record","title":"The process record","url":"https://addaly.com/learn/ai-for-students/the-process-record","api":"https://addaly.com/api/lesson/ai-for-students/the-process-record","minutes":8,"keyIdea":"A process record cannot be created after an accusation, which is exactly why it works: write in a tool with version history on, never paste a finished draft into an empty document, and photograph paper drafts."},{"slug":"if-you-are-accused","title":"If you are accused","url":"https://addaly.com/learn/ai-for-students/if-you-are-accused","api":"https://addaly.com/api/lesson/ai-for-students/if-you-are-accused","minutes":8,"keyIdea":"An allegation is not a finding: do not confess to what you did not do, get your students' union adviser involved before responding at length, and remember that being able to discuss your own work in detail is the strongest evidence there is."},{"slug":"where-the-line-really-is","title":"Where the line really is","url":"https://addaly.com/learn/ai-for-students/where-the-line-really-is","api":"https://addaly.com/api/lesson/ai-for-students/where-the-line-really-is","minutes":8,"keyIdea":"Ask what the assessment is trying to measure and whether your use interferes with measuring it: a test that generalises to tools that do not exist yet, unlike any list of rules."},{"slug":"accessibility-and-fairness","title":"Accessibility, fairness and who these rules fall on","url":"https://addaly.com/learn/ai-for-students/accessibility-and-fairness","api":"https://addaly.com/api/lesson/ai-for-students/accessibility-and-fairness","minutes":8,"keyIdea":"An adjustment removes a barrier to demonstrating what you know without supplying what you know: get it documented formally, because a registered adjustment is a complete answer rather than an explanation offered afterwards."},{"slug":"what-happens-to-what-you-type","title":"What happens to what you type","url":"https://addaly.com/learn/ai-for-students/what-happens-to-what-you-type","api":"https://addaly.com/api/lesson/ai-for-students/what-happens-to-what-you-type","minutes":8,"keyIdea":"Storage, training and human review are three separate questions with different answers: the training toggle is usually yours to set, an institutional account is a work account with logs, and the only content safe from every future is content you did not type."}]},{"slug":"assessment-and-after","title":"Assessment, and the years after it","summary":"Past papers, timed practice, vivas, long projects, applications, and the honest question of what is worth learning when the tools can do a great deal of it.","outcome":"Prepare for closed and oral assessment by practising under the conditions of the test, manage a long project with a defensible record, and decide which capabilities to build unaided given what the tools can and cannot do.","lessons":[{"slug":"exam-hall","title":"Revision That Survives The Exam Hall","url":"https://addaly.com/learn/ai-for-students/exam-hall","api":"https://addaly.com/api/lesson/ai-for-students/exam-hall","minutes":8,"keyIdea":"Study under the conditions of the test: silent, timed, blank paper, nothing to ask."},{"slug":"still-worth-learning","title":"The Honest Case For Still Learning It","url":"https://addaly.com/learn/ai-for-students/still-worth-learning","api":"https://addaly.com/api/lesson/ai-for-students/still-worth-learning","minutes":9,"keyIdea":"You cannot supervise what you cannot do, and supervision is the job that is left."},{"slug":"past-papers-and-mark-schemes","title":"Past papers and mark schemes","url":"https://addaly.com/learn/ai-for-students/past-papers-and-mark-schemes","api":"https://addaly.com/api/lesson/ai-for-students/past-papers-and-mark-schemes","minutes":9,"keyIdea":"Past papers are study material rather than a final test, so start in week three, mark yourself against the scheme first, and only then ask which marks were lost and where, never for a model answer."},{"slug":"practising-under-the-conditions","title":"Practising under the conditions of the test","url":"https://addaly.com/learn/ai-for-students/practising-under-the-conditions","api":"https://addaly.com/api/lesson/ai-for-students/practising-under-the-conditions","minutes":8,"keyIdea":"Practise in the conditions of the test (timed, silent, handwritten, cold, with nothing to look up) because memory is context-sensitive and coursework-heavy courses hide the gap until the day."},{"slug":"vivas-and-live-assessment","title":"Vivas, and being asked about your own work","url":"https://addaly.com/learn/ai-for-students/vivas-and-live-assessment","api":"https://addaly.com/api/lesson/ai-for-students/vivas-and-live-assessment","minutes":8,"keyIdea":"A viva tests why you made each choice and what you rejected, so rehearse out loud against a model playing a difficult examiner, and a calm \"I do not know, but I would look at X\" scores better than a confident invention."},{"slug":"long-projects","title":"Long projects and dissertations","url":"https://addaly.com/learn/ai-for-students/long-projects","api":"https://addaly.com/api/lesson/ai-for-students/long-projects","minutes":9,"keyIdea":"Write a working document from week one (it converts reading into thinking, removes the blank page, and produces the strongest possible process record) and keep the dated file of how your question changed."},{"slug":"applications-and-statements","title":"Applications, statements and interviews","url":"https://addaly.com/learn/ai-for-students/applications-and-statements","api":"https://addaly.com/api/lesson/ai-for-students/applications-and-statements","minutes":8,"keyIdea":"The test for every sentence in an application is whether another applicant could have written it; so use the model to ask you questions that surface specific stories, never to produce the statement."},{"slug":"placements-and-professional-practice","title":"Placements, and rules that are not your university's","url":"https://addaly.com/learn/ai-for-students/placements-and-professional-practice","api":"https://addaly.com/api/lesson/ai-for-students/placements-and-professional-practice","minutes":8,"keyIdea":"On placement three rulebooks apply at once and the strictest governs: the organisation's information does not leave its systems, and a professional body's fitness-to-practise process is a far heavier matter than academic misconduct."},{"slug":"what-to-learn-anyway","title":"What to learn anyway","url":"https://addaly.com/learn/ai-for-students/what-to-learn-anyway","api":"https://addaly.com/api/lesson/ai-for-students/what-to-learn-anyway","minutes":9,"keyIdea":"The shift is from production towards judgement, and judgement is built by production: you cannot supervise a skill you never acquired, which is why the argument for learning survives the tools that do the producing."}]}]},{"slug":"context-engineering","title":"Context Engineering","tagline":"The window is a budget. Learn to spend it.","description":"For people who have already written the clever prompt and hit its ceiling. This course treats the context window as an engineering surface: what you put in it, in what order, from where, at what cost, and how you prove a change was an improvement. Nine lessons covering token budgets, the system prompt boundary, forced schemas, retrieval against long context, chunking, prefix caching, positional attention, untrusted input, and shipping prompts you can version and roll back. Vendor-neutral, with real numbers.","level":"advanced","track":"build","url":"https://addaly.com/learn/context-engineering","lessons":87,"minutes":758,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/context-engineering.pdf","pages":562,"bytes":6048381,"edition":"2026-09-24","sampler":"https://addaly.com/textbooks/samplers/context-engineering.pdf","cover":"https://addaly.com/textbooks/look/context-engineering/1.webp?v=2026-09-24-6048381"},"film":null,"modules":[{"slug":"the-window-as-a-surface","title":"The window as an engineering surface","summary":"What context engineering is, what is actually inside a request, how to count it, and what happens when it does not fit.","outcome":"Account for every token in a request (system prompt, tool definitions, history, retrieved material and output reserve) count them with the tokeniser the provider actually uses, and predict from that budget what the call will cost, how long its first token will take, and which part gets dropped when it overflows.","lessons":[{"slug":"the-window-is-a-budget","title":"The window is a budget, not a container","url":"https://addaly.com/learn/context-engineering/the-window-is-a-budget","api":"https://addaly.com/api/lesson/context-engineering/the-window-is-a-budget","minutes":8,"keyIdea":"Every token costs money, latency and attention, so treat the window as spend, not storage."},{"slug":"what-context-engineering-is","title":"Nobody typed this","url":"https://addaly.com/learn/context-engineering/what-context-engineering-is","api":"https://addaly.com/api/lesson/context-engineering/what-context-engineering-is","minutes":9,"keyIdea":"Context engineering starts the moment a program, not a person, assembles what the model reads, and the questions that matter become selection, order, cost, provenance and proof rather than wording."},{"slug":"the-four-kinds-of-context","title":"Four kinds of context, four different problems","url":"https://addaly.com/learn/context-engineering/the-four-kinds-of-context","api":"https://addaly.com/api/lesson/context-engineering/the-four-kinds-of-context","minutes":8,"keyIdea":"Sort every token in the window into instructions, exemplars, knowledge or state: the four differ in half-life, trust, cache behaviour and failure mode, and almost every layout decision follows from which kind a block is."},{"slug":"anatomy-of-a-request","title":"What the model literally receives","url":"https://addaly.com/learn/context-engineering/anatomy-of-a-request","api":"https://addaly.com/api/lesson/context-engineering/anatomy-of-a-request","minutes":10,"keyIdea":"Your message list is rendered into one token sequence by a chat template that adds delimiters, role labels and serialised tool schemas: you pay for all of it, and the system role's authority is training, not a permission bit."},{"slug":"system-prompt-versus-turn","title":"What belongs in the system prompt","url":"https://addaly.com/learn/context-engineering/system-prompt-versus-turn","api":"https://addaly.com/api/lesson/context-engineering/system-prompt-versus-turn","minutes":8,"keyIdea":"Stable and yours goes on top; variable or untrusted goes below, always."},{"slug":"counting-tokens-properly","title":"Counting tokens without lying to yourself","url":"https://addaly.com/learn/context-engineering/counting-tokens-properly","api":"https://addaly.com/api/lesson/context-engineering/counting-tokens-properly","minutes":9,"keyIdea":"Count with the tokeniser the model actually uses, log the billed count on every response, and remember that non-Latin scripts can cost two to four times more tokens for the same sentence."},{"slug":"the-budget-ledger","title":"Writing the budget down","url":"https://addaly.com/learn/context-engineering/the-budget-ledger","api":"https://addaly.com/api/lesson/context-engineering/the-budget-ledger","minutes":8,"keyIdea":"Write the token allocation as code with an assertion, subtract the output reserve first, and decide the cut order before an incident decides it for you."},{"slug":"effective-context-versus-advertised","title":"The advertised window and the usable one","url":"https://addaly.com/learn/context-engineering/effective-context-versus-advertised","api":"https://addaly.com/api/lesson/context-engineering/effective-context-versus-advertised","minutes":10,"keyIdea":"The advertised context length is an API limit, not a quality guarantee: measure the accuracy curve on your own material with real distractors, and budget below the point where it bends."},{"slug":"context-assembly-as-a-function","title":"Making the assembler testable","url":"https://addaly.com/learn/context-engineering/context-assembly-as-a-function","api":"https://addaly.com/api/lesson/context-engineering/context-assembly-as-a-function","minutes":9,"keyIdea":"Make context assembly a pure function of injected inputs (no clock, no network, no hidden randomness) so the request can be snapshot-tested, reproduced from a log and versioned by a hash of its configuration."},{"slug":"what-breaks-when-it-overflows","title":"What actually happens when it does not fit","url":"https://addaly.com/learn/context-engineering/what-breaks-when-it-overflows","api":"https://addaly.com/api/lesson/context-engineering/what-breaks-when-it-overflows","minutes":8,"keyIdea":"Overflow arrives as a rejected request, a silent truncation in your own code, or an upstream cut you never see, so cap unbounded sources at their boundary, never trim instructions automatically, and alert on the 99th percentile of budget usage rather than on failures."}]},{"slug":"what-earns-a-place","title":"Selection: what earns a place","summary":"You always have more candidate material than budget. This module is how to choose, drop, compress and pack it.","outcome":"Given far more candidate material than the budget allows, choose what goes in (filtering by permission and freshness before ranking, removing near-duplicates and boilerplate, deciding between a source and its summary, packing the remainder to a token budget) and state afterwards what was left out and why.","lessons":[{"slug":"retrieval-versus-long-context","title":"Retrieval versus long context: the real trade","url":"https://addaly.com/learn/context-engineering/retrieval-versus-long-context","api":"https://addaly.com/api/lesson/context-engineering/retrieval-versus-long-context","minutes":9,"keyIdea":"Corpus size, permissions and freshness pick the architecture; window size only changes the budget."},{"slug":"relevance-is-not-similarity","title":"Similar is not the same as relevant","url":"https://addaly.com/learn/context-engineering/relevance-is-not-similarity","api":"https://addaly.com/api/lesson/context-engineering/relevance-is-not-similarity","minutes":9,"keyIdea":"Vector similarity measures whether two texts keep similar company, not whether one answers the other, so negations, on-topic non-answers and rare identifiers all rank high, and a raw score means nothing until you have calibrated it on your own judged pairs."},{"slug":"filter-before-you-rank","title":"Filter before you rank, not after","url":"https://addaly.com/learn/context-engineering/filter-before-you-rank","api":"https://addaly.com/api/lesson/context-engineering/filter-before-you-rank","minutes":8,"keyIdea":"Apply correctness constraints inside the retrieval query rather than to its results, because filtering after top-k silently shrinks the evidence set, and remember that a highly selective filter can wreck approximate-search recall, at which point exact search over the small set is the better tool."},{"slug":"the-k-curve","title":"How many passages is the right number","url":"https://addaly.com/learn/context-engineering/the-k-curve","api":"https://addaly.com/api/lesson/context-engineering/the-k-curve","minutes":9,"keyIdea":"Sweep k and measure accuracy, retrieval recall and tokens together: answer quality peaks and then falls because passages ranked just below the answer are on-topic distractors, and the flat left edge of the curve is cheaper than the peak."},{"slug":"near-duplicates-and-boilerplate","title":"The same passage three times","url":"https://addaly.com/learn/context-engineering/near-duplicates-and-boilerplate","api":"https://addaly.com/api/lesson/context-engineering/near-duplicates-and-boilerplate","minutes":8,"keyIdea":"Duplicate and near-duplicate passages spend budget twice and manufacture false consensus in the window, so deduplicate at ingestion and again before packing, detect boilerplate statistically rather than by rule, and resolve version conflicts before assembly rather than hoping the model will."},{"slug":"freshness-and-as-of-lines","title":"Telling the model when things were true","url":"https://addaly.com/learn/context-engineering/freshness-and-as-of-lines","api":"https://addaly.com/api/lesson/context-engineering/freshness-and-as-of-lines","minutes":8,"keyIdea":"Inject today's date at the stable–variable boundary, attach each passage's date to the passage itself rather than a distant header, treat recency as a score adjustment rather than a filter, and monitor how stale your index is as a separate number from how old your documents are."},{"slug":"metadata-that-earns-its-tokens","title":"The header on every chunk","url":"https://addaly.com/learn/context-engineering/metadata-that-earns-its-tokens","api":"https://addaly.com/api/lesson/context-engineering/metadata-that-earns-its-tokens","minutes":8,"keyIdea":"A per-chunk header is paid k times on every request, so keep the fields that change what the model does (a short citation handle, a date when versions conflict, and the section path that makes a mid-document chunk intelligible) and leave ids, scores and filter fields in the index."},{"slug":"summarise-or-include","title":"The source or a summary of it","url":"https://addaly.com/learn/context-engineering/summarise-or-include","api":"https://addaly.com/api/lesson/context-engineering/summarise-or-include","minutes":9,"keyIdea":"Summaries preserve coverage and lose precision (especially negations, qualifiers and exact figures) so compress orientation material at ingestion time, keep verbatim the text an answer must be grounded in, and always store a pointer back to the source."},{"slug":"packing-to-a-budget","title":"Packing the budget","url":"https://addaly.com/learn/context-engineering/packing-to-a-budget","api":"https://addaly.com/api/lesson/context-engineering/packing-to-a-budget","minutes":9,"keyIdea":"Pack the retrieved budget in tokens rather than in chunk counts, never include a partial chunk, pin the material the user explicitly referred to before anything competes for space, and keep packing separate from ordering so each can be changed alone."},{"slug":"saying-what-was-left-out","title":"Admitting the set is partial","url":"https://addaly.com/learn/context-engineering/saying-what-was-left-out","api":"https://addaly.com/api/lesson/context-engineering/saying-what-was-left-out","minutes":8,"keyIdea":"Tell the model its evidence set is partial, abstain in code when the retrieval signal is too weak to be worth a call, show the user what was searched and what was excluded, and record a manifest of what actually entered the window so a disputed answer can be explained."}]},{"slug":"retrieval-as-a-pipeline","title":"Retrieval as a context pipeline","summary":"From a document that fights back to a passage the model can cite: parsing, chunk context, query rewriting, hybrid search, reranking and measurement.","outcome":"Build the pipeline that turns a question into the passages that fill the window: parse awkward sources, situate each chunk in its document, rewrite the query, run keyword and vector retrieval together and fuse the results, rerank to a budget, and measure retrieval on its own so a bad answer can be blamed on the right stage.","lessons":[{"slug":"documents-that-fight-back","title":"Getting text out of documents that resist","url":"https://addaly.com/learn/context-engineering/documents-that-fight-back","api":"https://addaly.com/api/lesson/context-engineering/documents-that-fight-back","minutes":10,"keyIdea":"Extraction is reconstruction of structure the file threw away, so expect column interleaving, orphaned table values, boilerplate in the body and silently empty scans: assert on characters per page, measure OCR error on your own scripts, and serialise tables one self-contained line per row."},{"slug":"chunking-without-losing-meaning","title":"Chunking that does not destroy meaning","url":"https://addaly.com/learn/context-engineering/chunking-without-losing-meaning","api":"https://addaly.com/api/lesson/context-engineering/chunking-without-losing-meaning","minutes":9,"keyIdea":"Retrieve the unit a human would quote, and carry down the context that made it mean what it means."},{"slug":"contextual-chunk-augmentation","title":"Giving each chunk its own context","url":"https://addaly.com/learn/context-engineering/contextual-chunk-augmentation","api":"https://addaly.com/api/lesson/context-engineering/contextual-chunk-augmentation","minutes":9,"keyIdea":"A chunk cut from a long document loses the referents that made it meaningful, so restore them at ingestion (a free heading-path header first, then a generated situating sentence indexed alongside the chunk in both vector and keyword indexes) and keep the original text as the thing you actually show the model."},{"slug":"the-query-is-not-the-question","title":"Rewriting the query before you search","url":"https://addaly.com/learn/context-engineering/the-query-is-not-the-question","api":"https://addaly.com/api/lesson/context-engineering/the-query-is-not-the-question","minutes":9,"keyIdea":"The user's message is rarely a good search query: resolve references from the conversation, split compound questions, expand paraphrases and optionally search with a hypothetical answer, but always fuse the original query back in so a bad rewrite cannot silently replace the real one."},{"slug":"keywords-and-vectors-together","title":"Keywords still win, so run both","url":"https://addaly.com/learn/context-engineering/keywords-and-vectors-together","api":"https://addaly.com/api/lesson/context-engineering/keywords-and-vectors-together","minutes":9,"keyIdea":"Dense and sparse retrieval fail in opposite directions, so run both and fuse by reciprocal rank rather than by normalising incomparable scores, and check that your keyword analyser actually tokenises the languages you serve, because that failure is completely silent."},{"slug":"reranking-to-fit-the-budget","title":"Reranking, and why it reads better than the retriever","url":"https://addaly.com/learn/context-engineering/reranking-to-fit-the-budget","api":"https://addaly.com/api/lesson/context-engineering/reranking-to-fit-the-budget","minutes":9,"keyIdea":"A cross-encoder scores query and passage together, so it can see negation and specificity a bi-encoder's separate vectors cannot: retrieve broadly, rerank a shortlist, and check the reranker's input limit before blaming it for long chunks it never fully read."},{"slug":"structured-sources-in-context","title":"Rows, records and schemas in the window","url":"https://addaly.com/learn/context-engineering/structured-sources-in-context","api":"https://addaly.com/api/lesson/context-engineering/structured-sources-in-context","minutes":9,"keyIdea":"Structured data reaches the window as records, as a schema the model writes a query against, or as the result of a function you wrote: choose by whether the answer is a lookup, an aggregate or a known operation, and never let generated SQL run with more than read permission on named views."},{"slug":"multi-hop-and-the-single-chunk-fallacy","title":"Questions no single passage answers","url":"https://addaly.com/learn/context-engineering/multi-hop-and-the-single-chunk-fallacy","api":"https://addaly.com/api/lesson/context-engineering/multi-hop-and-the-single-chunk-fallacy","minutes":8,"keyIdea":"Top-k retrieval assumes the answer sits in one passage, so route aggregates to a database, comparisons to one query per side, and only genuine chains to an iterative loop with a hop cap, because each hop multiplies its error rate and permanently adds its wreckage to the window."},{"slug":"citations-that-survive-assembly","title":"Citations you can actually verify","url":"https://addaly.com/learn/context-engineering/citations-that-survive-assembly","api":"https://addaly.com/api/lesson/context-engineering/citations-that-survive-assembly","minutes":8,"keyIdea":"Give every passage a short stable handle, keep the mapping outside the window, and verify after generation that each cited handle exists and each quoted span really appears, because citation presence is easy and citation correctness is not, and only the second is worth showing a user."},{"slug":"measuring-retrieval-on-its-own","title":"Measuring retrieval without the model","url":"https://addaly.com/learn/context-engineering/measuring-retrieval-on-its-own","api":"https://addaly.com/api/lesson/context-engineering/measuring-retrieval-on-its-own","minutes":9,"keyIdea":"Score retrieval separately with recall@k on a gold set (it costs no model calls, it caps everything downstream, and it splits failures into missing evidence and unused evidence) but discount recall measured on model-generated questions, which reuse the chunk's own words."}]},{"slug":"position-and-order","title":"Position, order and what the model actually reads","summary":"Where a fact sits in the window changes whether it is used. How to measure that on your own material and lay out the request accordingly.","outcome":"Predict and measure how position changes whether material in the window gets used: run a position probe on your own model and corpus, place instructions, examples and evidence deliberately, mark boundaries the model cannot confuse, and choose an evidence order that matches the task rather than the retriever's ranking.","lessons":[{"slug":"lost-in-the-middle-the-experiment","title":"The experiment that named the problem","url":"https://addaly.com/learn/context-engineering/lost-in-the-middle-the-experiment","api":"https://addaly.com/api/lesson/context-engineering/lost-in-the-middle-the-experiment","minutes":9,"keyIdea":"Holding content constant and moving only the position of the answer document produces a U-shaped accuracy curve (high at the ends, lowest in the middle, in the worst case below answering with no documents at all) and the size of that dip is a property of your model and task that has to be measured, not assumed."},{"slug":"ordering-and-the-middle","title":"Ordering, and the fact that models skim","url":"https://addaly.com/learn/context-engineering/ordering-and-the-middle","api":"https://addaly.com/api/lesson/context-engineering/ordering-and-the-middle","minutes":8,"keyIdea":"Position changes whether a fact gets used, so measure the position curve instead of trusting rank order."},{"slug":"building-a-position-probe","title":"Measuring your own position curve","url":"https://addaly.com/learn/context-engineering/building-a-position-probe","api":"https://addaly.com/api/lesson/context-engineering/building-a-position-probe","minutes":9,"keyIdea":"Measure your own position curve by holding the question, the distractors and the sampling fixed and moving only the gold passage, then check the differences against a bootstrap interval before treating the shape as real."},{"slug":"where-the-instruction-goes","title":"Top, bottom, or both","url":"https://addaly.com/learn/context-engineering/where-the-instruction-goes","api":"https://addaly.com/api/lesson/context-engineering/where-the-instruction-goes","minutes":8,"keyIdea":"Caching pulls instructions to the top and attention pulls them towards the question, so keep the large stable block cached at the front and pay for a short uncached reminder of the format and the one critical constraint next to the question."},{"slug":"repeating-the-instruction","title":"Saying it twice without saying two things","url":"https://addaly.com/learn/context-engineering/repeating-the-instruction","api":"https://addaly.com/api/lesson/context-engineering/repeating-the-instruction","minutes":8,"keyIdea":"Restate only the gating constraints (output contract, grounding, refusal) next to the question, render both copies from one source of truth so they cannot drift apart, and remember that a validator or a constrained decoder is a guarantee where a repeated instruction is only a nudge."},{"slug":"delimiters-and-boundaries","title":"Marking where one thing ends","url":"https://addaly.com/learn/context-engineering/delimiters-and-boundaries","api":"https://addaly.com/api/lesson/context-engineering/delimiters-and-boundaries","minutes":8,"keyIdea":"Use paired tag-style delimiters rather than markdown headings the content can imitate, guard against a document closing your block by escaping or by a per-request nonce, apply the same shape to every block, and explain in one sentence what the tagged regions mean."},{"slug":"ordering-evidence-relevance-or-chronology","title":"Ranked order is not always reading order","url":"https://addaly.com/learn/context-engineering/ordering-evidence-relevance-or-chronology","api":"https://addaly.com/api/lesson/context-engineering/ordering-evidence-relevance-or-chronology","minutes":8,"keyIdea":"Retrieval rank decides what enters the window; reading order is a separate decision (relevance order for finding a fact, natural order whenever a human reading the passages out of sequence would be misled) and either way state the order in one line so the model does not infer a different one."},{"slug":"few-shot-examples-inside-a-budget","title":"What examples cost, and what they buy","url":"https://addaly.com/learn/context-engineering/few-shot-examples-inside-a-budget","api":"https://addaly.com/api/lesson/context-engineering/few-shot-examples-inside-a-budget","minutes":9,"keyIdea":"Examples are the most expensive way to give an instruction, so choose two to four that differ from each other, include the refusal case, put the most representative one last, balance the labels, and re-test periodically whether they still beat the instruction that could replace them."},{"slug":"attention-sinks-and-the-first-tokens","title":"Why the first tokens are special","url":"https://addaly.com/learn/context-engineering/attention-sinks-and-the-first-tokens","api":"https://addaly.com/api/lesson/context-engineering/attention-sinks-and-the-first-tokens","minutes":8,"keyIdea":"Softmax forces attention to sum to one, so heads with nothing to attend to dump mass onto the earliest tokens, making them structural attention sinks, which is why evicting the first tokens from a KV cache destroys generation, and why the start of a request should hold your most stable, most authoritative text."}]},{"slug":"cost-cache-and-latency","title":"Cost, caching and latency","summary":"The window is billed and it is timed. Where the money and the milliseconds go, and how to get them back without changing the output.","outcome":"Cut the price and the time-to-first-token of a call without changing what it returns: order the prefix by stability so the cache actually hits, measure the hit rate rather than assuming it, move non-interactive work to a batch lane, route by context size, and cap the paths through which a single user can spend an unbounded amount.","lessons":[{"slug":"what-a-token-costs","title":"The arithmetic of a request","url":"https://addaly.com/learn/context-engineering/what-a-token-costs","api":"https://addaly.com/api/lesson/context-engineering/what-a-token-costs","minutes":10,"keyIdea":"Input, output, cached input and cache writes are four different prices, output is the expensive one, and a conversation bills quadratically because every turn resends the whole history, so measure cost per resolved outcome, not per call."},{"slug":"prefill-decode-and-where-the-time-goes","title":"Where the milliseconds go","url":"https://addaly.com/learn/context-engineering/prefill-decode-and-where-the-time-goes","api":"https://addaly.com/api/lesson/context-engineering/prefill-decode-and-where-the-time-goes","minutes":9,"keyIdea":"Prefill is compute-bound and scales with input, decode is bandwidth-bound and scales with output, so input length sets time-to-first-token while output length sets the rest, and streaming only hides the second of the two."},{"slug":"caching-the-prefix","title":"Caching a stable prefix","url":"https://addaly.com/learn/context-engineering/caching-the-prefix","api":"https://addaly.com/api/lesson/context-engineering/caching-the-prefix","minutes":8,"keyIdea":"Caching matches from the first token forward, so anything variable near the top throws the whole discount away."},{"slug":"designing-a-stable-prefix","title":"Ordering the request so the cache can hit","url":"https://addaly.com/learn/context-engineering/designing-a-stable-prefix","api":"https://addaly.com/api/lesson/context-engineering/designing-a-stable-prefix","minutes":9,"keyIdea":"Lay the request out strictly from most stable to most variable, put the cache breakpoint at the end of the shared block and a second after append-only history, and hash the rendered prefix in your logs so an accidental timestamp or a reordered dictionary cannot silently destroy the discount."},{"slug":"cache-hit-rate-as-a-metric","title":"Measuring the cache instead of believing in it","url":"https://addaly.com/learn/context-engineering/cache-hit-rate-as-a-metric","api":"https://addaly.com/api/lesson/context-engineering/cache-hit-rate-as-a-metric","minutes":8,"keyIdea":"Compute the hit rate from the cached and uncached token counts on every response, compare it against the ceiling implied by your own layout rather than someone else's number, alert on drops after deploys and per endpoint, and never refuse a quality improvement to protect a cache entry."},{"slug":"two-more-caches","title":"The other two caches, and the dangerous one","url":"https://addaly.com/learn/context-engineering/two-more-caches","api":"https://addaly.com/api/lesson/context-engineering/two-more-caches","minutes":9,"keyIdea":"Cache embeddings by text and model id, cache responses by an exact hash of the assembled request, and treat semantic caching as a wrong-answer generator until you have measured its false-hit rate, while the underrated safe win is caching the retrieval result and still generating fresh."},{"slug":"batching-and-the-slow-lane","title":"Work that can wait","url":"https://addaly.com/learn/context-engineering/batching-and-the-slow-lane","api":"https://addaly.com/api/lesson/context-engineering/batching-and-the-slow-lane","minutes":8,"keyIdea":"Batch endpoints trade latency for roughly half price, so route everything with no human waiting (ingestion, evaluation, backfills, scheduled work) through the same assembler into a batch file with a joinable id, and size fast-lane concurrency against the tokens-per-minute limit rather than the request count."},{"slug":"routing-by-context-size","title":"Not every request needs the big model","url":"https://addaly.com/learn/context-engineering/routing-by-context-size","api":"https://addaly.com/api/lesson/context-engineering/routing-by-context-size","minutes":8,"keyIdea":"Match the model to the request (by context size, task type, or a measured slice where a small model matches a large one) and remember that a cascade only saves money while the escalation rate stays low, so measure that rate on real traffic before building one."},{"slug":"denial-of-wallet-and-context-bombs","title":"How one user spends your whole budget","url":"https://addaly.com/learn/context-engineering/denial-of-wallet-and-context-bombs","api":"https://addaly.com/api/lesson/context-engineering/denial-of-wallet-and-context-bombs","minutes":9,"keyIdea":"Cost is requests times tokens times price, and a user can inflate all three without any exploit, so cap input at every entry point, cap output on every call, bound agent loops and tool results in code, and enforce a per-user daily token budget counted from billed usage rather than a request rate limit."}]},{"slug":"conversation-and-memory","title":"Conversation, memory and compaction","summary":"A conversation outgrows any window. What to keep word for word, what to compress, what to store as structure, and what to delete.","outcome":"Keep a long-running conversation inside a fixed window: decide what to keep verbatim, trigger compaction on tokens rather than turns, hold the facts that must not be lost as structured state rather than prose, carry memory across sessions with provenance and a deletion path, and tell the user what was forgotten instead of pretending.","lessons":[{"slug":"a-conversation-is-a-growing-prefix","title":"Every turn carries all the previous ones","url":"https://addaly.com/learn/context-engineering/a-conversation-is-a-growing-prefix","api":"https://addaly.com/api/lesson/context-engineering/a-conversation-is-a-growing-prefix","minutes":8,"keyIdea":"A conversation is your code resending the whole transcript every turn, which makes the bill quadratic, dilutes the original instruction, and turns an early model error into a confident fact the later turns build on."},{"slug":"what-to-keep-verbatim","title":"Which turns are worth their tokens","url":"https://addaly.com/learn/context-engineering/what-to-keep-verbatim","api":"https://addaly.com/api/lesson/context-engineering/what-to-keep-verbatim","minutes":8,"keyIdea":"Value in a transcript is not correlated with recency, so pin the task statement and the constraints verbatim at the head, keep the last handful of turns verbatim at the tail, compress the middle, and stub out spent tool results, while keeping the full transcript in storage regardless of what the window holds."},{"slug":"compaction-when-and-how","title":"Compacting without losing the thread","url":"https://addaly.com/learn/context-engineering/compaction-when-and-how","api":"https://addaly.com/api/lesson/context-engineering/compaction-when-and-how","minutes":9,"keyIdea":"Trigger compaction on a fraction of the token budget rather than on turn count, ask for structured fields (especially decisions with rejections and approaches already tried) re-derive each compaction from the raw transcript rather than from the previous summary, and check that every id and number in the record appears in the source."},{"slug":"the-facts-that-must-survive","title":"State as fields, not as prose","url":"https://addaly.com/learn/context-engineering/the-facts-that-must-survive","api":"https://addaly.com/api/lesson/context-engineering/the-facts-that-must-survive","minutes":8,"keyIdea":"Hold the facts that must not be lost (ids, amounts, constraints, decisions and rejections) as named fields with provenance and supersession rather than as sentences in a summary, render them at a fixed position with an explicit precedence rule, and show them to the user so a bad extraction can be corrected before it compounds."},{"slug":"memory-across-sessions","title":"Memory between conversations","url":"https://addaly.com/learn/context-engineering/memory-across-sessions","api":"https://addaly.com/api/lesson/context-engineering/memory-across-sessions","minutes":9,"keyIdea":"Separate stated preferences from derived inferences, write sparingly and only from user-authored turns, store provenance and a date so conflicts resolve by recency and explicitness, and make the whole store visible, correctable and deletable, because a wrong memory is a wrong answer that repeats forever."},{"slug":"retrieving-from-your-own-history","title":"Searching the transcript instead of carrying it","url":"https://addaly.com/learn/context-engineering/retrieving-from-your-own-history","api":"https://addaly.com/api/lesson/context-engineering/retrieving-from-your-own-history","minutes":8,"keyIdea":"Indexing the transcript keeps context bounded however long a conversation runs, but conversational turns retrieve badly until they are segmented by topic and rewritten into standalone form at write time, and retrieved history must supplement the verbatim recent turns rather than replace them."},{"slug":"the-handover-note","title":"Passing context to whoever comes next","url":"https://addaly.com/learn/context-engineering/the-handover-note","api":"https://addaly.com/api/lesson/context-engineering/the-handover-note","minutes":8,"keyIdea":"A handover note is the same artefact whether it crosses sessions, agents or into human hands (goal, status, next action, decisions with reasons, what failed, artefacts and open questions) and the section listing what was already tried is the one that saves the next reader from repeating it."},{"slug":"forgetting-on-purpose","title":"Deleting what you kept","url":"https://addaly.com/learn/context-engineering/forgetting-on-purpose","api":"https://addaly.com/api/lesson/context-engineering/forgetting-on-purpose","minutes":9,"keyIdea":"User text ends up in ten stores, so keep an inventory of every one of them as code, give each a deliberate retention period, and make erasure a tested function that asserts zero remaining rows, while treating embeddings and derived summaries as personal data and leaving the legal questions, which differ by country and remain unsettled, to lawyers."},{"slug":"telling-the-user-it-forgot","title":"Being honest about a bounded window","url":"https://addaly.com/learn/context-engineering/telling-the-user-it-forgot","api":"https://addaly.com/api/lesson/context-engineering/telling-the-user-it-forgot","minutes":8,"keyIdea":"A product may only claim to remember what it actually stores, so show the context indicator, mark where compaction happened, list stored memories with delete controls, and tell the model precisely what it does and does not have so it asks instead of confabulating."}]},{"slug":"tools-schemas-and-the-agent-window","title":"Tools, schemas and the agent's window","summary":"Once a program calls tools, the window fills with things you did not write: schemas, results, errors and the wreckage of earlier steps. How to bound all four.","outcome":"Design the context of a tool-using system: account for the standing token cost of a toolset and measure its effect on routing, enforce a schema while understanding that enforcement guarantees shape and never truth, bound tool results and error text at the boundary in code, and choose between stubbing an agent's spent observations, delegating to a sub-agent and moving the payload to disk, justifying the choice by cost, cache behaviour and what each one permanently loses.","lessons":[{"slug":"forcing-a-schema","title":"Structured output, and what a schema does not buy you","url":"https://addaly.com/learn/context-engineering/forcing-a-schema","api":"https://addaly.com/api/lesson/context-engineering/forcing-a-schema","minutes":9,"keyIdea":"A schema constrains the shape of an answer, never its truth, and its field order is a prompt."},{"slug":"how-a-schema-is-enforced","title":"How a schema is actually enforced","url":"https://addaly.com/learn/context-engineering/how-a-schema-is-enforced","api":"https://addaly.com/api/lesson/context-engineering/how-a-schema-is-enforced","minutes":10,"keyIdea":"Structured output is implemented by masking the model's logits at each step so only tokens that continue a valid parse survive, which guarantees a document that parses and guarantees nothing about whether it is true, complete, or an honest answer to the question."},{"slug":"tool-definitions-are-context","title":"Every tool costs tokens before anyone calls it","url":"https://addaly.com/learn/context-engineering/tool-definitions-are-context","api":"https://addaly.com/api/lesson/context-engineering/tool-definitions-are-context","minutes":9,"keyIdea":"Tool schemas are serialised into every request whether or not a tool is used, so a large toolset is a fixed tax on every call and a measurable drag on the model's ability to pick the right one."},{"slug":"tool-descriptions-as-routing","title":"The description is the prompt that picks the tool","url":"https://addaly.com/learn/context-engineering/tool-descriptions-as-routing","api":"https://addaly.com/api/lesson/context-engineering/tool-descriptions-as-routing","minutes":9,"keyIdea":"A tool description is not documentation for a developer but the entire basis on which the model decides to call it, so it must state the boundaries, the limits and the cases where the tool is the wrong choice."},{"slug":"tool-results-are-unbounded","title":"The biggest thing in the window is a tool result","url":"https://addaly.com/learn/context-engineering/tool-results-are-unbounded","api":"https://addaly.com/api/lesson/context-engineering/tool-results-are-unbounded","minutes":9,"keyIdea":"Tool output is the one input to the window whose size you do not control and cannot predict, so it must be converted, then truncated in code at the boundary, with a marker that tells the model how to retrieve the rest."},{"slug":"errors-that-teach","title":"An error message is context too","url":"https://addaly.com/learn/context-engineering/errors-that-teach","api":"https://addaly.com/api/lesson/context-engineering/errors-that-teach","minutes":8,"keyIdea":"Error text written for a human log tells a model nothing it can act on, so every tool error should state what failed, whether retrying can possibly help, and what to do instead, and the retry cap belongs in code regardless."},{"slug":"too-many-tools","title":"When the toolset outgrows the window","url":"https://addaly.com/learn/context-engineering/too-many-tools","api":"https://addaly.com/api/lesson/context-engineering/too-many-tools","minutes":9,"keyIdea":"Past a few dozen tools the answer is to retrieve a subset per request rather than to list them all, which trades a fixed token tax and a routing problem for a recall problem whose failures are invisible."},{"slug":"the-agent-loop-grows","title":"Why a twenty-step agent run costs what it does","url":"https://addaly.com/learn/context-engineering/the-agent-loop-grows","api":"https://addaly.com/api/lesson/context-engineering/the-agent-loop-grows","minutes":10,"keyIdea":"An agent loop resends its entire accumulated transcript on every step, so cost grows with the square of the number of steps and most of what is being resent is observations whose purpose has already been served."},{"slug":"sub-agents-and-window-isolation","title":"Sub-agents buy you a window and charge you a boundary","url":"https://addaly.com/learn/context-engineering/sub-agents-and-window-isolation","api":"https://addaly.com/api/lesson/context-engineering/sub-agents-and-window-isolation","minutes":9,"keyIdea":"The reason to spawn a sub-agent is that it reads a great deal and returns a little, so the parent never pays for the reading; and the price is that everything not in the return value is permanently gone, which makes the return contract the real design decision."},{"slug":"the-filesystem-as-context","title":"Put the payload on disk and the pointer in the window","url":"https://addaly.com/learn/context-engineering/the-filesystem-as-context","api":"https://addaly.com/api/lesson/context-engineering/the-filesystem-as-context","minutes":9,"keyIdea":"Any material the model needs to consult rather than read can live in a file with a query tool over it, which turns a fixed window into unbounded working memory: at the price of stale reads, forgotten artefacts and a new surface for untrusted text."}]},{"slug":"untrusted-text-and-the-boundary","title":"Untrusted text and the trust boundary","summary":"Most of what fills a window was written by somebody else. What that lets an attacker do, why no prompt can stop it, and which controls actually hold.","outcome":"Assess and bound the risk of a context pipeline that reads material your organisation did not write: explain from the token sequence why no instruction can guarantee the model ignores an injected one, enumerate the channels by which untrusted content enters and by which data can leave, carry a provenance label through the assembler and narrow the available tools from it, apply spotlighting while stating its measured limits, treat model output as input to whatever consumes it next, and report an attack success rate from a corpus delivered through the real entry points.","lessons":[{"slug":"untrusted-text-in-context","title":"When untrusted text enters the context","url":"https://addaly.com/learn/context-engineering/untrusted-text-in-context","api":"https://addaly.com/api/lesson/context-engineering/untrusted-text-in-context","minutes":9,"keyIdea":"You cannot stop a model from reading an instruction, so limit what it is able to do about one."},{"slug":"why-injection-has-no-patch","title":"Why this one has no fix","url":"https://addaly.com/learn/context-engineering/why-injection-has-no-patch","api":"https://addaly.com/api/lesson/context-engineering/why-injection-has-no-patch","minutes":9,"keyIdea":"SQL injection was solved by a protocol that separates code from data, and no equivalent exists for a language model because instructions and data arrive as one undifferentiated token sequence in which the system role is a learned prior rather than an enforced boundary."},{"slug":"indirect-injection","title":"The attacker is not the one typing","url":"https://addaly.com/learn/context-engineering/indirect-injection","api":"https://addaly.com/api/lesson/context-engineering/indirect-injection","minutes":9,"keyIdea":"The dangerous payload does not arrive in the chat box but inside content your system fetched on the user's behalf, which means every source your assembler reads is an input channel from whoever controls that source."},{"slug":"the-lethal-trifecta","title":"Three ingredients, and the recipe only works with all three","url":"https://addaly.com/learn/context-engineering/the-lethal-trifecta","api":"https://addaly.com/api/lesson/context-engineering/the-lethal-trifecta","minutes":8,"keyIdea":"Serious exfiltration requires access to private data, exposure to untrusted content, and some way to send data outwards, so removing any single one of the three makes the attack fail regardless of how well written the payload is."},{"slug":"exfiltration-channels","title":"The outward channels you did not know you had","url":"https://addaly.com/learn/context-engineering/exfiltration-channels","api":"https://addaly.com/api/lesson/context-engineering/exfiltration-channels","minutes":9,"keyIdea":"Any mechanism that causes a request to a URL an attacker influences is an exfiltration channel, which makes rendered images, clickable links, fetch tools and even a search query into data egress paths that no security review labelled as such."},{"slug":"taint-through-the-assembler","title":"Labelling every block with where it came from","url":"https://addaly.com/learn/context-engineering/taint-through-the-assembler","api":"https://addaly.com/api/lesson/context-engineering/taint-through-the-assembler","minutes":9,"keyIdea":"Trust is a property of a block's origin rather than of its content, so the assembler should carry a provenance label on every block it packs and expose whether the finished window contains anything untrusted, which turns an unanswerable question into a boolean your code can act on."},{"slug":"capabilities-not-instructions","title":"Limit what it can do, not what it can read","url":"https://addaly.com/learn/context-engineering/capabilities-not-instructions","api":"https://addaly.com/api/lesson/context-engineering/capabilities-not-instructions","minutes":9,"keyIdea":"Since you cannot prevent a model reading an instruction, the defence has to be that the instruction is not worth giving, which means the set of actions available in a turn is narrowed by code according to what is in the window, not by a request in the prompt."},{"slug":"spotlighting-and-its-limits","title":"Marking untrusted text, and how far that gets you","url":"https://addaly.com/learn/context-engineering/spotlighting-and-its-limits","api":"https://addaly.com/api/lesson/context-engineering/spotlighting-and-its-limits","minutes":8,"keyIdea":"Delimiting, datamarking and encoding all make untrusted text more visibly distinct to the model and measurably reduce attack success, but each reduces rather than eliminates and each carries a cost in tokens or capability that has to be weighed."},{"slug":"model-output-is-untrusted-input","title":"What the model writes is input to something else","url":"https://addaly.com/learn/context-engineering/model-output-is-untrusted-input","api":"https://addaly.com/api/lesson/context-engineering/model-output-is-untrusted-input","minutes":8,"keyIdea":"Model output is partly shaped by whatever was in the window, so it must be validated before it reaches a browser, a database, a shell or a filesystem, exactly as any other input from outside would be."},{"slug":"testing-the-boundary","title":"Making attack success a number you track","url":"https://addaly.com/learn/context-engineering/testing-the-boundary","api":"https://addaly.com/api/lesson/context-engineering/testing-the-boundary","minutes":9,"keyIdea":"Injection defences are worthless unless measured, so build a corpus of payloads delivered through the channels they would really arrive by, score attack success as a rate, and run it on every change the way you run any other regression test."}]},{"slug":"shipping-and-measuring","title":"Shipping context, and proving it got better","summary":"A prompt is a production change with no compiler behind it. The evaluation set, the cheap offline checks, the honest statistics, the rollout and the diagnosis when it goes wrong.","outcome":"Take a change to a context pipeline from idea to production and defend it afterwards: build a stratified golden set from real traffic and split it so the reported number still means something, assert on the assembled request in continuous integration, establish by ablation which blocks earn their tokens, decide with a paired test whether a difference is larger than the measurement's own noise, calibrate a model judge before trusting it, log enough to replay any request, ship behind a version with a revert that needs no deploy, and diagnose a bad answer down to the stage that produced it.","lessons":[{"slug":"prompts-you-can-roll-back","title":"A prompt you can version, test and roll back","url":"https://addaly.com/learn/context-engineering/prompts-you-can-roll-back","api":"https://addaly.com/api/lesson/context-engineering/prompts-you-can-roll-back","minutes":10,"keyIdea":"Version the whole call and log its hash, or you will not be able to explain your own regressions."},{"slug":"the-golden-set","title":"The set of examples you are allowed to trust","url":"https://addaly.com/learn/context-engineering/the-golden-set","api":"https://addaly.com/api/lesson/context-engineering/the-golden-set","minutes":9,"keyIdea":"A golden set must be sampled from real traffic, labelled with required behaviour rather than expected wording, stratified to include abstentions and known failures, and split so that the portion you tune against is not the portion you report from."},{"slug":"offline-checks-on-the-assembler","title":"The tests that need no model at all","url":"https://addaly.com/learn/context-engineering/offline-checks-on-the-assembler","api":"https://addaly.com/api/lesson/context-engineering/offline-checks-on-the-assembler","minutes":8,"keyIdea":"Most context bugs are properties of the assembled request rather than of the model's answer, so they can be caught by assertions and a snapshot diff that run in milliseconds, cost nothing, and belong in continuous integration."},{"slug":"ablation-earns-the-block","title":"Take it out and see what happens","url":"https://addaly.com/learn/context-engineering/ablation-earns-the-block","api":"https://addaly.com/api/lesson/context-engineering/ablation-earns-the-block","minutes":9,"keyIdea":"The only honest way to know whether a block of context earns its tokens is to remove it and re-measure, which routinely reveals paragraphs that have been paid for on every request for a year and change nothing."},{"slug":"is-the-difference-real","title":"Three points better, or three points of noise","url":"https://addaly.com/learn/context-engineering/is-the-difference-real","api":"https://addaly.com/api/lesson/context-engineering/is-the-difference-real","minutes":10,"keyIdea":"Two variants must be compared on the same inputs so that per-item differences can be counted, because a paired design detects far smaller effects than independent samples and because most reported prompt improvements are within the noise of the evaluation that produced them."},{"slug":"judging-with-a-model","title":"Using a model to mark the homework","url":"https://addaly.com/learn/context-engineering/judging-with-a-model","api":"https://addaly.com/api/lesson/context-engineering/judging-with-a-model","minutes":9,"keyIdea":"A model judge is the only practical way to score open-ended answers at volume, and it carries position, verbosity and self-preference biases that must be controlled for and an agreement rate with humans that must be measured before any of its numbers mean anything."},{"slug":"logging-a-request-you-can-replay","title":"Logging enough to rebuild the request","url":"https://addaly.com/learn/context-engineering/logging-a-request-you-can-replay","api":"https://addaly.com/api/lesson/context-engineering/logging-a-request-you-can-replay","minutes":9,"keyIdea":"Log the inputs, the configuration version and the prefix hash rather than the rendered prompt, because a pure assembler can reconstruct the exact request from those three while storing the prompt itself is expensive, full of personal data, and still not enough to explain a bill."},{"slug":"shipping-a-context-change","title":"Rolling out a prompt like a deployment","url":"https://addaly.com/learn/context-engineering/shipping-a-context-change","api":"https://addaly.com/api/lesson/context-engineering/shipping-a-context-change","minutes":9,"keyIdea":"A prompt change is a production change with no type system and no compiler, so it needs the same machinery any risky deployment gets: one versioned configuration object, a shadow run on real traffic, a percentage rollout, and a revert that does not require a deploy."},{"slug":"the-model-changed-under-you","title":"The dependency you do not control","url":"https://addaly.com/learn/context-engineering/the-model-changed-under-you","api":"https://addaly.com/api/lesson/context-engineering/the-model-changed-under-you","minutes":8,"keyIdea":"A prompt is tuned against a specific model and that model is a hosted dependency that can move beneath you, so pin dated versions, re-run the golden set on a schedule to see drift as a trend, and budget re-tuning time into every migration."},{"slug":"diagnosing-a-bad-answer","title":"From a complaint to the stage that caused it","url":"https://addaly.com/learn/context-engineering/diagnosing-a-bad-answer","api":"https://addaly.com/api/lesson/context-engineering/diagnosing-a-bad-answer","minutes":10,"keyIdea":"A bad answer is produced by one identifiable stage of the pipeline, and with a logged manifest and a replay command the diagnosis is a short sequence of lookups rather than a guess, which is the whole reason for the instrumentation this course has been building."}]}]},{"slug":"open-models","title":"The Open Model Ecosystem","tagline":"Llama, Mistral, Qwen, DeepSeek, Gemma, Phi: what is real and what is marketing.","description":"Llama, Mistral, Qwen, DeepSeek, Gemma and Phi are not interchangeable, and the leaderboard that ranks them is mostly measuring itself. This course teaches what open weights actually gets you, how to read the licence and the model card, how to size a model to the machine you really have, and how to settle a model choice with forty of your own examples in one afternoon.","level":"intermediate","track":"deep","url":"https://addaly.com/learn/open-models","lessons":71,"minutes":626,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/open-models.pdf","pages":384,"bytes":4311522,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/open-models.pdf","cover":"https://addaly.com/textbooks/look/open-models/1.webp?v=2026-10-07-4311522"},"film":null,"modules":[{"slug":"what-open-really-means","title":"What open actually means","summary":"The word open is doing a great deal of work in this ecosystem, and it means something different in every sentence it appears in. This block separates the freedoms a release actually grants (run it, adapt it, redistribute it, inspect it, rebuild it) from the ones the announcement implies, and gives you the licence chain, the data question, the regulatory position and the supply-chain checks that a model you are about to depend on has to survive.","outcome":"Given any model release, say precisely which freedoms it grants and which it withholds, trace its licence through every fine-tune in the chain, verify the files you downloaded are the files the publisher made, and state what an auditor or a regulator could still ask that the weights alone cannot answer.","lessons":[{"slug":"open-weights-is-not-open-source","title":"Open Weights Is Not Open Source","url":"https://addaly.com/learn/open-models/open-weights-is-not-open-source","api":"https://addaly.com/api/lesson/open-models/open-weights-is-not-open-source","minutes":7,"keyIdea":"Open weights means you can run and adapt the model, not that you can see how it was made."},{"slug":"reading-the-licence","title":"Reading the Licence Before You Ship","url":"https://addaly.com/learn/open-models/reading-the-licence","api":"https://addaly.com/api/lesson/open-models/reading-the-licence","minutes":9,"keyIdea":"A licence travels with every fine-tune and every download; check the chain, not the badge on the page."},{"slug":"why-labs-release-weights","title":"Why a lab gives away a model","url":"https://addaly.com/learn/open-models/why-labs-release-weights","api":"https://addaly.com/api/lesson/open-models/why-labs-release-weights","minutes":9,"keyIdea":"A lab releases weights when a cheap, ubiquitous model helps something else it sells, so openness tracks strategy rather than principle and can be withdrawn from the next version at any time."},{"slug":"the-openness-spectrum","title":"Grading openness without arguing about the word","url":"https://addaly.com/learn/open-models/the-openness-spectrum","api":"https://addaly.com/api/lesson/open-models/the-openness-spectrum","minutes":9,"keyIdea":"Score a release on six separate axes (weights, licence, data, code, evaluation, checkpoints) because each axis buys a different concrete capability, and only some of them matter for any given job."},{"slug":"data-provenance","title":"Where the training data comes from","url":"https://addaly.com/learn/open-models/data-provenance","api":"https://addaly.com/api/lesson/open-models/data-provenance","minutes":10,"keyIdea":"Open models are built on a handful of named public web corpora processed by undisclosed filters, and crawler opt-outs only ever work forwards, so what a model already learned cannot be withdrawn."},{"slug":"copyright-and-training-data","title":"The copyright question nobody has settled","url":"https://addaly.com/learn/open-models/copyright-and-training-data","api":"https://addaly.com/api/lesson/open-models/copyright-and-training-data","minutes":10,"keyIdea":"Copyright and AI splits into three independent questions (whether training infringes, whether an output infringes, and whether an output can be owned) and they are answered differently in every jurisdiction and mostly still unresolved."},{"slug":"regulation-and-open-releases","title":"What regulators ask of an open model","url":"https://addaly.com/learn/open-models/regulation-and-open-releases","api":"https://addaly.com/api/lesson/open-models/regulation-and-open-releases","minutes":9,"keyIdea":"The EU's open-source exemption for general-purpose models still requires a copyright policy and a public training-data summary, does not apply above the systemic-risk compute threshold, and publishing a fine-tune can make you a provider with duties of your own."},{"slug":"model-supply-chain","title":"Trusting a file you did not build","url":"https://addaly.com/learn/open-models/model-supply-chain","api":"https://addaly.com/api/lesson/open-models/model-supply-chain","minutes":10,"keyIdea":"Safetensors removes only one of the execution paths into your machine; trust_remote_code runs repository Python by design, and behavioural backdoors in weights or adapters are invisible to every scanner."},{"slug":"vetting-a-community-fine-tune","title":"Vetting a stranger's fine-tune","url":"https://addaly.com/learn/open-models/vetting-a-community-fine-tune","api":"https://addaly.com/api/lesson/open-models/vetting-a-community-fine-tune","minutes":8,"keyIdea":"Vet a community fine-tune on its licence chain, its named datasets, its stated limitations and its performance on your own examples, because download counts and benchmark tables without a harness carry almost no information."},{"slug":"releasing-your-own-model","title":"Publishing weights people can trust","url":"https://addaly.com/learn/open-models/releasing-your-own-model","api":"https://addaly.com/api/lesson/open-models/releasing-your-own-model","minutes":9,"keyIdea":"A trustworthy release is the base model's score reported next to yours under an identical, named configuration, plus a working chat template, an honest limitations section and a licence chain you actually have the right to grant."}]},{"slug":"the-map-of-the-ecosystem","title":"The map, and how to read it","summary":"Open weights are not only chat models. There are code models with their own token formats, embedding models that decide whether search works, rerankers, speech models, image models with the ecosystem's worst licence traps, regional models that beat much larger general ones in their own languages, and a market of providers serving all of it by the token. This block draws the map, names what is durable about each part, and tells you what a model of a given size can honestly be asked to do.","outcome":"Place any open release on a map of families, modalities, formats and serving options within ten minutes (naming its licence posture, its likely tokenizer, the tools that will serve it and the size class it competes in) and pick the right kind of model for a retrieval, code, speech or generation task rather than reaching for a chat model by reflex.","lessons":[{"slug":"the-families","title":"The Families, and What Each Is Actually For","url":"https://addaly.com/learn/open-models/the-families","api":"https://addaly.com/api/lesson/open-models/the-families","minutes":9,"keyIdea":"Families differ durably in licence, size ladder and ecosystem; whichever leads on quality changes every few months."},{"slug":"hugging-face-as-infrastructure","title":"Hugging Face as Infrastructure","url":"https://addaly.com/learn/open-models/hugging-face-as-infrastructure","api":"https://addaly.com/api/lesson/open-models/hugging-face-as-infrastructure","minutes":8,"keyIdea":"Never load a pickle you did not create; prefer safetensors, and pin the commit rather than the branch."},{"slug":"beyond-the-big-six","title":"Regional and specialist models","url":"https://addaly.com/learn/open-models/beyond-the-big-six","api":"https://addaly.com/api/lesson/open-models/beyond-the-big-six","minutes":9,"keyIdea":"A language-focused model wins by knowing more of that language and spending fewer tokens on it, so compare tokenizer output as well as quality, and check the licence, because several of the best multilingual releases are non-commercial."},{"slug":"open-code-models","title":"Models that write code","url":"https://addaly.com/learn/open-models/open-code-models","api":"https://addaly.com/api/lesson/open-models/open-code-models","minutes":9,"keyIdea":"Completion models trained with fill-in-the-middle and chat-tuned instruct models are different tools with different prompt formats, and code benchmarks like HumanEval are saturated enough that twenty diffs from your own repository are better evidence."},{"slug":"open-embedding-models","title":"Embeddings you can host yourself","url":"https://addaly.com/learn/open-models/open-embedding-models","api":"https://addaly.com/api/lesson/open-models/open-embedding-models","minutes":10,"keyIdea":"An embedding model is small, cheap and CPU-friendly, but its query and passage prefixes, normalisation, truncation limit and pooling are set by the model card, and getting any of them wrong degrades retrieval silently rather than raising an error."},{"slug":"rerankers-and-the-retrieval-stack","title":"Rerankers, and why retrieval is two stages","url":"https://addaly.com/learn/open-models/rerankers-and-the-retrieval-stack","api":"https://addaly.com/api/lesson/open-models/rerankers-and-the-retrieval-stack","minutes":9,"keyIdea":"A bi-encoder must compress each document before seeing the query, which is why retrieval is fast and imprecise; a cross-encoder reranker reads query and document together, which is why it is accurate and can only reorder what retrieval already found."},{"slug":"open-speech-models","title":"Speech, in both directions","url":"https://addaly.com/learn/open-models/open-speech-models","api":"https://addaly.com/api/lesson/open-models/open-speech-models","minutes":9,"keyIdea":"Whisper invents text during silence unless voice activity detection gates it, so a production transcription pipeline is VAD plus a fast reimplementation, and text-to-speech is where the open licences get genuinely restrictive."},{"slug":"open-image-and-video-models","title":"Image and video weights, and their licence traps","url":"https://addaly.com/learn/open-models/open-image-and-video-models","api":"https://addaly.com/api/lesson/open-models/open-image-and-video-models","minutes":9,"keyIdea":"One image-model family often ships variants under completely different licences, and the widely used FLUX.1 [dev] is non-commercial while [schnell] is Apache 2.0, so check the variant rather than the family before anything reaches a customer."},{"slug":"what-each-size-can-do","title":"What a model of each size can honestly do","url":"https://addaly.com/learn/open-models/what-each-size-can-do","api":"https://addaly.com/api/lesson/open-models/what-each-size-can-do","minutes":9,"keyIdea":"Stored knowledge scales with parameters and multi-step reliability compounds, so a small model fails on facts and long chains rather than on single narrow tasks, and narrowing the task usually beats increasing the size."},{"slug":"inference-providers","title":"Renting open weights by the token","url":"https://addaly.com/learn/open-models/inference-providers","api":"https://addaly.com/api/lesson/open-models/inference-providers","minutes":8,"keyIdea":"Providers serving the same open model differ in quantisation, context cap and default sampling, so a benchmark run against one provider does not transfer to another unless you pin the provider and record its serving configuration."}]},{"slug":"inside-the-artefact","title":"Inside the files","summary":"A model repository is a small number of files that between them fix the memory the model needs, the cost of every request in your language, the exact conversation format it will accept and the point at which it stops talking. This block reads those files properly: the config, the tokenizer, the chat template, the attention layout, the context claim, and the formats you convert between, so that you can predict a model's behaviour before you load it, and diagnose it from the files when it misbehaves.","outcome":"Open a model repository you have never seen and predict, from config.json and the tokenizer alone, its parameter count, its memory footprint at a given context length, its per-token cost in your languages and the exact conversation format it requires; then verify each prediction with a command and diagnose a runaway or garbled generation from the files rather than by guessing.","lessons":[{"slug":"base-instruct-reasoning","title":"Base, Instruct, Reasoning","url":"https://addaly.com/learn/open-models/base-instruct-reasoning","api":"https://addaly.com/api/lesson/open-models/base-instruct-reasoning","minutes":8,"keyIdea":"Reasoning models buy accuracy on multi-step problems with tokens and latency; most production tasks are not multi-step."},{"slug":"reading-config-json","title":"Every number in config.json","url":"https://addaly.com/learn/open-models/reading-config-json","api":"https://addaly.com/api/lesson/open-models/reading-config-json","minutes":10,"keyIdea":"config.json contains everything needed to derive a model's parameter count, its weight memory and its KV cache per token, and most of the parameters live in the feed-forward matrices rather than in attention."},{"slug":"tokenizers-across-families","title":"Why the same sentence costs different amounts","url":"https://addaly.com/learn/open-models/tokenizers-across-families","api":"https://addaly.com/api/lesson/open-models/tokenizers-across-families","minutes":9,"keyIdea":"Fertility (tokens per word) varies by a factor of three or more across languages and tokenizer vocabularies, and it multiplies straight into your bill, your effective context length and your latency."},{"slug":"the-chat-template-contract","title":"The chat template is a contract","url":"https://addaly.com/learn/open-models/the-chat-template-contract","api":"https://addaly.com/api/lesson/open-models/the-chat-template-contract","minutes":9,"keyIdea":"An instruct model was trained on an exact token sequence that ships with it in tokenizer_config.json, so build prompts with apply_chat_template and add_generation_prompt rather than by hand, and watch for a duplicated beginning-of-sequence token."},{"slug":"attention-and-the-kv-cache","title":"Attention variants, and the cache that eats your memory","url":"https://addaly.com/learn/open-models/attention-and-the-kv-cache","api":"https://addaly.com/api/lesson/open-models/attention-and-the-kv-cache","minutes":10,"keyIdea":"KV cache memory is two times layers times key-value heads times head dimension per token, it grows with every concurrent user, and grouped-query attention, cache quantisation and a lower context limit are the three levers that change it."},{"slug":"context-length-in-practice","title":"What a 128k context window really means","url":"https://addaly.com/learn/open-models/context-length-in-practice","api":"https://addaly.com/api/lesson/open-models/context-length-in-practice","minutes":9,"keyIdea":"Advertised context comes from extended positional encodings, but the effective length on tasks harder than finding one sentence is often a fraction of it, and prefill cost grows with the square of prompt length."},{"slug":"mixture-of-experts","title":"Mixture of experts, and the memory it still needs","url":"https://addaly.com/learn/open-models/mixture-of-experts","api":"https://addaly.com/api/lesson/open-models/mixture-of-experts","minutes":8,"keyIdea":"A mixture-of-experts model computes like its active parameter count and occupies memory like its total, so it is outstanding on a machine with spare memory and useless on one without."},{"slug":"multimodal-open-models","title":"Models that can see","url":"https://addaly.com/learn/open-models/multimodal-open-models","api":"https://addaly.com/api/lesson/open-models/multimodal-open-models","minutes":9,"keyIdea":"A vision-language model turns image patches into tokens through a projector, so images consume context and cost proportional to resolution, and the reliable failures are counting, dense layout and small text rather than description."},{"slug":"weight-formats-and-conversion","title":"Formats, and what conversion costs you","url":"https://addaly.com/learn/open-models/weight-formats-and-conversion","api":"https://addaly.com/api/lesson/open-models/weight-formats-and-conversion","minutes":8,"keyIdea":"Conversion between weight formats is where chat templates, stop tokens and unrecognised architectures get silently mangled, so prefer official conversions and verify a converted file against the original on the same prompts."},{"slug":"stop-conditions","title":"Why it will not stop talking","url":"https://addaly.com/learn/open-models/stop-conditions","api":"https://addaly.com/api/lesson/open-models/stop-conditions","minutes":8,"keyIdea":"Runaway generation is almost always a stop condition rather than a bad model: several end-of-turn tokens, a template that never opened the assistant turn, a lossy conversion, or a serving layer ignoring generation_config.json."}]},{"slug":"making-it-run","title":"Making it run on the machine you have","summary":"Most writing about local models assumes a graphics card that most readers do not own. This block does the arithmetic instead: what quantisation actually does to the numbers, which bit width to pick, how to predict tokens per second from memory bandwidth before you download anything, how to serve many users on one GPU, where to get compute for nothing, when renting stops being cheaper than owning, and what genuinely runs on a phone.","outcome":"Size, quantise and serve an open model on hardware you actually have (a laptop, a phone, a free cloud tier or a rented GPU) predict its generation speed from memory bandwidth before running it, choose a bit width you can defend, and state the monthly token volume at which renting stops being cheaper than owning.","lessons":[{"slug":"choosing-for-the-job","title":"Choosing a Model for the Job","url":"https://addaly.com/learn/open-models/choosing-for-the-job","api":"https://addaly.com/api/lesson/open-models/choosing-for-the-job","minutes":9,"keyIdea":"Fit the constraints first, memory and latency and licence and language, then test the two or three models left standing."},{"slug":"quantisation-explained","title":"What quantisation actually does","url":"https://addaly.com/learn/open-models/quantisation-explained","api":"https://addaly.com/api/lesson/open-models/quantisation-explained","minutes":10,"keyIdea":"Quantisation stores weights as small integers with a shared scale per block, so a 4-bit model is really about 5 bits per weight, and because larger models carry more redundancy, a bigger model quantised harder usually beats a smaller one at full precision for the same memory."},{"slug":"choosing-a-bit-width","title":"Choosing a bit width you can defend","url":"https://addaly.com/learn/open-models/choosing-a-bit-width","api":"https://addaly.com/api/lesson/open-models/choosing-a-bit-width","minutes":8,"keyIdea":"Spend memory on parameters before precision down to about four bits, but expect quantisation to damage long-context retrieval and non-English performance well before it damages short English chat, so test at the bit width you will ship."},{"slug":"llama-cpp-in-practice","title":"llama.cpp, end to end","url":"https://addaly.com/learn/open-models/llama-cpp-in-practice","api":"https://addaly.com/api/lesson/open-models/llama-cpp-in-practice","minutes":10,"keyIdea":"llama.cpp is the engine under most desktop AI tools, and its important dials are the number of layers offloaded to the GPU, the context length that sets your cache allocation, and llama-bench reporting prefill and decode speed as two separate numbers."},{"slug":"ollama-and-the-friendly-path","title":"Ollama and the friendly path","url":"https://addaly.com/learn/open-models/ollama-and-the-friendly-path","api":"https://addaly.com/api/lesson/open-models/ollama-and-the-friendly-path","minutes":8,"keyIdea":"Wrappers like Ollama choose your quantisation, sampling defaults and context length for you, and the historic 2048-token context default is the single most common cause of a local model appearing to ignore the start of a document."},{"slug":"predicting-tokens-per-second","title":"Predicting speed before you download","url":"https://addaly.com/learn/open-models/predicting-tokens-per-second","api":"https://addaly.com/api/lesson/open-models/predicting-tokens-per-second","minutes":9,"keyIdea":"Decoding reads every active weight from memory once per token, so tokens per second is bounded by memory bandwidth divided by model file size, while prefill is compute-bound and therefore one or two orders of magnitude faster."},{"slug":"serving-many-users","title":"Serving many users at once","url":"https://addaly.com/learn/open-models/serving-many-users","api":"https://addaly.com/api/lesson/open-models/serving-many-users","minutes":9,"keyIdea":"Continuous batching and paged attention let one GPU serve many sequences because weights are read once per step and cache memory is allocated in blocks rather than reserved per request, trading a little per-user latency for several times the total throughput."},{"slug":"free-compute","title":"Running all of this without money","url":"https://addaly.com/learn/open-models/free-compute","api":"https://addaly.com/api/lesson/open-models/free-compute","minutes":8,"keyIdea":"Kaggle's weekly GPU hours, Colab's T4, free CPU instances and provider credits are enough to evaluate, fine-tune and batch-process without spending anything, provided every job checkpoints to durable storage and writes results incrementally."},{"slug":"rent-or-own","title":"Rent, or own: the arithmetic","url":"https://addaly.com/learn/open-models/rent-or-own","api":"https://addaly.com/api/lesson/open-models/rent-or-own","minutes":9,"keyIdea":"Breakeven against a rented GPU sits in the hundreds of millions of tokens a month and assumes high utilisation, so the real reasons to self-host are usually privacy, offline operation and permanence rather than cost."},{"slug":"models-on-phones","title":"What actually runs on a phone","url":"https://addaly.com/learn/open-models/models-on-phones","api":"https://addaly.com/api/lesson/open-models/models-on-phones","minutes":8,"keyIdea":"Mobile operating systems cap per-application memory, which limits on-device models to roughly 1 to 3 GB, and sustained generation is halved by thermal throttling, so a phone model is a private text-transformation engine, not a knowledgeable assistant."}]},{"slug":"getting-good-output","title":"Getting good output","summary":"An open model arrives with none of the scaffolding a commercial product puts around it: no hidden system prompt, no server-side reformatting, no safety layer, no tool harness. That is the freedom and it is also the work. This block covers the sampler, constrained decoding, prompting that survives a small model, examples, tool calls, agent loops, other languages, refusals, guardrails, and what to do when the model does not know.","outcome":"Take an open model producing bad output and identify whether the fault lies in the sampler, the prompt, the examples, the schema, the language or the model itself; then apply the cheapest correct fix, from a temperature change to a grammar-constrained decoder to a separate guardrail model, and demonstrate the improvement on a held set.","lessons":[{"slug":"sampling-parameters","title":"The sampler, and the defaults that ship broken","url":"https://addaly.com/learn/open-models/sampling-parameters","api":"https://addaly.com/api/lesson/open-models/sampling-parameters","minutes":9,"keyIdea":"The sampler converts logits into a token, and the common default of a repetition penalty above 1 actively damages JSON and code because those formats require repeated punctuation tokens."},{"slug":"structured-output","title":"Making the output valid by construction","url":"https://addaly.com/learn/open-models/structured-output","api":"https://addaly.com/api/lesson/open-models/structured-output","minutes":9,"keyIdea":"Grammar-constrained decoding masks illegal tokens at each step so invalid syntax becomes impossible, which converts parse failures into silently wrong values unless the schema gives the model an explicit way to express absence."},{"slug":"prompting-open-models","title":"What changes when nothing is hidden","url":"https://addaly.com/learn/open-models/prompting-open-models","api":"https://addaly.com/api/lesson/open-models/prompting-open-models","minutes":9,"keyIdea":"With open weights you supply the scaffolding a hosted product hides, so instructions belong at the end of the prompt, phrased positively, one job per call, and prompts must be versioned per model because they do not transfer between families."},{"slug":"examples-in-the-prompt","title":"Examples, and how to choose them","url":"https://addaly.com/learn/open-models/examples-in-the-prompt","api":"https://addaly.com/api/lesson/open-models/examples-in-the-prompt","minutes":8,"keyIdea":"Examples mainly teach the output format and the label space rather than the mapping, so consistency of format and balanced coverage of labels matter more than how subtle the individual answers are."},{"slug":"tool-calling-on-open-weights","title":"Tool calling, and what breaks at 8B","url":"https://addaly.com/learn/open-models/tool-calling-on-open-weights","api":"https://addaly.com/api/lesson/open-models/tool-calling-on-open-weights","minutes":9,"keyIdea":"Tool calling is a trained output format plus a matching server-side parser, and small models fail specifically on long tool lists, nested arguments and deciding not to call, so validate arguments and return errors as tool results rather than exceptions."},{"slug":"agents-on-small-models","title":"Agent loops on models that are not clever","url":"https://addaly.com/learn/open-models/agents-on-small-models","api":"https://addaly.com/api/lesson/open-models/agents-on-small-models","minutes":9,"keyIdea":"Agent loops on small models fail by never stopping, repeating actions, inventing observations, losing the goal and outgrowing the context, so hold the state, the deduplication and the step cap in code and reduce the number of model decisions rather than enlarging the model."},{"slug":"multilingual-reality","title":"What these models really do in your language","url":"https://addaly.com/learn/open-models/multilingual-reality","api":"https://addaly.com/api/lesson/open-models/multilingual-reality","minutes":9,"keyIdea":"Language support divides into well-supported, thin and nominal tiers with a steep cliff between the last two, script and register matter as much as language, and only a native speaker rating thirty real inputs will tell you which tier you are in."},{"slug":"refusals-and-uncensored-models","title":"Refusals, and the uncensored question","url":"https://addaly.com/learn/open-models/refusals-and-uncensored-models","api":"https://addaly.com/api/lesson/open-models/refusals-and-uncensored-models","minutes":9,"keyIdea":"Refusal is generated behaviour mediated by a direction in activation space that can be removed from open weights in an afternoon, so a boundary your product needs must be enforced outside the model rather than by its tuning."},{"slug":"guardrails-as-models","title":"Guardrails as a separate layer","url":"https://addaly.com/learn/open-models/guardrails-as-models","api":"https://addaly.com/api/lesson/open-models/guardrails-as-models","minutes":8,"keyIdea":"A separate classifier is a different failure surface from the generating model because it labels rather than obeys, so layer cheap deterministic checks, a small input classifier, the model and an output check, and never let any of it stand between a model and an irreversible action."},{"slug":"when-the-model-does-not-know","title":"When the model does not know","url":"https://addaly.com/learn/open-models/when-the-model-does-not-know","api":"https://addaly.com/api/lesson/open-models/when-the-model-does-not-know","minutes":9,"keyIdea":"A model always produces its most likely continuation, so abstention must be made available in the schema and rewarded in the prompt, and requiring a verifiable quotation turns invisible fabrication into a check that code can fail."}]},{"slug":"adapting-a-model","title":"Adapting a model to your work","summary":"Fine-tuning is the freedom that open weights actually deliver, and it is also the most over-reached-for tool in the field. This block gives the decision rule for when it is warranted, the arithmetic of LoRA and QLoRA, how to build a dataset that does not encode your own inconsistency, a run you can complete on free hardware, preference tuning, distillation, model merging, the forgetting you have to measure, and how to ship the result.","outcome":"Decide with evidence whether a task needs fine-tuning at all; if it does, build the dataset, size a LoRA to fit free hardware, run it, and demonstrate on a held-out set and a regression suite that the adapted model is better at the task and no worse at everything else.","lessons":[{"slug":"when-not-to-fine-tune","title":"When not to fine-tune","url":"https://addaly.com/learn/open-models/when-not-to-fine-tune","api":"https://addaly.com/api/lesson/open-models/when-not-to-fine-tune","minutes":8,"keyIdea":"Fine-tuning reliably changes form and unreliably changes knowledge, so the honest test is whether it beats your best prompt plus retrieval by a margin that justifies re-tuning every time the base model is superseded."},{"slug":"lora-mechanics","title":"What a LoRA actually is","url":"https://addaly.com/learn/open-models/lora-mechanics","api":"https://addaly.com/api/lesson/open-models/lora-mechanics","minutes":9,"keyIdea":"LoRA freezes the base and trains a low-rank product added to each targeted matrix, so under 1% of parameters carry gradients, and rank, alpha and which modules are targeted are the three settings that decide whether the run does anything."},{"slug":"qlora-and-memory","title":"Fitting a fine-tune in 16 GB","url":"https://addaly.com/learn/open-models/qlora-and-memory","api":"https://addaly.com/api/lesson/open-models/qlora-and-memory","minutes":9,"keyIdea":"Training memory is weights plus gradients plus optimiser state plus activations, and QLoRA collapses the first three by freezing a 4-bit base and training a small adapter, leaving activations, controlled by sequence length, batch size and gradient checkpointing, as the dial you actually turn."},{"slug":"the-fine-tuning-dataset","title":"Five hundred examples, done properly","url":"https://addaly.com/learn/open-models/the-fine-tuning-dataset","api":"https://addaly.com/api/lesson/open-models/the-fine-tuning-dataset","minutes":9,"keyIdea":"A fine-tune inherits every property of its dataset, so diversity of real inputs, byte-identical output format, measured label agreement and deduplicated splits matter far more than the number of examples."},{"slug":"running-your-first-fine-tune","title":"A real run, on free hardware","url":"https://addaly.com/learn/open-models/running-your-first-fine-tune","api":"https://addaly.com/api/lesson/open-models/running-your-first-fine-tune","minutes":10,"keyIdea":"A LoRA run is thirty lines and an hour on free hardware, but the loss curve is only diagnostics: the result is the task metric on a held-out set compared against the base model with your best prompt, at the same settings."},{"slug":"preference-tuning","title":"Teaching it which answer is better","url":"https://addaly.com/learn/open-models/preference-tuning","api":"https://addaly.com/api/lesson/open-models/preference-tuning","minutes":9,"keyIdea":"Preference tuning learns from pairs or binary judgements about which output is better, fixing verbosity, tone and refusal calibration that supervised tuning cannot, at an order of magnitude lower learning rate and with a strong tendency to make models longer."},{"slug":"distilling-a-bigger-model","title":"Distilling a larger model into a smaller one","url":"https://addaly.com/learn/open-models/distilling-a-bigger-model","api":"https://addaly.com/api/lesson/open-models/distilling-a-bigger-model","minutes":9,"keyIdea":"Response distillation is supervised fine-tuning on a teacher's outputs, so the student inherits the teacher's errors and its style, cannot exceed it, and must be measured against ground truth rather than against agreement with the teacher."},{"slug":"catastrophic-forgetting","title":"Measuring what you broke","url":"https://addaly.com/learn/open-models/catastrophic-forgetting","api":"https://addaly.com/api/lesson/open-models/catastrophic-forgetting","minutes":8,"keyIdea":"Fine-tuning moves the weights that held everything else, so report the task gain alongside a fifty-item regression set covering general instructions, other languages, alternative formats and refusals. And mixing general data into training usually keeps most of the gain with a fraction of the loss."},{"slug":"merging-models","title":"Merging models, and what it really does","url":"https://addaly.com/learn/open-models/merging-models","api":"https://addaly.com/api/lesson/open-models/merging-models","minutes":8,"keyIdea":"Merging averages fine-tuning deltas from a shared base, which works because those deltas stay in a connected low-loss region. And it is most reliable when merging your own runs and least trustworthy when a merge was selected on the benchmark it is reported against."},{"slug":"continued-pretraining","title":"When the model does not have your language at all","url":"https://addaly.com/learn/open-models/continued-pretraining","api":"https://addaly.com/api/lesson/open-models/continued-pretraining","minutes":8,"keyIdea":"Continued pretraining on raw text is the only fix for a language or notation the model never learned, it needs billions of tokens and vocabulary extension with mean-initialised embeddings, and it destroys instruction following unless followed by a fresh supervised tuning stage."},{"slug":"shipping-a-fine-tune","title":"Shipping the adapter","url":"https://addaly.com/learn/open-models/shipping-a-fine-tune","api":"https://addaly.com/api/lesson/open-models/shipping-a-fine-tune","minutes":8,"keyIdea":"An unmerged adapter lets one base model serve many tuned behaviours and lets untuned traffic bypass the tune entirely, and a fine-tuned deployment must pin the base revision, adapter, prompt, sampler and both evaluation numbers as a single versioned unit."}]},{"slug":"judging-models-and-claims","title":"Judging models and claims","summary":"Every part of this ecosystem asks you to believe a number: a benchmark table, a leaderboard position, a quantisation that is claimed to be lossless, an embedding model at the top of a chart, a price per million tokens. This block is about generating your own evidence instead: reading a model card for what it does not say, running the standard harness yourself, proving what a quantisation cost, measuring latency and cost per task properly, and swapping a model under a live product without breaking it.","outcome":"Settle a model choice with evidence you produced yourself (a private held-out set, a pinned harness, a quantisation compared against its full-precision reference, latency measured at real concurrency and cost expressed per task rather than per token) and explain to a sceptical colleague which published claims about that model you believe and why.","lessons":[{"slug":"what-benchmarks-measure","title":"What Benchmarks Actually Measure","url":"https://addaly.com/learn/open-models/what-benchmarks-measure","api":"https://addaly.com/api/lesson/open-models/what-benchmarks-measure","minutes":9,"keyIdea":"A benchmark result is evidence about that benchmark; transfer to your task is a hypothesis you have to test."},{"slug":"reading-a-model-card-critically","title":"Reading a model card for what it does not say","url":"https://addaly.com/learn/open-models/reading-a-model-card-critically","api":"https://addaly.com/api/lesson/open-models/reading-a-model-card-critically","minutes":8,"keyIdea":"A model card's front matter is structured and checkable while its prose is a set of claims, and a benchmark number without the harness commit, shot count, aggregation, decoding settings and self-run baselines is not reproducible evidence."},{"slug":"leaderboards-that-still-work","title":"The leaderboards that still carry information","url":"https://addaly.com/learn/open-models/leaderboards-that-still-work","api":"https://addaly.com/api/lesson/open-models/leaderboards-that-still-work","minutes":9,"keyIdea":"Leaderboards die from saturation and contamination, so the ones that still carry information use private or rotating items, execution-based verification or fresh human prompts, and even then their proper use is shortlisting, not deciding."},{"slug":"running-the-eval-harness","title":"Running the standard harness yourself","url":"https://addaly.com/learn/open-models/running-the-eval-harness","api":"https://addaly.com/api/lesson/open-models/running-the-eval-harness","minutes":9,"keyIdea":"Running lm-evaluation-harness yourself against any OpenAI-compatible endpoint is how you calibrate published claims and catch regressions, and your number will differ from a paper's mostly through shot count, chat template and harness version, so pin the commit and log the samples."},{"slug":"comparing-quantisations","title":"Proving what a quantisation cost","url":"https://addaly.com/learn/open-models/comparing-quantisations","api":"https://addaly.com/api/lesson/open-models/comparing-quantisations","minutes":9,"keyIdea":"Perplexity is a screening test; the sharper measurement is divergence from the full-precision model on the same corpus, reported as the fraction of tokens where the top choice differs, plus agreement on your own examples at long context and in your languages."},{"slug":"evaluating-an-embedding-model","title":"Evaluating an embedding model on your corpus","url":"https://addaly.com/learn/open-models/evaluating-an-embedding-model","api":"https://addaly.com/api/lesson/open-models/evaluating-an-embedding-model","minutes":9,"keyIdea":"Retrieval is cheap to evaluate on your own corpus with 50 labelled queries, and the grid of embedding model against chunk size usually shows chunking moving recall more than the model does."},{"slug":"measuring-latency-properly","title":"Measuring latency properly","url":"https://addaly.com/learn/open-models/measuring-latency-properly","api":"https://addaly.com/api/lesson/open-models/measuring-latency-properly","minutes":8,"keyIdea":"Report time to first token and per-token latency separately at p95 and at real concurrency after discarding warm-up requests, because prefill and decode are limited by different resources and the mean hides the tail."},{"slug":"cost-per-task","title":"Cost per task, not cost per token","url":"https://addaly.com/learn/open-models/cost-per-task","api":"https://addaly.com/api/lesson/open-models/cost-per-task","minutes":8,"keyIdea":"Cost is tokens per task times price times retries, so a cheaper model carrying a long few-shot prompt or a reasoning model spending output tokens on thinking can cost several times more than a dearer model with a short prompt."},{"slug":"swapping-the-model","title":"Swapping the model under a live product","url":"https://addaly.com/learn/open-models/swapping-the-model","api":"https://addaly.com/api/lesson/open-models/swapping-the-model","minutes":9,"keyIdea":"A model swap is a release, not a configuration change: compare each model with a prompt tuned for it, run the regression, refusal, cost and latency checks, shadow real traffic before canarying, and pin revisions and providers so nobody swaps the model for you."},{"slug":"evaluate-in-an-afternoon","title":"Evaluate a Model on Your Task in an Afternoon","url":"https://addaly.com/learn/open-models/evaluate-in-an-afternoon","api":"https://addaly.com/api/lesson/open-models/evaluate-in-an-afternoon","minutes":10,"keyIdea":"Forty real examples and a fixed harness settle a model choice better than any leaderboard, in about four hours."}]}]},{"slug":"running-models-yourself","title":"Running Models Yourself","tagline":"Local and self-hosted LLMs, with the arithmetic instead of the marketing.","description":"A practical course on running large language models on your own hardware. It teaches the arithmetic that decides whether a model fits, what quantisation actually costs you, which serving engine wins under which conditions, and when local is genuinely cheaper than an API, with real commands, real numbers, and no engine advertising. Written for people on ordinary laptops as much as for people with a 4090.","level":"intermediate","track":"deep","url":"https://addaly.com/learn/running-models-yourself","lessons":82,"minutes":719,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/running-models-yourself.pdf","pages":472,"bytes":4973090,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/running-models-yourself.pdf","cover":"https://addaly.com/textbooks/look/running-models-yourself/1.webp?v=2026-10-07-4973090"},"film":null,"modules":[{"slug":"deciding-to-run-it-yourself","title":"Deciding to run it yourself","summary":"Before any download, two questions have to be separated: is this model good enough for the work, and can this machine run it. This block answers the first one. What open weights are and what their licences actually permit, how to read a model card without being sold to, what each size class can genuinely do, why a mixture-of-experts model breaks the usual size intuition, and an hour-long audition that costs about a dollar and settles the question before you spend anything on hardware.","outcome":"Decide whether a stated task belongs on your own hardware: by auditioning the exact open weights through a hosted copy, naming the constraint that forces local rather than assuming one, reading a licence well enough to say what you may ship, and stating the capability ceiling the weights impose regardless of the machine.","lessons":[{"slug":"why-run-a-model-yourself","title":"Why run a model yourself, and when not to","url":"https://addaly.com/learn/running-models-yourself/why-run-a-model-yourself","api":"https://addaly.com/api/lesson/running-models-yourself/why-run-a-model-yourself","minutes":6,"keyIdea":"The weights set the quality ceiling; hardware only decides whether you can reach it and how fast."},{"slug":"the-open-weights-landscape","title":"What \"open\" means, and what it does not","url":"https://addaly.com/learn/running-models-yourself/the-open-weights-landscape","api":"https://addaly.com/api/lesson/running-models-yourself/the-open-weights-landscape","minutes":10,"keyIdea":"\"Open\" splits into open weights, open source and open data: most famous models are only the first, and a base model's licence and use policy follow every fine-tune and quant made from it."},{"slug":"reading-a-model-card","title":"Reading a model card without being sold to","url":"https://addaly.com/learn/running-models-yourself/reading-a-model-card","api":"https://addaly.com/api/lesson/running-models-yourself/reading-a-model-card","minutes":9,"keyIdea":"The Files tab of a model card is verifiable and the prose is a claim: config.json, the shard sizes and the chat template tell you more in three minutes than any benchmark table on the page."},{"slug":"picking-a-size","title":"What each size class can actually do","url":"https://addaly.com/learn/running-models-yourself/picking-a-size","api":"https://addaly.com/api/lesson/running-models-yourself/picking-a-size","minutes":10,"keyIdea":"Choose a size class by the job's sensitivity to size (classification and extraction barely care, multi-step reasoning and tool loops care enormously) and try a newer or task-specialised model in the same class before reaching for a bigger one."},{"slug":"mixture-of-experts-locally","title":"Mixture of experts, and why it changes the sum","url":"https://addaly.com/learn/running-models-yourself/mixture-of-experts-locally","api":"https://addaly.com/api/lesson/running-models-yourself/mixture-of-experts-locally","minutes":9,"keyIdea":"A mixture-of-experts model costs memory like its total parameter count and generates at the speed of its active parameter count, which makes it the right choice on a machine with abundant slow RAM and the wrong one on a small GPU."},{"slug":"base-instruct-and-reasoning-variants","title":"Base, instruct and reasoning: three different products","url":"https://addaly.com/learn/running-models-yourself/base-instruct-and-reasoning-variants","api":"https://addaly.com/api/lesson/running-models-yourself/base-instruct-and-reasoning-variants","minutes":8,"keyIdea":"Base, instruct and reasoning variants are different products from the same architecture: check for a chat template before blaming the model, and never feed a thinking block back into the next turn."},{"slug":"the-hour-long-audition","title":"The audition: settling it for about a dollar","url":"https://addaly.com/learn/running-models-yourself/the-hour-long-audition","api":"https://addaly.com/api/lesson/running-models-yourself/the-hour-long-audition","minutes":9,"keyIdea":"Test the weights before the hardware: thirty real items graded blind against a hosted copy of the exact open model answers the question a GPU purchase cannot, for under a dollar."},{"slug":"what-it-will-never-do","title":"The ceiling the weights impose","url":"https://addaly.com/learn/running-models-yourself/what-it-will-never-do","api":"https://addaly.com/api/lesson/running-models-yourself/what-it-will-never-do","minutes":8,"keyIdea":"Every capability limit of a local model lives in the weights, so design around it: retrieve rather than recall, one step per call, constrain and verify the output, and route the hard minority elsewhere."},{"slug":"local-is-not-automatically-private","title":"Local is not automatically private","url":"https://addaly.com/learn/running-models-yourself/local-is-not-automatically-private","api":"https://addaly.com/api/lesson/running-models-yourself/local-is-not-automatically-private","minutes":8,"keyIdea":"Local weights do not leak, but the application, the plugins, the hybrid features and above all your own prompt logs can: verify with a firewall block and a traffic capture rather than trusting the word local."}]},{"slug":"the-memory-arithmetic","title":"The memory arithmetic","summary":"Everything about running a model on your own machine reduces to two sums and one ceiling: what occupies memory, and how fast memory can be read. This block does both properly: the KV cache and why two models of the same size can differ sixfold, the two very different phases of inference and why only one of them is helped by a faster processor, where the weights physically live and what each hop costs, what a second graphics card actually buys, and the ordered list of things to try when it does not fit.","outcome":"Compute, for any model and any context length, whether it fits on a stated machine and roughly how fast it will run: naming which of weights, KV cache, bandwidth or interconnect is the binding constraint, and choosing the remedy that costs the least quality when it does not fit.","lessons":[{"slug":"does-it-fit","title":"Does it fit: the arithmetic","url":"https://addaly.com/learn/running-models-yourself/does-it-fit","api":"https://addaly.com/api/lesson/running-models-yourself/does-it-fit","minutes":9,"keyIdea":"Weights are fixed; the KV cache grows with context and layers, and that is what usually breaks the budget."},{"slug":"small-hardware-reality","title":"What actually runs on 8GB","url":"https://addaly.com/learn/running-models-yourself/small-hardware-reality","api":"https://addaly.com/api/lesson/running-models-yourself/small-hardware-reality","minutes":8,"keyIdea":"Generation speed is memory bandwidth divided by model size; cores and capacity do not change that ceiling."},{"slug":"the-kv-cache-in-depth","title":"The KV cache, in depth","url":"https://addaly.com/learn/running-models-yourself/the-kv-cache-in-depth","api":"https://addaly.com/api/lesson/running-models-yourself/the-kv-cache-in-depth","minutes":10,"keyIdea":"The KV cache is the term that decides whether a model fits, and its size per token is set by the attention architecture: grouped-query, sliding-window and latent attention differ by several times at the same parameter count."},{"slug":"prefill-and-decode","title":"Prefill and decode are two different machines","url":"https://addaly.com/learn/running-models-yourself/prefill-and-decode","api":"https://addaly.com/api/lesson/running-models-yourself/prefill-and-decode","minutes":9,"keyIdea":"Prefill is compute-bound and decode is memory-bandwidth-bound, so the same hardware change can transform one and do nothing for the other: measure and reason about them separately, always."},{"slug":"where-the-model-lives","title":"Where the model physically lives","url":"https://addaly.com/learn/running-models-yourself/where-the-model-lives","api":"https://addaly.com/api/lesson/running-models-yourself/where-the-model-lives","minutes":9,"keyIdea":"Speed is decided by which memory the weights sit in, and a partial offload behaves like a harmonic mean: a tenth of the layers left on the CPU can cost half the speed, so fitting entirely usually beats fitting better."},{"slug":"cpu-inference-honestly","title":"CPU inference, honestly","url":"https://addaly.com/learn/running-models-yourself/cpu-inference-honestly","api":"https://addaly.com/api/lesson/running-models-yourself/cpu-inference-honestly","minutes":9,"keyIdea":"CPU generation speed is set by memory channels and memory speed rather than cores: populate every channel, thread to physical cores, and expect cores to help prompt processing while doing almost nothing for generation."},{"slug":"more-than-one-gpu","title":"More than one GPU","url":"https://addaly.com/learn/running-models-yourself/more-than-one-gpu","api":"https://addaly.com/api/lesson/running-models-yourself/more-than-one-gpu","minutes":9,"keyIdea":"A second card doubles memory almost for free with a layer split, speeds one user only under tensor parallelism and only over a fast link, and often serves concurrent users best as two independent copies of the model."},{"slug":"measuring-your-machine","title":"Measuring what you actually have","url":"https://addaly.com/learn/running-models-yourself/measuring-your-machine","api":"https://addaly.com/api/lesson/running-models-yourself/measuring-your-machine","minutes":8,"keyIdea":"Ten minutes of measurement on your own machine (prefill and decode separately, memory used, temperature over time) replaces every published benchmark and diagnoses most local performance problems immediately."},{"slug":"when-it-does-not-fit","title":"When it does not fit: the ordered remedies","url":"https://addaly.com/learn/running-models-yourself/when-it-does-not-fit","api":"https://addaly.com/api/lesson/running-models-yourself/when-it-does-not-fit","minutes":9,"keyIdea":"Work out whether weights or cache is the oversized term, then walk the ladder from free changes (context length, 8-bit cache, evicting other processes) down to quantisation and offload, which cost real quality."}]},{"slug":"quantisation-and-formats","title":"Quantisation and model formats","summary":"Almost nobody runs a model at the precision it was trained in, so almost everybody is running a lossy copy and most do not know what it cost them. This block opens the file: what a GGUF actually contains, how k-quants and importance matrices decide which weights to protect, what the GPU-side formats do differently, how to quantise a model yourself, and how to measure the damage instead of quoting a perplexity number that cannot detect it.","outcome":"Choose a quantisation format and bit rate for a stated model, machine and task; produce a quantised model yourself from the original weights; and measure the resulting damage with a method that can actually detect it, rather than relying on a perplexity delta that cannot.","lessons":[{"slug":"quantisation-properly","title":"Quantisation, properly","url":"https://addaly.com/learn/running-models-yourself/quantisation-properly","api":"https://addaly.com/api/lesson/running-models-yourself/quantisation-properly","minutes":9,"keyIdea":"Quantisation damages precision-critical work first (syntax, long instructions, rare tokens) while fluency stays intact."},{"slug":"inside-a-gguf-file","title":"Inside a GGUF file","url":"https://addaly.com/learn/running-models-yourself/inside-a-gguf-file","api":"https://addaly.com/api/lesson/running-models-yourself/inside-a-gguf-file","minutes":8,"keyIdea":"A GGUF is one memory-mappable file carrying weights, tokeniser and chat template together, with different tensors quantised at different bit rates, and its metadata can be inspected and repaired without re-quantising anything."},{"slug":"k-quants-and-importance-matrices","title":"K-quants and importance matrices","url":"https://addaly.com/learn/running-models-yourself/k-quants-and-importance-matrices","api":"https://addaly.com/api/lesson/running-models-yourself/k-quants-and-importance-matrices","minutes":9,"keyIdea":"K-quants spend bits where the model is sensitive and importance matrices decide where that is, so the calibration text silently determines which languages and tasks a low-bit quant preserves."},{"slug":"gpu-quantisation-formats","title":"GPTQ, AWQ and the GPU-side formats","url":"https://addaly.com/learn/running-models-yourself/gpu-quantisation-formats","api":"https://addaly.com/api/lesson/running-models-yourself/gpu-quantisation-formats","minutes":9,"keyIdea":"GPTQ compensates for rounding error as it goes and AWQ rescales the few channels that see large activations, but the kernel that reads the file matters as much as the algorithm that wrote it."},{"slug":"fp8-and-native-low-precision","title":"FP8 and models born quantised","url":"https://addaly.com/learn/running-models-yourself/fp8-and-native-low-precision","api":"https://addaly.com/api/lesson/running-models-yourself/fp8-and-native-low-precision","minutes":8,"keyIdea":"FP8 spends its bits on exponent rather than precision, which is why it survives the outliers that hurt integer quantisation, and a quantisation-aware-trained model at the same bit rate beats any post-training quant of it."},{"slug":"quantising-a-model-yourself","title":"Quantising a model yourself","url":"https://addaly.com/learn/running-models-yourself/quantising-a-model-yourself","api":"https://addaly.com/api/lesson/running-models-yourself/quantising-a-model-yourself","minutes":10,"keyIdea":"Quantise from the original weights, never from another quant, and check the chat template and tokeniser survived the conversion: those two mistakes account for most locally produced models that appear to be broken."},{"slug":"measuring-quantisation-damage","title":"Measuring the damage, properly","url":"https://addaly.com/learn/running-models-yourself/measuring-quantisation-damage","api":"https://addaly.com/api/lesson/running-models-yourself/measuring-quantisation-damage","minutes":9,"keyIdea":"Perplexity averages away exactly the tokens quantisation damages: measure with KL divergence against the original and with a task set containing exact-syntax, long-instruction and non-English items at temperature 0."},{"slug":"the-size-precision-frontier","title":"Bigger and crushed, or smaller and clean","url":"https://addaly.com/learn/running-models-yourself/the-size-precision-frontier","api":"https://addaly.com/api/lesson/running-models-yourself/the-size-precision-frontier","minutes":8,"keyIdea":"For a fixed memory budget, more parameters at lower precision wins down to about 4 bits, but the rule optimises quality per gigabyte, and speed, context length and task specialisation routinely override it."},{"slug":"pruning-distillation-and-other-shrinking","title":"The other ways to make a model smaller","url":"https://addaly.com/learn/running-models-yourself/pruning-distillation-and-other-shrinking","api":"https://addaly.com/api/lesson/running-models-yourself/pruning-distillation-and-other-shrinking","minutes":8,"keyIdea":"Quantisation, pruning and distillation each remove a different kind of redundancy, and knowing which one a released model used predicts how it will fail: pruned models unevenly, distilled models confidently, quantised models on precision."}]},{"slug":"getting-it-running","title":"Getting it running","summary":"The gap between a downloaded file and a working assistant is a handful of unglamorous details, and each of them has a failure mode that looks like a stupid model. This block covers the whole path: choosing and installing the right build for your hardware, fetching weights without wasting a day of bandwidth, the chat template that decides whether the model understands you at all, context settings that truncate in silence, the API every engine speaks, constrained output that parses, and the embedding, speech and vision models that run beside the language model.","outcome":"Take a model from a repository to a working local endpoint on your own hardware (correct build, correct template, correct context configuration) call it from code through the OpenAI-compatible API with structured output that validates, and add embedding, transcription or vision models alongside it.","lessons":[{"slug":"ollama-and-llama-cpp","title":"Ollama and llama.cpp","url":"https://addaly.com/learn/running-models-yourself/ollama-and-llama-cpp","api":"https://addaly.com/api/lesson/running-models-yourself/ollama-and-llama-cpp","minutes":8,"keyIdea":"Ollama is llama.cpp plus a registry, a template and sane defaults: leave it only for a flag it does not expose."},{"slug":"interfaces","title":"Interfaces: what each one is for","url":"https://addaly.com/learn/running-models-yourself/interfaces","api":"https://addaly.com/api/lesson/running-models-yourself/interfaces","minutes":6,"keyIdea":"The interface never changes the model, only what gets sent, so compare requests, not apps."},{"slug":"installing-the-right-build","title":"Installing the right build for your hardware","url":"https://addaly.com/learn/running-models-yourself/installing-the-right-build","api":"https://addaly.com/api/lesson/running-models-yourself/installing-the-right-build","minutes":9,"keyIdea":"The build has to match the accelerator, and a binary compiled without your backend runs silently on the CPU. Verify with a benchmark that names the device before configuring anything else."},{"slug":"downloading-models-properly","title":"Downloading models without wasting a day","url":"https://addaly.com/learn/running-models-yourself/downloading-models-properly","api":"https://addaly.com/api/lesson/running-models-yourself/downloading-models-properly","minutes":8,"keyIdea":"Download one quant with an include filter, pin the revision when the result matters, and check the two config files before committing to gigabytes: model repositories are mutable and most of them contain several copies of the same model."},{"slug":"chat-templates","title":"Chat templates: the most common silent failure","url":"https://addaly.com/learn/running-models-yourself/chat-templates","api":"https://addaly.com/api/lesson/running-models-yourself/chat-templates","minutes":10,"keyIdea":"The model receives one formatted string, not a message list, and a wrong template or a missing stop token produces exactly the symptoms people blame on the weights: print the actual prompt before concluding anything."},{"slug":"context-settings-that-truncate-in-silence","title":"Context settings that truncate in silence","url":"https://addaly.com/learn/running-models-yourself/context-settings-that-truncate-in-silence","api":"https://addaly.com/api/lesson/running-models-yourself/context-settings-that-truncate-in-silence","minutes":9,"keyIdea":"Trained length, allocated window and what the client sends are three different numbers, and the smallest wins silently: check the prompt token count against the configured window before blaming the model's memory."},{"slug":"the-openai-compatible-api","title":"The API every engine speaks","url":"https://addaly.com/learn/running-models-yourself/the-openai-compatible-api","api":"https://addaly.com/api/lesson/running-models-yourself/the-openai-compatible-api","minutes":8,"keyIdea":"Every local engine speaks the same HTTP dialect, so code moves between local and hosted unchanged, but compatibility is a claim about shape, and unknown parameters are usually accepted and silently ignored."},{"slug":"structured-output-locally","title":"Output that parses every time","url":"https://addaly.com/learn/running-models-yourself/structured-output-locally","api":"https://addaly.com/api/lesson/running-models-yourself/structured-output-locally","minutes":9,"keyIdea":"A grammar makes invalid output impossible by zeroing illegal tokens at each step, but it guarantees only shape: put a reasoning field first, keep schemas small, and always include a way for the model to say it does not know."},{"slug":"embeddings-and-rerankers-locally","title":"Embeddings and rerankers on your own machine","url":"https://addaly.com/learn/running-models-yourself/embeddings-and-rerankers-locally","api":"https://addaly.com/api/lesson/running-models-yourself/embeddings-and-rerankers-locally","minutes":10,"keyIdea":"Embedding models are small enough to run on any CPU and are the foundation of local retrieval, but similarity is not relevance: pair them with a cross-encoder reranker and exact matching, and expect negation to be invisible."},{"slug":"speech-and-vision-locally","title":"Speech, vision and the rest of the local stack","url":"https://addaly.com/learn/running-models-yourself/speech-and-vision-locally","api":"https://addaly.com/api/lesson/running-models-yourself/speech-and-vision-locally","minutes":9,"keyIdea":"Transcription, embedding, reranking and speech synthesis all run on an ordinary CPU, so a complete private stack needs a GPU only for the language model. And a vision model needs its projector file or it loads without being able to see."}]},{"slug":"serving-and-performance","title":"Serving engines and performance","summary":"Once more than one request exists at a time, the engine's scheduler matters more than the model. This block takes apart the machinery that separates a serving stack from a loop around a model: iteration-level batching, cache blocks shared as a prefix tree, drafting several tokens at once and checking them in parallel, the attention kernels underneath all of it, and how to run a load test whose numbers mean something. It ends with an ordered tuning checklist and what to do when one machine has to hold more than one model.","outcome":"Configure and tune a serving engine for a stated load (batching, cache blocks, prefix reuse, speculative drafting) measure it with an open-loop load test reporting percentiles rather than averages, and say which single change would raise the number that is actually limiting you.","lessons":[{"slug":"engines-and-what-faster-means","title":"Serving engines, and what \"faster\" means","url":"https://addaly.com/learn/running-models-yourself/engines-and-what-faster-means","api":"https://addaly.com/api/lesson/running-models-yourself/engines-and-what-faster-means","minutes":11,"keyIdea":"Choose an engine by your concurrency pattern; single-stream speed and aggregate throughput are different, opposing numbers."},{"slug":"continuous-batching","title":"Continuous batching, and the queue underneath it","url":"https://addaly.com/learn/running-models-yourself/continuous-batching","api":"https://addaly.com/api/lesson/running-models-yourself/continuous-batching","minutes":9,"keyIdea":"Continuous batching re-forms the batch after every decoding step, so a new request waits milliseconds rather than for the previous batch to drain, and preemption in the logs means your cache memory is too small for the traffic."},{"slug":"prefix-caching-properly","title":"Prefix caching, and how to design prompts for it","url":"https://addaly.com/learn/running-models-yourself/prefix-caching-properly","api":"https://addaly.com/api/lesson/running-models-yourself/prefix-caching-properly","minutes":9,"keyIdea":"Prefix caching reuses the KV cache for an exact leading match, so fixed content goes first and anything variable (a timestamp, a session id) goes last, or the cache never hits at all."},{"slug":"speculative-decoding","title":"Speculative decoding: several tokens per weight read","url":"https://addaly.com/learn/running-models-yourself/speculative-decoding","api":"https://addaly.com/api/lesson/running-models-yourself/speculative-decoding","minutes":9,"keyIdea":"A draft model proposes several tokens and the full model verifies them in one pass with identical output distribution; the gain is entirely governed by acceptance rate, and it disappears on a heavily batched server where there is no idle compute left."},{"slug":"attention-kernels","title":"The kernels under everything: flash and paged attention","url":"https://addaly.com/learn/running-models-yourself/attention-kernels","api":"https://addaly.com/api/lesson/running-models-yourself/attention-kernels","minutes":9,"keyIdea":"FlashAttention removes the quadratic intermediate matrix and PagedAttention removes the worst-case cache reservation, and the kernel that reads a quantised file matters as much as the file, which is why a 4-bit model can be slower than fp16."},{"slug":"load-testing-properly","title":"A load test whose numbers mean something","url":"https://addaly.com/learn/running-models-yourself/load-testing-properly","api":"https://addaly.com/api/lesson/running-models-yourself/load-testing-properly","minutes":9,"keyIdea":"Test with a fixed arrival rate rather than fixed concurrency, with prompt and output lengths drawn from real traffic, and report p95 alongside the median: a closed-loop test on uniform prompts cannot show you the queue that will actually break the service."},{"slug":"the-tuning-checklist","title":"The tuning checklist, in order","url":"https://addaly.com/learn/running-models-yourself/the-tuning-checklist","api":"https://addaly.com/api/lesson/running-models-yourself/the-tuning-checklist","minutes":8,"keyIdea":"Tune in order (accelerator active, fast kernels, model fully resident, context sized, cache quantised, prefix caching, then batching) changing one thing at a time against a named number and writing down what happened."},{"slug":"running-several-models","title":"One machine, several models","url":"https://addaly.com/learn/running-models-yourself/running-several-models","api":"https://addaly.com/api/lesson/running-models-yourself/running-several-models","minutes":9,"keyIdea":"Add the model sizes before designing anything: embedding and reranking models are small enough to stay resident, and several fine-tunes of one base should be served as adapters rather than as separate models."},{"slug":"queueing-and-backpressure","title":"Queues, timeouts and refusing work gracefully","url":"https://addaly.com/learn/running-models-yourself/queueing-and-backpressure","api":"https://addaly.com/api/lesson/running-models-yourself/queueing-and-backpressure","minutes":8,"keyIdea":"Past capacity, an unbounded queue turns a throughput problem into an outage: cap the queue, refuse fast with 429, cancel on client disconnect, and decide the fallback before the incident rather than during it."}]},{"slug":"getting-good-output","title":"Getting good output","summary":"When a local model disappoints, the weights are the last thing to blame and usually the first thing blamed. This block works through everything between the model and the text: the samplers that choose each token and the newer ones that fix repetition without breaking syntax, how prompting a small model differs from prompting a large one, tool calls that actually parse, what long context does to quality, why the same seed gives different answers, and a diagnostic ladder that finds the real cause in the right order.","outcome":"Diagnose a disappointing local output to its actual cause (sampler, template, prompt, context length, quantisation or the weights) in a defined order, and build a small evaluation harness that tells you whether any change you make is an improvement or noise.","lessons":[{"slug":"sampling-is-often-the-problem","title":"Sampling: why output quality is often not the model","url":"https://addaly.com/learn/running-models-yourself/sampling-is-often-the-problem","api":"https://addaly.com/api/lesson/running-models-yourself/sampling-is-often-the-problem","minutes":8,"keyIdea":"The sampler chooses; before blaming the model, check the template, the context, and one knob at a time."},{"slug":"advanced-samplers","title":"The samplers most interfaces do not show you","url":"https://addaly.com/learn/running-models-yourself/advanced-samplers","api":"https://addaly.com/api/lesson/running-models-yourself/advanced-samplers","minutes":9,"keyIdea":"DRY penalises repeated sequences rather than repeated tokens, which is why it suppresses looping without breaking brackets and indentation the way repetition_penalty does at any effective setting."},{"slug":"prompting-a-small-model","title":"Prompting a small model is a different craft","url":"https://addaly.com/learn/running-models-yourself/prompting-a-small-model","api":"https://addaly.com/api/lesson/running-models-yourself/prompting-a-small-model","minutes":9,"keyIdea":"Small models follow demonstrations better than descriptions and short ordered lists better than paragraphs: three to five instructions per call, format shown by example, and the key constraint repeated at the end where it is acted on."},{"slug":"few-shot-and-format-anchoring","title":"Examples, anchoring and getting the shape right","url":"https://addaly.com/learn/running-models-yourself/few-shot-and-format-anchoring","api":"https://addaly.com/api/lesson/running-models-yourself/few-shot-and-format-anchoring","minutes":8,"keyIdea":"Demonstrate rather than describe, cover the awkward cases in the examples, and end the prompt where the answer starts: anchoring the assistant's first tokens removes formatting failures without any grammar machinery."},{"slug":"tool-calling-locally","title":"Tool calling that survives contact with a small model","url":"https://addaly.com/learn/running-models-yourself/tool-calling-locally","api":"https://addaly.com/api/lesson/running-models-yourself/tool-calling-locally","minutes":9,"keyIdea":"Tool calling is ordinary generation plus a parser, so match the parser to the model family, constrain the syntax with a grammar, validate the meaning in code, and cap the chain: reliability compounds and no prompt fixes an exponent."},{"slug":"long-context-in-practice","title":"Long context in practice","url":"https://addaly.com/learn/running-models-yourself/long-context-in-practice","api":"https://addaly.com/api/lesson/running-models-yourself/long-context-in-practice","minutes":9,"keyIdea":"Advertised context is a capacity and not a competence: measure your own working limit with a multi-fact test, and prefer five retrieved passages to a hundred pages even when everything fits, because irrelevant text dilutes attention."},{"slug":"determinism-and-reproducibility","title":"Why the same seed gives different answers","url":"https://addaly.com/learn/running-models-yourself/determinism-and-reproducibility","api":"https://addaly.com/api/lesson/running-models-yourself/determinism-and-reproducibility","minutes":8,"keyIdea":"Temperature 0 removes sampling randomness but not floating-point non-associativity, so identical requests can still diverge when two tokens are nearly tied: pin every version, log what produced each output, and assert on properties rather than exact strings."},{"slug":"debugging-a-bad-output","title":"The diagnostic ladder for a bad output","url":"https://addaly.com/learn/running-models-yourself/debugging-a-bad-output","api":"https://addaly.com/api/lesson/running-models-yourself/debugging-a-bad-output","minutes":9,"keyIdea":"Work down the ladder in order (hardware, prompt string, stop tokens, sampler at temperature 0, quantisation, prompt design, then the weights) because the cheap causes are also by far the most common."},{"slug":"a-local-eval-harness","title":"A small harness that tells you whether a change helped","url":"https://addaly.com/learn/running-models-yourself/a-local-eval-harness","api":"https://addaly.com/api/lesson/running-models-yourself/a-local-eval-harness","minutes":9,"keyIdea":"Thirty frozen items with structural and property checks, run at temperature 0 and logged with latency and token counts, converts every question in this course from an argument into a ten-minute run."}]},{"slug":"serving-it-to-others","title":"Serving it to other people","summary":"Turning a model that runs on your desk into an endpoint colleagues, an application or the public can call: reached over a tunnel rather than an open port, fronted by something that authenticates and counts, supervised so it survives a reboot, logged without becoming a privacy liability, and moderated by you, because there is nobody else.","outcome":"Expose a local model as a service other people can use safely (bound to loopback and reached over SSH or a WireGuard mesh, fronted by a gateway that holds keys and quotas, packaged and supervised so it restarts on its own, logging what is needed without retaining prompts you cannot defend) and state what an unauthenticated inference port costs you within hours of being reachable.","lessons":[{"slug":"serving-it-to-others","title":"Serving it to other people","url":"https://addaly.com/learn/running-models-yourself/serving-it-to-others","api":"https://addaly.com/api/lesson/running-models-yourself/serving-it-to-others","minutes":9,"keyIdea":"Bind to localhost and reach it over a private network; an open inference port is free compute for strangers."},{"slug":"reaching-the-machine-safely","title":"Reaching the machine from somewhere else","url":"https://addaly.com/learn/running-models-yourself/reaching-the-machine-safely","api":"https://addaly.com/api/lesson/running-models-yourself/reaching-the-machine-safely","minutes":9,"keyIdea":"The bind address decides who may connect and reachability decides who can, so keep the server on loopback and carry the connection over SSH or a WireGuard mesh: an unauthenticated inference port is found by scanners within hours, and the abuse that follows is attributable to your machine."},{"slug":"a-gateway-in-front","title":"A gateway in front: keys, quotas and a bill","url":"https://addaly.com/learn/running-models-yourself/a-gateway-in-front","api":"https://addaly.com/api/lesson/running-models-yourself/a-gateway-in-front","minutes":9,"keyIdea":"Inference engines implement inference and nothing else, so identity, quotas and audit belong in a gateway that holds per-person keys, enforces requests, tokens and concurrency as three separate limits, caps output length where the caller cannot raise it, and forwards only the inference paths."},{"slug":"containers-and-driver-versions","title":"Containers, drivers and the version matrix","url":"https://addaly.com/learn/running-models-yourself/containers-and-driver-versions","api":"https://addaly.com/api/lesson/running-models-yourself/containers-and-driver-versions","minutes":9,"keyIdea":"The host driver sets the ceiling and the container carries the CUDA runtime, so newer containers run on older hosts but never the reverse: verify the GPU with a bare CUDA image first, mount weights rather than baking them in, and pin the engine tag so a default cannot change underneath you."},{"slug":"running-it-as-a-service","title":"Running it as a service that survives a reboot","url":"https://addaly.com/learn/running-models-yourself/running-it-as-a-service","api":"https://addaly.com/api/lesson/running-models-yourself/running-it-as-a-service","minutes":8,"keyIdea":"A supervisor turns a terminal process into a service, but the details that matter are a long start timeout so a large model can finish loading, a warm-up request so the first user does not pay for disk reads, and a look at the kernel log whenever it restarts, because an out-of-memory kill leaves no trace in the engine's own logs."},{"slug":"logging-without-leaking","title":"Logging without building a liability","url":"https://addaly.com/learn/running-models-yourself/logging-without-leaking","api":"https://addaly.com/api/lesson/running-models-yourself/logging-without-leaking","minutes":9,"keyIdea":"Self-hosting moves prompt-retention risk from a vendor's policy to yours, so log operations and accounting without content, make content logging opt-in and short-lived, and verify what is actually stored by sending a canary string and grepping every path the request touched."},{"slug":"guardrails-on-your-own-endpoint","title":"You are now the moderation team","url":"https://addaly.com/learn/running-models-yourself/guardrails-on-your-own-endpoint","api":"https://addaly.com/api/lesson/running-models-yourself/guardrails-on-your-own-endpoint","minutes":9,"keyIdea":"Open weights ship with trained refusals and nothing else, so serving them to others means choosing deliberately among model alignment, classifier passes that cost a real forward pass each, and deterministic quotas, and treating prompt injection as unsolved, defended by architecture rather than by instructions."},{"slug":"sharing-one-gpu-fairly","title":"One card, several people","url":"https://addaly.com/learn/running-models-yourself/sharing-one-gpu-fairly","api":"https://addaly.com/api/lesson/running-models-yourself/sharing-one-gpu-fairly","minutes":9,"keyIdea":"Engines schedule first-come, first-served, so fairness on a shared card comes from per-key concurrency caps and a priority queue with ageing to prevent starvation, and routing a conversation back to the replica holding its prefix cache is free throughput that round-robin discards."},{"slug":"hybrid-local-and-api","title":"Local first, API behind it","url":"https://addaly.com/learn/running-models-yourself/hybrid-local-and-api","api":"https://addaly.com/api/lesson/running-models-yourself/hybrid-local-and-api","minutes":8,"keyIdea":"Running local first with an API behind it works when the routing rule is explicit: split by task for the high-volume cheap work, escalate on a deterministic check rather than the model's own confidence, and measure the deflection rate, because a cascade that escalates most of the time costs more than not having one."}]},{"slug":"what-it-actually-costs","title":"What it actually costs","summary":"The arithmetic that decides whether running it yourself is cheaper: duty cycle, electricity at your own tariff, the card as a depreciating asset, rented hours billed in wall-clock, and the hours nobody invoices, assembled into a break-even volume rather than an opinion.","outcome":"Produce a defensible cost per million tokens for a stated local deployment (capital amortised over a holding period you can justify, electricity at your own tariff, duty cycle measured rather than assumed, and your own time priced) then express the comparison with a hosted API as the monthly token volume at which local begins to win, and say which input the answer is most sensitive to.","lessons":[{"slug":"the-honest-cost-comparison","title":"The honest cost comparison","url":"https://addaly.com/learn/running-models-yourself/the-honest-cost-comparison","api":"https://addaly.com/api/lesson/running-models-yourself/the-honest-cost-comparison","minutes":10,"keyIdea":"Local cost per token is set by how busy the GPU is; an idle card generates the most expensive tokens there are."},{"slug":"utilisation-decides-everything","title":"Duty cycle, and why an idle card is expensive","url":"https://addaly.com/learn/running-models-yourself/utilisation-decides-everything","api":"https://addaly.com/api/lesson/running-models-yourself/utilisation-decides-everything","minutes":9,"keyIdea":"Cost per token is fixed cost divided by tokens actually produced, so duty cycle moves the answer by a factor of ten while card price and electricity move it by tens of per cent: measure it from the gateway's counters and a saturating load test, and raise it with batch work rather than invented work."},{"slug":"electricity-and-heat","title":"Electricity, heat and the power limit knob","url":"https://addaly.com/learn/running-models-yourself/electricity-and-heat","api":"https://addaly.com/api/lesson/running-models-yourself/electricity-and-heat","minutes":8,"keyIdea":"Electricity is close to a rounding error per token when the card is busy and the dominant waste when it idles, so measure watts at the wall, cap board power for a disproportionate saving, and check the throttle reasons before blaming software for a gradual loss of speed."},{"slug":"buying-the-card","title":"Buying hardware, in the right order","url":"https://addaly.com/learn/running-models-yourself/buying-the-card","api":"https://addaly.com/api/lesson/running-models-yourself/buying-the-card","minutes":9,"keyIdea":"Buy VRAM first, bandwidth second and compute third, because a model that does not fit cannot be made to fit by being fast; and rent for a month before buying, since the workload people predict is reliably larger than the one they measure."},{"slug":"renting-by-the-hour","title":"Renting a GPU, and the meter that runs while you think","url":"https://addaly.com/learn/running-models-yourself/renting-by-the-hour","api":"https://addaly.com/api/lesson/running-models-yourself/renting-by-the-hour","minutes":9,"keyIdea":"Rented GPUs bill wall-clock time rather than tokens, so the engineering is to keep weights on a persistent volume, run jobs as scripts that terminate themselves, and reserve interruptible capacity for work that restarts automatically. And renting gives up the privacy argument unless you trust whoever administers the machine."},{"slug":"depreciation-and-the-resale-floor","title":"The card as an asset, and the sunk-cost trap","url":"https://addaly.com/learn/running-models-yourself/depreciation-and-the-resale-floor","api":"https://addaly.com/api/lesson/running-models-yourself/depreciation-and-the-resale-floor","minutes":8,"keyIdea":"Capital cost is purchase minus expected resale divided by the months you will actually hold the card, so the amortisation window moves the answer more than the card choice does; and a card you already own has no capital cost in the decision to use it, which is a different question from whether to buy one."},{"slug":"the-hours-nobody-invoices","title":"The hours nobody invoices","url":"https://addaly.com/learn/running-models-yourself/the-hours-nobody-invoices","api":"https://addaly.com/api/lesson/running-models-yourself/the-hours-nobody-invoices","minutes":8,"keyIdea":"A person's time is usually the largest first-year cost of self-hosting and the only line nobody writes down, so price the twenty to forty hours of setup and the monthly maintenance honestly; and treat a stack only one person can restart as the risk that most often sends an organisation back to an API."},{"slug":"the-break-even-model","title":"Building the break-even model","url":"https://addaly.com/learn/running-models-yourself/the-break-even-model","api":"https://addaly.com/api/lesson/running-models-yourself/the-break-even-model","minutes":10,"keyIdea":"Assemble the inputs into two cost curves and report where they cross as a monthly token volume translated into daily exchanges, because the crossing point is usually far higher than people expect, duty cycle and unpriced hours dominate every other input, and the non-cost reasons for local belong outside the arithmetic."},{"slug":"when-the-api-simply-wins","title":"When the API simply wins, and when it cannot","url":"https://addaly.com/learn/running-models-yourself/when-the-api-simply-wins","api":"https://addaly.com/api/lesson/running-models-yourself/when-the-api-simply-wins","minutes":8,"keyIdea":"Hosted wins on frontier capability, low or spiky volume, operational burden and pace of improvement, while local wins where data cannot leave, connectivity is unreliable, latency must be local, cost must be predictable or a payment card is not available, so start hosted, measure for a month, and move only the work that crosses a line you computed."}]},{"slug":"making-it-yours","title":"Making it yours: adapters and training","summary":"When a prompt is not enough and retrieval is the wrong tool: what a LoRA adapter actually is, how to train one on a single consumer card, how to build the few hundred examples that decide the result, how to tell generalisation from memorisation, how to serve or merge what you made, and what licence the weights you produced actually carry.","outcome":"Decide whether a stated failure calls for a better prompt, retrieval or weight training; produce a LoRA adapter on one consumer card from a dataset you built with the correct chat template and loss masking; distinguish generalisation from memorisation and from catastrophic forgetting using a held-out set and a general-capability check; serve or merge the adapter; and state which licences the resulting weights inherit.","lessons":[{"slug":"prompt-retrieval-or-training","title":"Prompt, retrieval or training: choosing the right tool","url":"https://addaly.com/learn/running-models-yourself/prompt-retrieval-or-training","api":"https://addaly.com/api/lesson/running-models-yourself/prompt-retrieval-or-training","minutes":9,"keyIdea":"Fine-tuning changes behaviour and does not install facts, so a knowledge gap belongs to retrieval and a shape problem belongs to the prompt: train only for a durable behaviour, and only after writing down the measurement that will tell you whether the run worked."},{"slug":"what-a-lora-actually-is","title":"What a LoRA actually is","url":"https://addaly.com/learn/running-models-yourself/what-a-lora-actually-is","api":"https://addaly.com/api/lesson/running-models-yourself/what-a-lora-actually-is","minutes":9,"keyIdea":"A LoRA replaces a full weight update with the product of two thin matrices, so only a fraction of a per cent of the parameters train and the frozen base needs no optimiser state. Rank sets capacity, the alpha-over-rank ratio sets effective step size, and adapting the MLP projections as well as attention is what makes it learn tasks rather than only style."},{"slug":"qlora-on-one-card","title":"QLoRA: training a 7B on the card you have","url":"https://addaly.com/learn/running-models-yourself/qlora-on-one-card","api":"https://addaly.com/api/lesson/running-models-yourself/qlora-on-one-card","minutes":10,"keyIdea":"LoRA removes gradients and optimiser state for the frozen base and QLoRA loads that base in 4-bit NF4, bringing a 7B run onto a 12GB card. Sequence length is the memory knob that bites first, and an adapter trained against a 4-bit base must either be served on that base or re-evaluated after merging into 16-bit weights."},{"slug":"building-the-dataset","title":"The dataset is the project","url":"https://addaly.com/learn/running-models-yourself/building-the-dataset","api":"https://addaly.com/api/lesson/running-models-yourself/building-the-dataset","minutes":9,"keyIdea":"Render your training examples with the model's own chat template and read the output before training, compute loss on assistant tokens only, include refusals and awkward shapes because a dataset of successes teaches a model to always succeed, and record provenance per example while it is still possible."},{"slug":"running-the-training-run","title":"Running the training run","url":"https://addaly.com/learn/running-models-yourself/running-the-training-run","api":"https://addaly.com/api/lesson/running-models-yourself/running-the-training-run","minutes":9,"keyIdea":"Learning rate around 1e-4 to 2e-4, two epochs and an effective batch of sixteen to thirty-two covers most LoRA runs, and printing the decoded tokens that actually contribute to the loss before launching catches the data-formatting bugs that cause most first-run failures."},{"slug":"reading-the-loss-curve","title":"Generalisation, memorisation and forgetting","url":"https://addaly.com/learn/running-models-yourself/reading-the-loss-curve","api":"https://addaly.com/api/lesson/running-models-yourself/reading-the-loss-curve","minutes":9,"keyIdea":"Only evaluation loss on held-out data carries information, and neither loss curve detects catastrophic forgetting, so keep a twenty-item general-capability set from before the run, compare outputs side by side afterwards, and raise human review after a fine-tune because errors now arrive in a register reviewers trust."},{"slug":"serving-and-merging-adapters","title":"Serving what you made, merged or not","url":"https://addaly.com/learn/running-models-yourself/serving-and-merging-adapters","api":"https://addaly.com/api/lesson/running-models-yourself/serving-and-merging-adapters","minutes":8,"keyIdea":"Keeping adapters separate serves many tasks from one base in VRAM at a small per-token cost, while merging produces an ordinary model that any engine can load. And because a merge and a subsequent quantisation each change the artefact, evaluate after every transformation and version the adapter together with its exact base commit and template."},{"slug":"continued-pretraining","title":"When an adapter is not enough","url":"https://addaly.com/learn/running-models-yourself/continued-pretraining","api":"https://addaly.com/api/lesson/running-models-yourself/continued-pretraining","minutes":9,"keyIdea":"Continued pretraining is for distribution shifts an adapter cannot cross, needs hundreds of millions of in-domain tokens, and strips instruction following so it must be followed by a second supervised stage. And for most projects the better move is finding a base model already trained for that language or domain."},{"slug":"what-you-may-ship","title":"What you may ship, and what nobody has settled","url":"https://addaly.com/learn/running-models-yourself/what-you-may-ship","api":"https://addaly.com/api/lesson/running-models-yourself/what-you-may-ship","minutes":9,"keyIdea":"A fine-tuned model inherits obligations from the base licence, the dataset's terms and the terms of any model used to generate data, and because copyright in training and in weights themselves is unsettled and differs by country, the durable protection is a provenance record and a short model card written at the time."}]}]},{"slug":"fine-tuning","title":"Fine-Tuning, and When Not To","tagline":"The case against fine-tuning first, then how to do it properly.","description":"Fine-tuning is the most over-reached tool in applied machine learning. This course opens with the honest answer (a better prompt or retrieval solves most of what people want fine-tuning for) and then, for the cases that survive that test, teaches the practice end to end: what training actually changes and what it cannot add, LoRA and QLoRA memory arithmetic you can do on paper, building a dataset and the held-out set that has to come before it, chat templates and loss masking, running a job on a free T4 or a rented card for pennies, catching catastrophic forgetting, measuring whether it helped, and serving the adapter. Written for a mid-range laptop as readily as a rented A100.","level":"advanced","track":"deep","url":"https://addaly.com/learn/fine-tuning","lessons":84,"minutes":758,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/fine-tuning.pdf","pages":484,"bytes":5241743,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/fine-tuning.pdf","cover":"https://addaly.com/textbooks/look/fine-tuning/1.webp?v=2026-10-07-5241743"},"film":null,"modules":[{"slug":"deciding-whether-to-fine-tune","title":"Deciding whether to fine-tune at all","summary":"Most fine-tuning projects should not happen. This module gives you the diagnosis that tells you which failures weights can fix, the cheaper levers that fix the rest, and the true cost of owning a model you trained yourself.","outcome":"Diagnose a model failure as a format, knowledge, style, capability or cost problem, name the cheapest lever that fixes that class, and defend in writing a decision to fine-tune (or not to) against the prompt, retrieval, encoder and distillation alternatives and their licence constraints.","lessons":[{"slug":"honest-answer-first","title":"The Honest Answer First","url":"https://addaly.com/learn/fine-tuning/honest-answer-first","api":"https://addaly.com/api/lesson/fine-tuning/honest-answer-first","minutes":7,"keyIdea":"A prompt changes in ten seconds; a fine-tune changes in a day. Exhaust the fast loop first."},{"slug":"what-it-changes","title":"What Fine-Tuning Changes, and What It Cannot Add","url":"https://addaly.com/learn/fine-tuning/what-it-changes","api":"https://addaly.com/api/lesson/fine-tuning/what-it-changes","minutes":8,"keyIdea":"Fine-tuning teaches the shape of an answer, not its content; facts belong in the context window."},{"slug":"diagnosing-the-failure","title":"Diagnosing the failure before choosing the fix","url":"https://addaly.com/learn/fine-tuning/diagnosing-the-failure","api":"https://addaly.com/api/lesson/fine-tuning/diagnosing-the-failure","minutes":10,"keyIdea":"Sort thirty real failures into format, knowledge, style, capability, adherence and cost before choosing a fix; only adherence, style and cost have fine-tuning as their cheapest answer."},{"slug":"try-the-retriever-first","title":"Try the retriever first","url":"https://addaly.com/learn/fine-tuning/try-the-retriever-first","api":"https://addaly.com/api/lesson/fine-tuning/try-the-retriever-first","minutes":9,"keyIdea":"Recall@k is a hard ceiling on a RAG system's accuracy, so measure it before blaming the generator, and when something must be trained, the retriever is a hundred times smaller and outlives the base model."},{"slug":"classifiers-and-encoders","title":"When the answer is one of six labels","url":"https://addaly.com/learn/fine-tuning/classifiers-and-encoders","api":"https://addaly.com/api/lesson/fine-tuning/classifiers-and-encoders","minutes":9,"keyIdea":"When the output is one of a fixed set of labels, a 150M encoder fine-tuned on a thousand examples usually beats prompting a large decoder on accuracy, latency and cost: at the price of needing labels and retraining to add a class."},{"slug":"distillation-as-the-real-case","title":"Distillation, the case that usually survives","url":"https://addaly.com/learn/fine-tuning/distillation-as-the-real-case","api":"https://addaly.com/api/lesson/fine-tuning/distillation-as-the-real-case","minutes":10,"keyIdea":"Distillation is the fine-tuning case with no cheaper rival, but the student is capped by the teacher on the traffic you sampled, so the filter between them (verifiers, rejection sampling, a hundred pairs read by a person) is where the quality actually comes from."},{"slug":"the-cost-of-owning-a-model","title":"The cost of owning a model","url":"https://addaly.com/learn/fine-tuning/the-cost-of-owning-a-model","api":"https://addaly.com/api/lesson/fine-tuning/the-cost-of-owning-a-model","minutes":9,"keyIdea":"The training run is the cheapest part of a fine-tune; the real cost is a dataset, an evaluation set, a serving line item and a rebuild every time the base model is superseded, so the thing you must be able to reproduce is the pipeline, not the weights."},{"slug":"licences-and-what-you-may-train-on","title":"Licences, and what you may train on","url":"https://addaly.com/learn/fine-tuning/licences-and-what-you-may-train-on","api":"https://addaly.com/api/lesson/fine-tuning/licences-and-what-you-may-train-on","minutes":10,"keyIdea":"Model licence, data licence and downstream obligations are three separate permissions, the underlying copyright question is genuinely unsettled and differs by country, and per-example provenance recorded at collection time is the only thing that makes the question answerable later."},{"slug":"the-decision-record","title":"Writing the decision down","url":"https://addaly.com/learn/fine-tuning/the-decision-record","api":"https://addaly.com/api/lesson/fine-tuning/the-decision-record","minutes":8,"keyIdea":"One page written before any training (quantified failure, diagnosis, frozen baseline, budget with a kill criterion, a list of what must not get worse, and a rebuild estimate) is what makes a fine-tune's result believable or its abandonment cheap."}]},{"slug":"how-training-works","title":"How training actually works","summary":"One optimisation step, taken apart: the forward pass, the loss, the gradient, the optimiser state, and the precision the numbers are stored in. Every hyperparameter you will later set moves one of these.","outcome":"Trace one optimisation step from a batch of tokens to a changed weight, and predict which way loss, memory and stability move when you change the learning rate, the batch size, the precision or the number of epochs.","lessons":[{"slug":"one-training-step","title":"One training step, taken apart","url":"https://addaly.com/learn/fine-tuning/one-training-step","api":"https://addaly.com/api/lesson/fine-tuning/one-training-step","minutes":10,"keyIdea":"A training step is forward, cross-entropy against the next token, backward to gradients, optimiser update, and the memory, the masking and every hyperparameter you will set are consequences of those four lines."},{"slug":"the-loss-you-are-minimising","title":"Reading the loss number","url":"https://addaly.com/learn/fine-tuning/the-loss-you-are-minimising","api":"https://addaly.com/api/lesson/fine-tuning/the-loss-you-are-minimising","minutes":9,"keyIdea":"Cross-entropy is readable as a probability (exp(-loss) is the average chance given to the right token) but it is comparable only against your own runs, and because it is a proxy you must select checkpoints on a task metric, since validation loss can rise while the metric you care about improves."},{"slug":"optimisers-and-their-memory","title":"Optimisers, and what their state costs","url":"https://addaly.com/learn/fine-tuning/optimisers-and-their-memory","api":"https://addaly.com/api/lesson/fine-tuning/optimisers-and-their-memory","minutes":9,"keyIdea":"AdamW's two per-parameter moment buffers cost 8 bytes per trainable parameter, which is why full fine-tuning is memory-bound and why LoRA makes the optimiser irrelevant; 8-bit and paged variants buy that memory back when you must train everything."},{"slug":"learning-rate-and-schedules","title":"Learning rate, warmup and the schedule","url":"https://addaly.com/learn/fine-tuning/learning-rate-and-schedules","api":"https://addaly.com/api/lesson/fine-tuning/learning-rate-and-schedules","minutes":9,"keyIdea":"LoRA needs a learning rate ten to twenty times higher than full fine-tuning because its adapter starts at exactly zero, warmup exists to stop AdamW taking a large step from a one-sample variance estimate, and a cosine schedule must be set for the run you actually intend to finish."},{"slug":"batch-size-and-accumulation","title":"Batch size, accumulation and the token count","url":"https://addaly.com/learn/fine-tuning/batch-size-and-accumulation","api":"https://addaly.com/api/lesson/fine-tuning/batch-size-and-accumulation","minutes":9,"keyIdea":"Effective batch is per-device times accumulation times devices, the unit that actually governs gradient noise is tokens per step rather than examples, and loss must be normalised by real token counts across an accumulation window or long and short examples get equal weight."},{"slug":"precision-and-mixed-precision","title":"Precision, and why bf16 ended a class of bugs","url":"https://addaly.com/learn/fine-tuning/precision-and-mixed-precision","api":"https://addaly.com/api/lesson/fine-tuning/precision-and-mixed-precision","minutes":9,"keyIdea":"bf16 keeps fp32's exponent range and sacrifices mantissa bits, which removes the underflow that forced fp16 to use loss scaling, and since the free T4 has no bf16, free-tier runs still live with the scaler and its skipped steps."},{"slug":"where-the-memory-goes","title":"Where the memory actually goes","url":"https://addaly.com/learn/fine-tuning/where-the-memory-goes","api":"https://addaly.com/api/lesson/fine-tuning/where-the-memory-goes","minutes":10,"keyIdea":"Memory is weights, gradients, optimiser state, activations and logits, and at long context the quadratic attention matrix and the vocabulary-sized logits tensor are usually the two surprises, both removable with flash attention and a fused cross-entropy before you touch batch size."},{"slug":"epochs-and-the-loss-curve","title":"Epochs, overfitting and checkpoint selection","url":"https://addaly.com/learn/fine-tuning/epochs-and-the-loss-curve","api":"https://addaly.com/api/lesson/fine-tuning/epochs-and-the-loss-curve","minutes":9,"keyIdea":"The step down in training loss at each epoch boundary is memorisation, not learning; select checkpoints on a task metric with a canary set beside it rather than on validation loss, because the best checkpoint is often the last one before general capability starts to slip."},{"slug":"regularisation-that-helps","title":"Regularisation that helps, and the kind that does not","url":"https://addaly.com/learn/fine-tuning/regularisation-that-helps","api":"https://addaly.com/api/lesson/fine-tuning/regularisation-that-helps","minutes":8,"keyIdea":"Fewer epochs, more data and a replay mixture regularise a fine-tune far more than any config knob, gradient clipping at 1.0 is cheap insurance against one pathological example, and label smoothing flattens the output distribution in a way that harms generation even though it helps classifiers."}]},{"slug":"the-peft-family","title":"Full, LoRA and the parameter-efficient family","summary":"The methods that made fine-tuning affordable, with the arithmetic to predict memory before you rent anything, and an honest account of which variants are worth their extra complexity.","outcome":"Predict on paper the memory a given model, method and sequence length will need, choose between full fine-tuning, LoRA, QLoRA and the tiny methods for a stated budget, and justify a rank, an alpha and a target-module set.","lessons":[{"slug":"memory-arithmetic","title":"Full, LoRA, QLoRA, and the Memory Arithmetic","url":"https://addaly.com/learn/fine-tuning/memory-arithmetic","api":"https://addaly.com/api/lesson/fine-tuning/memory-arithmetic","minutes":10,"keyIdea":"Full fine-tuning costs about 16 bytes per parameter; LoRA charges that only on the 1% you train."},{"slug":"what-lora-is-doing","title":"What LoRA is actually doing","url":"https://addaly.com/learn/fine-tuning/what-lora-is-doing","api":"https://addaly.com/api/lesson/fine-tuning/what-lora-is-doing","minutes":9,"keyIdea":"LoRA freezes W and learns a rank-r factorisation of the correction, initialised so the adapter starts as an exact no-op, which is why it needs a much higher learning rate, why it cannot be worse than the base at step one, and why it adds reweighting rather than new machinery."},{"slug":"rank-alpha-and-targets","title":"Choosing rank, alpha and which modules to touch","url":"https://addaly.com/learn/fine-tuning/rank-alpha-and-targets","api":"https://addaly.com/api/lesson/fine-tuning/rank-alpha-and-targets","minutes":9,"keyIdea":"Adapting all linear projections at r=16 beats adapting the attention pair at a high rank, alpha should be fixed at 2r so it does not confound your learning-rate sweep, and target_modules=\"all-linear\" survives a change of model family where a copied name list does not."},{"slug":"qlora-and-nf4","title":"QLoRA: quantising the part you are not training","url":"https://addaly.com/learn/fine-tuning/qlora-and-nf4","api":"https://addaly.com/api/lesson/fine-tuning/qlora-and-nf4","minutes":10,"keyIdea":"QLoRA quantises only the frozen base to NF4 with block-wise scales and double-quantised constants, buying a 4x memory reduction for roughly 30% throughput and an adapter that was fitted against a slightly wrong model, which is why merging it back is the awkward part."},{"slug":"dora-rslora-and-variants","title":"DoRA, rsLoRA and the variant question","url":"https://addaly.com/learn/fine-tuning/dora-rslora-and-variants","api":"https://addaly.com/api/lesson/fine-tuning/dora-rslora-and-variants","minutes":9,"keyIdea":"rsLoRA and DoRA fix specific defects (the alpha-over-r damping at high rank and the coupling of magnitude to direction at low rank) but variants are the last term in the sum, behind the dataset, the template, the learning rate and the target modules."},{"slug":"soft-prompts-and-prefixes","title":"Soft prompts and prefixes","url":"https://addaly.com/learn/fine-tuning/soft-prompts-and-prefixes","api":"https://addaly.com/api/lesson/fine-tuning/soft-prompts-and-prefixes","minutes":8,"keyIdea":"Soft prompts and prefixes train a few hundred kilobytes of learned vectors with every weight frozen, which makes per-tenant adaptation almost free to store, but they steer the computation rather than changing it, so they close the gap to full fine-tuning only at large model scale."},{"slug":"the-tiny-methods","title":"The tiny methods, and a gotcha in one of them","url":"https://addaly.com/learn/fine-tuning/the-tiny-methods","api":"https://addaly.com/api/lesson/fine-tuning/the-tiny-methods","minutes":8,"keyIdea":"IA³ adapts a model with three learned scaling vectors per layer, about 0.01% of parameters, merging exactly into the weights and suiting tiny datasets, while BitFit is nearly a no-op on Llama-style models because they have almost no bias terms to train."},{"slug":"full-fine-tuning-when-right","title":"Full fine-tuning, when it is genuinely right","url":"https://addaly.com/learn/fine-tuning/full-fine-tuning-when-right","api":"https://addaly.com/api/lesson/fine-tuning/full-fine-tuning-when-right","minutes":9,"keyIdea":"Full fine-tuning is right for a new language, a very large dataset, a small model or a distillation student, costs about 16 bytes per parameter in persistent state before activations, and forgets precisely because every weight is free to move, so run the LoRA first to find out whether the data is worth it."},{"slug":"training-on-a-small-budget","title":"Training on a free or nearly free budget","url":"https://addaly.com/learn/fine-tuning/training-on-a-small-budget","api":"https://addaly.com/api/lesson/fine-tuning/training-on-a-small-budget","minutes":10,"keyIdea":"A free Kaggle T4 with 12-hour sessions trains an 8B QLoRA at sequence 1,024, Unsloth's rewritten kernels roughly double that throughput, and the whole chain from dataset to a GGUF model running on your own laptop costs nothing, with checkpointing to Drive or the Hub being what makes a killable session survivable."}]},{"slug":"building-the-dataset","title":"Building the dataset","summary":"The dataset is the model. This module covers where examples legitimately come from, the formats they must be converted into, the filters that decide quality, and the record that lets somebody else rebuild the set.","outcome":"Assemble a training set from named sources with checked licences, convert it to one chat format, filter and deduplicate it, mix in replay data at a stated ratio, and publish a data card that lets a stranger reproduce the set.","lessons":[{"slug":"the-dataset","title":"The Dataset Decides Everything","url":"https://addaly.com/learn/fine-tuning/the-dataset","api":"https://addaly.com/api/lesson/fine-tuning/the-dataset","minutes":11,"keyIdea":"Your model learns your dataset's whole distribution, including the habits you never meant to teach."},{"slug":"where-the-data-comes-from","title":"Where the data legitimately comes from","url":"https://addaly.com/learn/fine-tuning/where-the-data-comes-from","api":"https://addaly.com/api/lesson/fine-tuning/where-the-data-comes-from","minutes":9,"keyIdea":"Your own traffic has the right distribution, hand-written examples cover what traffic never contains, and public sets are for replay: with a dataset's own licence and the terms under which its contents were generated being two separate permissions that a provenance column recorded at collection time is the only way to answer later."},{"slug":"instruction-data-formats","title":"The three formats, and the conversion trap","url":"https://addaly.com/learn/fine-tuning/instruction-data-formats","api":"https://addaly.com/api/lesson/fine-tuning/instruction-data-formats","minutes":8,"keyIdea":"Convert everything to messages format once on the way in, use the same formatting function for training and inference, and print one templated example as a string before every run, because the commonest data bugs are a changed separator, a half-present system prompt, and truncation that removes the end-of-turn token."},{"slug":"cleaning-at-scale","title":"Cleaning at scale","url":"https://addaly.com/learn/fine-tuning/cleaning-at-scale","api":"https://addaly.com/api/lesson/fine-tuning/cleaning-at-scale","minutes":9,"keyIdea":"Filter in order of cost (exact hashes, then MinHash near-duplicates, then length, truncation, language and repetition heuristics) and then read a hundred examples by hand, because the systematic annotation problems that decide a fine-tune's quality have no automated detector."},{"slug":"writing-and-rewriting-outputs","title":"Writing the answers, and keeping them consistent","url":"https://addaly.com/learn/fine-tuning/writing-and-rewriting-outputs","api":"https://addaly.com/api/lesson/fine-tuning/writing-and-rewriting-outputs","minutes":9,"keyIdea":"The model learns the distribution of your answers rather than their correctness, so unforced variation between annotators becomes randomness in production, which makes a one-page style guide with exact wording for the declining case worth more than another thousand examples."},{"slug":"distillation-datasets-in-practice","title":"Generating a dataset from a teacher","url":"https://addaly.com/learn/fine-tuning/distillation-datasets-in-practice","api":"https://addaly.com/api/lesson/fine-tuning/distillation-datasets-in-practice","minutes":10,"keyIdea":"Draw the inputs from real traffic and only the outputs from the teacher, sample several completions and filter them with a verifier wherever correctness is checkable, then strip the teacher's stock phrases and check that your generated set covers your traffic's distinct intents rather than just its volume."},{"slug":"data-mixtures-and-replay","title":"Mixtures and replay","url":"https://addaly.com/learn/fine-tuning/data-mixtures-and-replay","api":"https://addaly.com/api/lesson/fine-tuning/data-mixtures-and-replay","minutes":9,"keyIdea":"Mixing 15 to 30% general instruction data into a task-specific set preserves general capability better than any training-side mitigation, because the weights supporting that capability keep receiving a signal to stay put; and shuffling the file is not optional when the learning rate decays."},{"slug":"packing-and-long-context","title":"Packing, document boundaries and long context","url":"https://addaly.com/learn/fine-tuning/packing-and-long-context","api":"https://addaly.com/api/lesson/fine-tuning/packing-and-long-context","minutes":9,"keyIdea":"Packing removes padding but lets one document attend to the previous one unless the block-diagonal mask and per-document position ids are actually in the batch. And extending context requires both a RoPE scaling change and long training data that, for most tasks, does not naturally exist."},{"slug":"multi-turn-and-tool-calls","title":"Multi-turn conversations and tool calls","url":"https://addaly.com/learn/fine-tuning/multi-turn-and-tool-calls","api":"https://addaly.com/api/lesson/fine-tuning/multi-turn-and-tool-calls","minutes":9,"keyIdea":"Compute loss on every assistant turn including the tool-call message, mask the tool's response because it is the world's output rather than the model's, and include conversations where no tool was needed: a dataset of only successful calls produces a model that always calls something."},{"slug":"privacy-and-memorisation","title":"Memorisation, and what you cannot take back","url":"https://addaly.com/learn/fine-tuning/privacy-and-memorisation","api":"https://addaly.com/api/lesson/fine-tuning/privacy-and-memorisation","minutes":10,"keyIdea":"Memorisation rises sharply with how often a sequence is duplicated, which makes deduplication a privacy control as much as a quality filter, and since you cannot reliably remove one person's influence from trained weights, the engineering answer is a dataset you can rebuild and a recorded link between data version and model."},{"slug":"documenting-the-dataset","title":"The data card","url":"https://addaly.com/learn/fine-tuning/documenting-the-dataset","api":"https://addaly.com/api/lesson/fine-tuning/documenting-the-dataset","minutes":8,"keyIdea":"A data card with per-filter counts, an honest known-gaps section, a content hash and a one-command rebuild is what links a model to the data that made it, and writing the gaps section usually changes the dataset before anybody else reads it."}]},{"slug":"objectives-beyond-sft","title":"Objectives beyond next-token prediction","summary":"Supervised fine-tuning teaches a model to imitate. Preference methods teach it what to prefer, and verifiable rewards teach it what is correct. Each needs different data and is gamed in a different way.","outcome":"Choose between supervised fine-tuning, a preference method such as DPO or KTO, a verifiable-reward method such as GRPO, and continued pretraining, and state the data each needs, the memory each costs, and the way each is gamed.","lessons":[{"slug":"sft-is-imitation","title":"What supervised fine-tuning cannot express","url":"https://addaly.com/learn/fine-tuning/sft-is-imitation","api":"https://addaly.com/api/lesson/fine-tuning/sft-is-imitation","minutes":9,"keyIdea":"SFT can only say 'make this more likely', so it cannot express that one answer is better than another or correct a failure it never sees, which is why the method you need is decided by whether you can write the right answer, only rank two answers, or check one with a program."},{"slug":"where-preference-data-comes-from","title":"Where preference data comes from","url":"https://addaly.com/learn/fine-tuning/where-preference-data-comes-from","api":"https://addaly.com/api/lesson/fine-tuning/where-preference-data-comes-from","minutes":9,"keyIdea":"Preference pairs must be on-policy (the rejected side generated by the model you are about to train) or you are teaching it to avoid behaviour it never had; and pairs where you cannot state in one clause why the chosen answer is better are noise that trains something arbitrary."},{"slug":"dpo-from-first-principles","title":"DPO, from first principles","url":"https://addaly.com/learn/fine-tuning/dpo-from-first-principles","api":"https://addaly.com/api/lesson/fine-tuning/dpo-from-first-principles","minutes":10,"keyIdea":"DPO replaces the reward model with an implicit reward expressed as the log-probability ratio against a frozen reference, needs no second model copy when you use LoRA, and fails in a characteristic way (both chosen and rejected probabilities falling) which is why rewards/chosen is the statistic to watch."},{"slug":"the-dpo-family","title":"KTO, ORPO, SimPO and choosing among them","url":"https://addaly.com/learn/fine-tuning/the-dpo-family","api":"https://addaly.com/api/lesson/fine-tuning/the-dpo-family","minutes":9,"keyIdea":"Choose among the preference methods by what data you hold (KTO for unpaired thumbs, ORPO to merge SFT and preference into one reference-free stage, SimPO when length is inflating, IPO for noiseless constructed pairs) because their benchmark differences are smaller than the differences between datasets."},{"slug":"rlhf-and-ppo-honestly","title":"RLHF and PPO, honestly","url":"https://addaly.com/learn/fine-tuning/rlhf-and-ppo-honestly","api":"https://addaly.com/api/lesson/fine-tuning/rlhf-and-ppo-honestly","minutes":9,"keyIdea":"RLHF's PPO stage holds four networks (policy, frozen reference, reward model and value critic) inside a generation loop, which is why DPO replaced it for most applied work; but its objective is the one DPO was derived from, and its KL-versus-reward plot is the clearest picture of a policy exploiting its reward model."},{"slug":"verifiable-rewards-and-grpo","title":"Verifiable rewards and GRPO","url":"https://addaly.com/learn/fine-tuning/verifiable-rewards-and-grpo","api":"https://addaly.com/api/lesson/fine-tuning/verifiable-rewards-and-grpo","minutes":10,"keyIdea":"GRPO drops PPO's value model by using a group of sampled responses as its own baseline, which makes verifiable-reward training affordable, but every group that scores identically produces no gradient, and rejection-sampling fine-tuning on verified outputs is the cheaper baseline you should beat first."},{"slug":"reward-hacking","title":"Reward hacking","url":"https://addaly.com/learn/fine-tuning/reward-hacking","api":"https://addaly.com/api/lesson/fine-tuning/reward-hacking","minutes":9,"keyIdea":"Optimisation pressure finds the gap between your reward and your intent, so assume yours is exploitable and instrument for it: a held-out reward you never train against, logged proxy statistics like mean length, and twenty outputs read by eye are what make the hack visible."},{"slug":"continued-pretraining","title":"Continued pretraining on raw text","url":"https://addaly.com/learn/fine-tuning/continued-pretraining","api":"https://addaly.com/api/lesson/fine-tuning/continued-pretraining","minutes":9,"keyIdea":"Continued pretraining puts loss on every token of raw text to install a domain's register and vocabulary, needs hundreds of millions of tokens rather than thousands of examples, and reliably removes instruction-following, so it is always followed by redoing SFT, and it still will not make the model reliable about any specific document."},{"slug":"heads-instead-of-tokens","title":"Training a head instead of generating tokens","url":"https://addaly.com/learn/fine-tuning/heads-instead-of-tokens","api":"https://addaly.com/api/lesson/fine-tuning/heads-instead-of-tokens","minutes":9,"keyIdea":"Swapping the token head for a linear head turns a decoder into a scorer that costs one forward pass instead of a generation loop, but a preference-trained reward model learns an ordering with no absolute scale, and a decoder classifier pools the last non-padding token, so padding side and pad_token_id must both be set."}]},{"slug":"running-the-job","title":"The mechanics of a run","summary":"The part where things silently break: tokenizers, special tokens, masking, seeds, checkpoints and multi-GPU. Most failed fine-tunes are not bad ideas, they are configuration bugs nobody decoded.","outcome":"Configure and launch a fine-tuning job with the correct chat template, masking and tokenizer handling, and diagnose from the logs alone whether a run is not learning, diverging, or memorising.","lessons":[{"slug":"templates-and-masking","title":"Chat Templates and Loss Masking","url":"https://addaly.com/learn/fine-tuning/templates-and-masking","api":"https://addaly.com/api/lesson/fine-tuning/templates-and-masking","minutes":9,"keyIdea":"Decode one batch's unmasked labels before every run; it catches most fine-tuning bugs in five seconds."},{"slug":"the-run","title":"Running a LoRA, and What It Costs","url":"https://addaly.com/learn/fine-tuning/the-run","api":"https://addaly.com/api/lesson/fine-tuning/the-run","minutes":10,"keyIdea":"GPU time is the cheap part: a 7B LoRA run costs cents, while the dataset and the evaluation cost days."},{"slug":"the-tokenizer-is-the-model","title":"The tokenizer is part of the model","url":"https://addaly.com/learn/fine-tuning/the-tokenizer-is-the-model","api":"https://addaly.com/api/lesson/fine-tuning/the-tokenizer-is-the-model","minutes":9,"keyIdea":"The tokenizer is a fixed part of the model whose efficiency on your language decides cost, context and quality; and setting the pad token equal to the end-of-sequence token, then masking by id, removes the gradient that teaches the model to stop."},{"slug":"adding-your-own-tokens","title":"Adding tokens, and initialising them properly","url":"https://addaly.com/learn/fine-tuning/adding-your-own-tokens","api":"https://addaly.com/api/lesson/fine-tuning/adding-your-own-tokens","minutes":8,"keyIdea":"New vocabulary rows are initialised randomly by default, which places them outside the region existing embeddings occupy, so set them to the mean of existing embeddings or of the tokens they stand for, and remember they stay frozen under LoRA unless embed_tokens and lm_head are in modules_to_save."},{"slug":"a-config-line-by-line","title":"A working config, line by line","url":"https://addaly.com/learn/fine-tuning/a-config-line-by-line","api":"https://addaly.com/api/lesson/fine-tuning/a-config-line-by-line","minutes":10,"keyIdea":"A working config is a set of decisions, not defaults: the instruct variant as base, all-linear targets, 2e-4 for LoRA, non-reentrant checkpointing so gradients reach the adapter, and length-grouped batching instead of packing until packing is verified."},{"slug":"debugging-a-run","title":"Debugging a run","url":"https://addaly.com/learn/fine-tuning/debugging-a-run","api":"https://addaly.com/api/lesson/fine-tuning/debugging-a-run","minutes":10,"keyIdea":"Decode the unmasked labels of one real batch before every run (it should print exactly the assistant's answer and nothing else) and if a pipeline cannot memorise eight examples in a hundred steps, the problem is the code rather than the data."},{"slug":"logging-and-watching","title":"What to log, and how to read it","url":"https://addaly.com/learn/fine-tuning/logging-and-watching","api":"https://addaly.com/api/lesson/fine-tuning/logging-and-watching","minutes":8,"keyIdea":"Gradient norm, tokens per step, token accuracy and three generated samples tell you things loss cannot: a run heading for divergence is visible in the gradient norm hundreds of steps before the loss moves, and stylistic collapse is visible only in the samples."},{"slug":"checkpointing-and-resuming","title":"Checkpointing and resuming","url":"https://addaly.com/learn/fine-tuning/checkpointing-and-resuming","api":"https://addaly.com/api/lesson/fine-tuning/checkpointing-and-resuming","minutes":8,"keyIdea":"A resumable checkpoint holds optimiser state, scheduler position and RNG state as well as weights, so resuming is only correct when the data order and the number of devices are unchanged; and on interruptible instances the checkpoint must live somewhere the instance does not."},{"slug":"reproducibility-and-seeds","title":"Reproducibility, and the noise floor","url":"https://addaly.com/learn/fine-tuning/reproducibility-and-seeds","api":"https://addaly.com/api/lesson/fine-tuning/reproducibility-and-seeds","minutes":9,"keyIdea":"Set a seed and record the git commit, config hash, dataset hash, base revision and library versions; then run three seeds to find your noise floor, because an improvement smaller than twice that spread is a coin flip you have named a decision."},{"slug":"multi-gpu-without-tears","title":"Multi-GPU without tears","url":"https://addaly.com/learn/fine-tuning/multi-gpu-without-tears","api":"https://addaly.com/api/lesson/fine-tuning/multi-gpu-without-tears","minutes":9,"keyIdea":"Adding GPUs multiplies the effective batch size by the device count, so gradient accumulation must be divided or the learning rate raised; and sharded strategies over PCIe often give back in communication what they gain in parallelism, which is why a single card is the faster path for any run under about twelve hours."}]},{"slug":"beyond-text-generation","title":"Fine-tuning beyond a chat model","summary":"Embedding models, rerankers, classifiers, speech, vision-language and image generators. Smaller models, smaller datasets, larger wins. And in several of these the cheaper technique beats fine-tuning outright.","outcome":"Adapt an embedding model, a reranker, a text classifier, a speech model, a vision-language model or an image generator, and name in each case what differs from fine-tuning a text LM and which cheaper technique should be tried first.","lessons":[{"slug":"fine-tuning-an-embedding-model","title":"Fine-tuning an embedding model","url":"https://addaly.com/learn/fine-tuning/fine-tuning-an-embedding-model","api":"https://addaly.com/api/lesson/fine-tuning/fine-tuning-an-embedding-model","minutes":10,"keyIdea":"Embedding models train on query-passage pairs with in-batch negatives, which makes batch size the real hyperparameter (gradient caching buys a 512-wide batch on a small card) and mined hard negatives must be taken from below the top ranks, because the top ones are often correct answers you would be teaching the model to reject."},{"slug":"training-a-reranker","title":"Training a reranker","url":"https://addaly.com/learn/fine-tuning/training-a-reranker","api":"https://addaly.com/api/lesson/fine-tuning/training-a-reranker","minutes":8,"keyIdea":"A cross-encoder reads query and passage together so it ranks far better than a bi-encoder, but it must run once per candidate, which is why it reranks 50 results rather than searching a corpus, and why the pretrained one should be measured before you train your own."},{"slug":"fine-tuning-a-classifier","title":"Fine-tuning a classifier properly","url":"https://addaly.com/learn/fine-tuning/fine-tuning-a-classifier","api":"https://addaly.com/api/lesson/fine-tuning/fine-tuning-a-classifier","minutes":9,"keyIdea":"A 150M encoder with id2label in its config, a weighted loss or adjusted thresholds for imbalance, macro F1 with the confusion matrix read rather than the summary line, and a four-point learning curve that tells you whether another week of labelling is worth it."},{"slug":"speech-models-and-accents","title":"Fine-tuning a speech model","url":"https://addaly.com/learn/fine-tuning/speech-models-and-accents","api":"https://addaly.com/api/lesson/fine-tuning/speech-models-and-accents","minutes":9,"keyIdea":"Try an initial prompt with your domain vocabulary and a larger checkpoint before training, resample to 16 kHz mono, freeze the audio encoder on small datasets, and report raw as well as normalised word error rate alongside recall on the terms that actually matter."},{"slug":"vision-language-models","title":"Fine-tuning a vision-language model","url":"https://addaly.com/learn/fine-tuning/vision-language-models","api":"https://addaly.com/api/lesson/fine-tuning/vision-language-models","minutes":9,"keyIdea":"Freeze the vision encoder, train the projector and LoRA the language model, and check how many sequence positions one image actually consumes before planning memory. And for printed documents, an OCR pipeline into a text model is usually cheaper, more accurate and far easier to debug."},{"slug":"diffusion-lora-and-likeness","title":"LoRA for image models, and the likeness question","url":"https://addaly.com/learn/fine-tuning/diffusion-lora-and-likeness","api":"https://addaly.com/api/lesson/fine-tuning/diffusion-lora-and-likeness","minutes":10,"keyIdea":"Image LoRAs train on 10 to 30 images in under an hour, and what you caption becomes controllable while what you leave uncaptioned is baked into the subject, while likeness training is technically trivial and legally unsettled in ways that differ by jurisdiction, which makes consent and labelling the defensible position rather than a legal conclusion."},{"slug":"structure-without-training","title":"Getting structure without training for it","url":"https://addaly.com/learn/fine-tuning/structure-without-training","api":"https://addaly.com/api/lesson/fine-tuning/structure-without-training","minutes":9,"keyIdea":"Constrained decoding masks illegal tokens at every step so invalid output cannot be produced, which makes it a free floor under any structured task: it guarantees syntax and nothing about truth, so keep it even after fine-tuning rather than treating the two as alternatives."},{"slug":"small-models-and-edge","title":"Small models, where fine-tuning matters most","url":"https://addaly.com/learn/fine-tuning/small-models-and-edge","api":"https://addaly.com/api/lesson/fine-tuning/small-models-and-edge","minutes":9,"keyIdea":"Fine-tuning helps more the smaller the model, because a small model has to be given a behaviour rather than prompted into one. And the case for on-device models is privacy, offline operation and zero marginal cost rather than price, against the specific cost that they collapse rather than degrade off-distribution."},{"slug":"tabular-and-time-series","title":"Tabular and time series: the honest answer","url":"https://addaly.com/learn/fine-tuning/tabular-and-time-series","api":"https://addaly.com/api/lesson/fine-tuning/tabular-and-time-series","minutes":8,"keyIdea":"Gradient-boosted trees remain the default for predicting from tables, so language models belong around the problem (turning free-text columns into features, resolving entities) rather than in it, and any time-series foundation model has to beat seasonal naive on your own series before its benchmark numbers mean anything."}]},{"slug":"did-it-actually-work","title":"Did it actually work","summary":"A fine-tune that improves your target metric and quietly breaks three other things is a loss. This module measures both halves, with intervals, on a set the model has not seen.","outcome":"Compare a tuned model against a cost-matched baseline on a leak-free held-out set, report the difference with an interval, and demonstrate whether general capability, safety behaviour or calibration regressed.","lessons":[{"slug":"did-it-help","title":"Did It Help, and What Did It Break","url":"https://addaly.com/learn/fine-tuning/did-it-help","api":"https://addaly.com/api/lesson/fine-tuning/did-it-help","minutes":10,"keyIdea":"A win rate without an interval and a canary set is not evidence, it is a feeling."},{"slug":"the-baseline-you-must-beat","title":"The baseline you must beat","url":"https://addaly.com/learn/fine-tuning/the-baseline-you-must-beat","api":"https://addaly.com/api/lesson/fine-tuning/the-baseline-you-must-beat","minutes":9,"keyIdea":"Compare against three baselines (the frozen best prompt, the cost-matched alternative, and production today) on one table of quality and cost per thousand requests, because the alternative nobody was ever going to choose is not a baseline and a one-point difference on 200 items is not a difference."},{"slug":"a-held-out-set-that-holds","title":"A held-out set that actually holds","url":"https://addaly.com/learn/fine-tuning/a-held-out-set-that-holds","api":"https://addaly.com/api/lesson/fine-tuning/a-held-out-set-that-holds","minutes":9,"keyIdea":"Random splits leak through near-duplicates, groups, time and templates, so split by group and by time and then measure cross-split near-duplicate overlap, and keep a locked set you open a handful of times, because an evaluation set you have consulted forty times has become a training set for your own decisions."},{"slug":"pairwise-human-comparison","title":"Pairwise human comparison, done properly","url":"https://addaly.com/learn/fine-tuning/pairwise-human-comparison","api":"https://addaly.com/api/lesson/fine-tuning/pairwise-human-comparison","minutes":9,"keyIdea":"Blind, order-randomised, tie-allowing comparisons with a stated criterion and a measured judge-agreement rate, with the number of comparisons fixed in advance from the effect size you would act on, and mean response length reported beside the win rate because length buys wins it did not earn."},{"slug":"judging-a-model-you-distilled","title":"Judging a model you distilled from the judge","url":"https://addaly.com/learn/fine-tuning/judging-a-model-you-distilled","api":"https://addaly.com/api/lesson/fine-tuning/judging-a-model-you-distilled","minutes":9,"keyIdea":"A teacher judging its own student rewards resemblance rather than quality, so use a verifier, a human sample or a judge from a different family; and a student that beats its teacher on teacher-judged comparison is a finding about the measurement, not the model."},{"slug":"contamination-in-your-own-data","title":"Contamination you can check, and contamination you cannot","url":"https://addaly.com/learn/fine-tuning/contamination-in-your-own-data","api":"https://addaly.com/api/lesson/fine-tuning/contamination-in-your-own-data","minutes":9,"keyIdea":"Thirteen-gram overlap will find contamination between your training and evaluation sets, and the answer-ordering test can detect memorised benchmarks, but the base model's pretraining corpus is unchecked and unknowable, which is why a held-out set built after the training cutoff is the only evidence that holds."},{"slug":"safety-regression-after-tuning","title":"Safety regression, including from benign data","url":"https://addaly.com/learn/fine-tuning/safety-regression-after-tuning","api":"https://addaly.com/api/lesson/fine-tuning/safety-regression-after-tuning","minutes":9,"keyIdea":"Fine-tuning on entirely benign data measurably degrades refusal behaviour, because alignment is a thin late layer and every training example demonstrates compliance, so include refusal examples, measure with your own refusal set at each checkpoint, and never let the model's own alignment be the only safety control."},{"slug":"calibration-and-overconfidence","title":"Calibration after tuning","url":"https://addaly.com/learn/fine-tuning/calibration-and-overconfidence","api":"https://addaly.com/api/lesson/fine-tuning/calibration-and-overconfidence","minutes":8,"keyIdea":"Fine-tuning sharpens the output distribution and preference tuning rewards confidence, so a tuned model's 0.9 no longer means 0.9, which breaks every threshold, fallback and abstention rule downstream until temperature scaling is refitted on the exact artefact you serve."},{"slug":"ablations-that-earn-their-cost","title":"Ablations that earn their cost","url":"https://addaly.com/learn/fine-tuning/ablations-that-earn-their-cost","api":"https://addaly.com/api/lesson/fine-tuning/ablations-that-earn-their-cost","minutes":8,"keyIdea":"Run an ablation only when its result would change a stated decision, and read every result against a three-seed noise floor: the data learning curve is the one that settles whether another week of labelling is worth it, and a written log of non-findings prevents the same experiment being run twice."}]},{"slug":"shipping-and-living-with-it","title":"Shipping it, and living with it","summary":"Serving, quantising, monitoring, versioning and the day the base model is replaced. A fine-tune is not a deliverable, it is a dependency you now maintain.","outcome":"Serve a tuned model or adapter at a stated cost and latency, monitor it for drift, reproduce a six-month-old artefact from its recorded version, and plan for the day the base model is replaced.","lessons":[{"slug":"serving-the-adapter","title":"Serving the Adapter","url":"https://addaly.com/learn/fine-tuning/serving-the-adapter","api":"https://addaly.com/api/lesson/fine-tuning/serving-the-adapter","minutes":9,"keyIdea":"Merging, quantizing and switching engines all change the model; evaluate the exact artifact you serve."},{"slug":"quantising-for-serving","title":"Quantising the model you ship","url":"https://addaly.com/learn/fine-tuning/quantising-for-serving","api":"https://addaly.com/api/lesson/fine-tuning/quantising-for-serving","minutes":9,"keyIdea":"Serve with AWQ on a GPU or Q4_K_M in GGUF on a laptop, merge into the full-precision base before quantising, calibrate on your own data, and run a three-way base, tuned, tuned-and-quantised comparison, because quantisation error can be as large as your adapter's delta and round the entire fine-tune away."},{"slug":"many-adapters-at-once","title":"Serving many adapters from one base","url":"https://addaly.com/learn/fine-tuning/many-adapters-at-once","api":"https://addaly.com/api/lesson/fine-tuning/many-adapters-at-once","minutes":8,"keyIdea":"One base plus fifty adapters is 24 GB where fifty merged models are 800 GB, at a throughput cost you should measure and a shared rank ceiling you must choose at training time, but one adapter trained on everyone's data with the customer named in the prompt often matches per-customer adapters, so check whether you are paying for quality or for isolation."},{"slug":"cost-at-steady-state","title":"The cost at steady state","url":"https://addaly.com/learn/fine-tuning/cost-at-steady-state","api":"https://addaly.com/api/lesson/fine-tuning/cost-at-steady-state","minutes":9,"keyIdea":"At two million requests a month a self-hosted tuned 8B on redundant cards costs more than a hosted small model before anybody is paid to maintain it, so the crossover sits above roughly two million requests or wherever latency, privacy or vendor stability overrides the arithmetic entirely."},{"slug":"monitoring-a-tuned-model","title":"Monitoring a model that fails silently","url":"https://addaly.com/learn/fine-tuning/monitoring-a-tuned-model","api":"https://addaly.com/api/lesson/fine-tuning/monitoring-a-tuned-model","minutes":9,"keyIdea":"A drifted model returns a confident wrong answer with a 200 status, so monitoring means unlabelled proxies (embedding distance from the training distribution, response length, refusal and fallback rates, and above all the rate at which users rephrase) plus a weekly shadow run of the frozen set and every incident turned into a permanent evaluation item."},{"slug":"the-base-model-moved","title":"The day the base model moves","url":"https://addaly.com/learn/fine-tuning/the-base-model-moved","api":"https://addaly.com/api/lesson/fine-tuning/the-base-model-moved","minutes":9,"keyIdea":"An adapter fitted against one set of base weights loads cleanly onto a newer release and is silently worse, so pin the revision hash, and when a better base ships, first check whether it plus a good prompt already beats your tuned old model, because deleting the fine-tune is a success rather than a loss."},{"slug":"versioning-models-and-data","title":"Versioning so a model can be explained later","url":"https://addaly.com/learn/fine-tuning/versioning-models-and-data","api":"https://addaly.com/api/lesson/fine-tuning/versioning-models-and-data","minutes":8,"keyIdea":"A manifest of content hashes travelling with the artefact, plus a model-version field on every logged request, is what turns 'what produced this answer in March' from a memory into a lookup; and rebuilding a random old version once a quarter is how you find out whether it actually works."},{"slug":"disclosure-and-model-cards","title":"Model cards and disclosure","url":"https://addaly.com/learn/fine-tuning/disclosure-and-model-cards","api":"https://addaly.com/api/lesson/fine-tuning/disclosure-and-model-cards","minutes":9,"keyIdea":"A model card states intended use, out-of-scope use, training-data provenance, evaluation with intervals, and limitations explained by mechanism, and since the regulatory position differs by jurisdiction and is still moving, that document is what travels everywhere while the specific legal duties do not."},{"slug":"retiring-a-fine-tune","title":"Retiring a fine-tune","url":"https://addaly.com/learn/fine-tuning/retiring-a-fine-tune","api":"https://addaly.com/api/lesson/fine-tuning/retiring-a-fine-tune","minutes":9,"keyIdea":"Schedule the quarterly question of whether a fine-tune still beats its cost-matched baseline, retire it happily when the base model catches up, keep the decision record and cards after the weights are deleted, and treat a model nobody can rebuild as one to retire even while it is performing."}]}]},{"slug":"design-foundations","title":"Design, before Any Software","tagline":"Hierarchy, type, colour and spacing: the part of design you can do with a pencil, before any software.","description":"Design fails on ranking, not on taste. This course covers what the eye lands on first and how to control it, grouping by distance, alignment and grids, type measured in characters rather than adjectives, colour contrast you can check against a number, composition and cropping, designing for a 390-pixel phone in daylight, a nine-step way to diagnose a layout that looks wrong, and how to translate \"make it pop\" into a specific change.","level":"beginner","track":"create","url":"https://addaly.com/learn/design-foundations","lessons":74,"minutes":632,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/design-foundations.pdf","pages":414,"bytes":4575738,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/design-foundations.pdf","cover":"https://addaly.com/textbooks/look/design-foundations/1.webp?v=2026-10-07-4575738"},"film":null,"modules":[{"slug":"how-seeing-works","title":"How seeing actually works","summary":"Design is the management of a very small patch of sharp vision and a very large patch of blur. This block covers what the eye can resolve where, how big a difference has to be before it registers as deliberate, what makes a shape read as an object rather than as background, and what the eye-tracking research does and does not support. Everything later in the course is an application of this block.","outcome":"Predict where a stranger's eye will land on a layout in the first two seconds and in what order, change that order by adjusting one named channel to a stated magnitude, and say why a difference below that magnitude reads as a mistake rather than as a rank.","lessons":[{"slug":"hierarchy-not-taste","title":"Your poster is not ugly, it is unranked","url":"https://addaly.com/learn/design-foundations/hierarchy-not-taste","api":"https://addaly.com/api/lesson/design-foundations/hierarchy-not-taste","minutes":9,"keyIdea":"A design has a hierarchy only if things differ enough to be ranked at a glance, and promoting one element means demoting another."},{"slug":"peripheral-vision-is-a-landmark-channel","title":"What your peripheral vision is actually for","url":"https://addaly.com/learn/design-foundations/peripheral-vision-is-a-landmark-channel","api":"https://addaly.com/api/lesson/design-foundations/peripheral-vision-is-a-landmark-channel","minutes":9,"keyIdea":"Outside the central patch, vision keeps luminance blobs, motion and gross shape and throws away detail and anything with close neighbours, so a landmark has to be a large isolated blob rather than a small precise mark."},{"slug":"the-squint-test","title":"The squint test, done properly","url":"https://addaly.com/learn/design-foundations/the-squint-test","api":"https://addaly.com/api/lesson/design-foundations/the-squint-test","minutes":8,"keyIdea":"Convert a design to luminance greyscale and blur it slightly: if three masses do not appear in a clear order, the fault is structural and no amount of colour work will repair it."},{"slug":"just-noticeable-difference","title":"How big a difference has to be","url":"https://addaly.com/learn/design-foundations/just-noticeable-difference","api":"https://addaly.com/api/lesson/design-foundations/just-noticeable-difference","minutes":9,"keyIdea":"Every difference you introduce must clear a perceptual threshold (roughly 1.2x for size, two weight steps, 15 to 20 points of lightness, double the gap), because a difference below it carries no information and reads as a production error."},{"slug":"the-emphasis-budget","title":"Emphasis is zero-sum","url":"https://addaly.com/learn/design-foundations/the-emphasis-budget","api":"https://addaly.com/api/lesson/design-foundations/the-emphasis-budget","minutes":8,"keyIdea":"Emphasis is a fixed budget on any single view, so making one element more prominent always means demoting another, and the answer to make this bigger is the question what comes down."},{"slug":"figure-and-ground","title":"What makes a shape read as an object","url":"https://addaly.com/learn/design-foundations/figure-and-ground","api":"https://addaly.com/api/lesson/design-foundations/figure-and-ground","minutes":9,"keyIdea":"The eye decides what is object and what is background before it ranks anything, and space is a stronger device for making that decision than fills, borders or shadows, in that order."},{"slug":"scan-paths-and-the-f-pattern","title":"What the eye-tracking research actually says","url":"https://addaly.com/learn/design-foundations/scan-paths-and-the-f-pattern","api":"https://addaly.com/api/lesson/design-foundations/scan-paths-and-the-f-pattern","minutes":9,"keyIdea":"The F-pattern describes how people skim a page with no hierarchy rather than prescribing where to put things, so the correct response to it is to give the eye structured landing points instead of reinforcing the shape."},{"slug":"visual-weight-and-the-optical-centre","title":"Weight is not area, and centre is not the middle","url":"https://addaly.com/learn/design-foundations/visual-weight-and-the-optical-centre","api":"https://addaly.com/api/lesson/design-foundations/visual-weight-and-the-optical-centre","minutes":8,"keyIdea":"Visual weight is area times darkness times detail, not size, and both balance and centring should be judged on where the mass sits rather than where the bounding box is."},{"slug":"contrast-of-form","title":"Shape is a channel you are probably not using","url":"https://addaly.com/learn/design-foundations/contrast-of-form","api":"https://addaly.com/api/lesson/design-foundations/contrast-of-form","minutes":8,"keyIdea":"Gross shape survives peripheral vision, greyscale, glare and colour blindness, so one deviant silhouette in a field of rectangles is a cheap and robust emphasis, provided it stays rare enough to mean something."},{"slug":"faces-numbers-and-words","title":"Content that attracts attention whatever you do to it","url":"https://addaly.com/learn/design-foundations/faces-numbers-and-words","api":"https://addaly.com/api/lesson/design-foundations/faces-numbers-and-words","minutes":8,"keyIdea":"Faces, numerals, a reader's own identifying words and any motion attract fixations regardless of styling, so inventory what is already pre-emphasised on a surface before you allocate size, value and isolation around it."},{"slug":"diagnose-before-you-decorate","title":"Nine checks that find what is wrong with a layout","url":"https://addaly.com/learn/design-foundations/diagnose-before-you-decorate","api":"https://addaly.com/api/lesson/design-foundations/diagnose-before-you-decorate","minutes":10,"keyIdea":"Diagnose in order (hierarchy, value, spacing, alignment, inventory) because a fault in structure cannot be fixed with colour, and colour work done first gets thrown away."}]},{"slug":"space-grouping-and-the-grid","title":"Space, grouping and the grid","summary":"Space is the cheapest material in design and the one beginners spend least. This block turns spacing from a feeling into a system: which grouping cue wins when two of them disagree, a scale that makes every gap a deliberate decision, the arithmetic of columns and gutters, where optical alignment departs from mathematical alignment, and how big a thing has to be before a thumb can hit it.","outcome":"Set every gap in a layout from a single stated spacing scale, name the relationship each gap encodes and the grouping cue carrying it, lay out a column grid from its arithmetic rather than by eye, and say where an optical adjustment must override the alignment tool.","lessons":[{"slug":"distance-means-belonging","title":"The gap is doing the talking","url":"https://addaly.com/learn/design-foundations/distance-means-belonging","api":"https://addaly.com/api/lesson/design-foundations/distance-means-belonging","minutes":9,"keyIdea":"The eye assigns things to groups by distance before it reads a word, so the space inside a group must be obviously smaller than the space around it."},{"slug":"when-grouping-cues-conflict","title":"When two grouping cues disagree","url":"https://addaly.com/learn/design-foundations/when-grouping-cues-conflict","api":"https://addaly.com/api/lesson/design-foundations/when-grouping-cues-conflict","minutes":9,"keyIdea":"Grouping cues have different strengths (a bounding region beats distance, distance beats colour) so a proximity error cannot be repaired with similarity, and a group that distance cannot express needs a boundary rather than a shared hue."},{"slug":"a-spacing-scale","title":"Every gap comes from a list","url":"https://addaly.com/learn/design-foundations/a-spacing-scale","api":"https://addaly.com/api/lesson/design-foundations/a-spacing-scale","minutes":8,"keyIdea":"Every gap in a design should be a member of one multiplicative scale with a meaning attached to each step, so that spacing becomes a statement about relationships rather than a series of independent guesses."},{"slug":"whitespace-is-not-empty","title":"Space is content you have not been billed for","url":"https://addaly.com/learn/design-foundations/whitespace-is-not-empty","api":"https://addaly.com/api/lesson/design-foundations/whitespace-is-not-empty","minutes":8,"keyIdea":"Space is a working mechanism (isolation, decrowding and grouping) rather than an unfilled area, but it is paid for in scrolling on small screens, so spend it on the boundaries that carry meaning and compress the ones that do not."},{"slug":"invisible-edges","title":"You can feel a misalignment you cannot see","url":"https://addaly.com/learn/design-foundations/invisible-edges","api":"https://addaly.com/api/lesson/design-foundations/invisible-edges","minutes":9,"keyIdea":"Every element should share an edge with something else, and where the alignment tool and your eye disagree, trust your eye."},{"slug":"optical-alignment","title":"Where the alignment tool is wrong","url":"https://addaly.com/learn/design-foundations/optical-alignment","api":"https://addaly.com/api/lesson/design-foundations/optical-alignment","minutes":9,"keyIdea":"Layout tools align bounding boxes while readers align visible mass, so icons beside text, letters against rules, punctuation at a margin and text in a button all need small documented corrections that the tool will otherwise undo."},{"slug":"columns-gutters-and-margins","title":"A grid is arithmetic, not taste","url":"https://addaly.com/learn/design-foundations/columns-gutters-and-margins","api":"https://addaly.com/api/lesson/design-foundations/columns-gutters-and-margins","minutes":9,"keyIdea":"A column grid is defined by the exact relationship between margin, column and gutter, and its value is that repeated positioning decisions get made once: it removes small errors and arguments rather than producing quality."},{"slug":"vertical-rhythm-and-its-limits","title":"Vertical rhythm, and why the strict version fails on screen","url":"https://addaly.com/learn/design-foundations/vertical-rhythm-and-its-limits","api":"https://addaly.com/api/lesson/design-foundations/vertical-rhythm-and-its-limits","minutes":8,"keyIdea":"A strict baseline grid is achievable in print and brittle on screen because of half-leading, arbitrary content heights, platform form controls and reflow, so keep the part readers perceive, a small consistent set of vertical values tied to the line height, and drop the rest."},{"slug":"inner-space-belongs-to-the-object","title":"Padding belongs to the thing, margin belongs to the relationship","url":"https://addaly.com/learn/design-foundations/inner-space-belongs-to-the-object","api":"https://addaly.com/api/lesson/design-foundations/inner-space-belongs-to-the-object","minutes":8,"keyIdea":"Padding is part of an object's identity and travels with it, while margin describes a relationship that belongs to the layout, so components should carry internal padding and let their container set the gaps between them."},{"slug":"touch-targets-and-fitts","title":"How big a thing has to be to hit","url":"https://addaly.com/learn/design-foundations/touch-targets-and-fitts","api":"https://addaly.com/api/lesson/design-foundations/touch-targets-and-fitts","minutes":9,"keyIdea":"Visual size and target size are separate decisions (aim for 44 to 48 pixels of target with at least 8 pixels between neighbours) and because distance and width both sit inside a logarithm, widening a target buys as much as halving the distance to it."},{"slug":"balance-without-symmetry","title":"Balance is a comparison of weights","url":"https://addaly.com/learn/design-foundations/balance-without-symmetry","api":"https://addaly.com/api/lesson/design-foundations/balance-without-symmetry","minutes":8,"keyIdea":"Balance compares visual weights multiplied by their distance from an axis rather than matching sizes, and a composition that is slightly off balance reads as an error, so either resolve it properly or push the imbalance far enough to be obviously deliberate."}]},{"slug":"type-mechanically","title":"Type, mechanically","summary":"Typography is the part of design with the most measurable answers and the most folklore attached. This block replaces the folklore: how to compare two typefaces at the same apparent size, how to build a size scale, when to justify and why rivers form, what tracking is for, which figures to use in a table, and what breaks when the text is in Devanagari or Urdu rather than English.","outcome":"Set a page of text a stranger can read comfortably (measure, leading, size scale, alignment, figures and emphasis each chosen from stated numbers) say why each number is where it is, and name what changes when the same page is set in a non-Latin script.","lessons":[{"slug":"measure-before-typeface","title":"Your font is fine, your line is too long","url":"https://addaly.com/learn/design-foundations/measure-before-typeface","api":"https://addaly.com/api/lesson/design-foundations/measure-before-typeface","minutes":10,"keyIdea":"Set the line length to 45-75 characters before you touch the typeface, because most \"hard to read\" is a measure problem wearing a font costume."},{"slug":"anatomy-that-matters","title":"The four measurements that decide how a typeface behaves","url":"https://addaly.com/learn/design-foundations/anatomy-that-matters","api":"https://addaly.com/api/lesson/design-foundations/anatomy-that-matters","minutes":9,"keyIdea":"A typeface's behaviour is governed by measurable properties (x-height ratio, aperture, stroke contrast, descender length and character differentiation) and matching point size between two faces does not match their apparent size or their legibility."},{"slug":"a-type-scale","title":"Four sizes, chosen once","url":"https://addaly.com/learn/design-foundations/a-type-scale","api":"https://addaly.com/api/lesson/design-foundations/a-type-scale","minutes":8,"keyIdea":"Build four or five text sizes from a base and a ratio so that every pair clears the perceptual threshold, compress the ratio on small screens, and carry the rest of the hierarchy with weight, colour and space rather than with more sizes."},{"slug":"choosing-a-typeface-by-job","title":"Choosing a typeface, and what the licence actually says","url":"https://addaly.com/learn/design-foundations/choosing-a-typeface-by-job","api":"https://addaly.com/api/lesson/design-foundations/choosing-a-typeface-by-job","minutes":9,"keyIdea":"Choose a typeface by the job it must do (available weights, real italics, script coverage, figure behaviour) before aesthetics, and check the licence, because a desktop licence usually does not cover web embedding and design protection itself varies by country."},{"slug":"pairing-without-guessing","title":"Two typefaces, and why you probably want one","url":"https://addaly.com/learn/design-foundations/pairing-without-guessing","api":"https://addaly.com/api/lesson/design-foundations/pairing-without-guessing","minutes":8,"keyIdea":"One family with many weights is the default and a second typeface needs a stated reason; when you do pair, cross a class boundary, match x-height and apparent weight, and write down which face does which job."},{"slug":"ragged-justified-and-hyphenation","title":"Rivers, rags and where the line breaks","url":"https://addaly.com/learn/design-foundations/ragged-justified-and-hyphenation","api":"https://addaly.com/api/lesson/design-foundations/ragged-justified-and-hyphenation","minutes":9,"keyIdea":"Justification absorbs its adjustment in word spaces, so a narrow measure with few spaces per line produces rivers; justify only at 60 characters and up with hyphenation properly enabled, and remember that hyphenation silently fails without a declared language."},{"slug":"tracking-kerning-and-optical-size","title":"Letter spacing, and the sizes type was drawn for","url":"https://addaly.com/learn/design-foundations/tracking-kerning-and-optical-size","api":"https://addaly.com/api/lesson/design-foundations/tracking-kerning-and-optical-size","minutes":8,"keyIdea":"Default letter spacing is drawn for one size, so display type wants negative tracking and all-caps labels want 6 to 10 per cent positive; and a font with an optical size axis adjusts the letterforms themselves rather than only the gaps."},{"slug":"case-italic-and-emphasis","title":"Capitals, italics and the cost of emphasis","url":"https://addaly.com/learn/design-foundations/case-italic-and-emphasis","api":"https://addaly.com/api/lesson/design-foundations/case-italic-and-emphasis","minutes":8,"keyIdea":"Capitals flatten the word shapes that reading depends on, so reserve them for short labels set with CSS rather than typed, and emphasise with the weakest device that works (italic before bold before colour) because stacking them cancels the emphasis."},{"slug":"numerals-and-punctuation","title":"Figures, dashes and the details nobody teaches","url":"https://addaly.com/learn/design-foundations/numerals-and-punctuation","api":"https://addaly.com/api/lesson/design-foundations/numerals-and-punctuation","minutes":8,"keyIdea":"Use tabular figures for anything that changes in place or sits in a column, oldstyle figures inside prose, the correct dash for the job, and a locale-aware formatter for digit grouping, because Indian grouping differs from Western and hard-coding one is a decision to be wrong somewhere."},{"slug":"typographic-colour","title":"The grey of a paragraph","url":"https://addaly.com/learn/design-foundations/typographic-colour","api":"https://addaly.com/api/lesson/design-foundations/typographic-colour","minutes":8,"keyIdea":"The even grey texture of a text block comes from weight, size, spacing and leading acting together, so check it by blurring or inverting the page and fix the specific cause of each patch rather than adjusting the settings at random."},{"slug":"type-in-indic-and-other-scripts","title":"What breaks when the text is not in English","url":"https://addaly.com/learn/design-foundations/type-in-indic-and-other-scripts","api":"https://addaly.com/api/lesson/design-foundations/type-in-indic-and-other-scripts","minutes":10,"keyIdea":"Line height, letter spacing, measure and the italic convention are all Latin defaults that degrade silently in other scripts: Devanagari and Indic scripts need more vertical room and no tracking, Urdu Nastaliq needs far more still, and the only reliable check is a native reader looking at real text in the real layout."},{"slug":"make-it-pop","title":"Make it pop is a symptom report","url":"https://addaly.com/learn/design-foundations/make-it-pop","api":"https://addaly.com/api/lesson/design-foundations/make-it-pop","minutes":9,"keyIdea":"Treat client feedback as a description of a symptom and do the diagnosis yourself, and use mirroring and a five-second test to see your own work as a stranger would."}]},{"slug":"colour-measured","title":"Colour, measured","summary":"Colour is where design has the most measurable answers and the most unreferenced folklore. This block gives you the arithmetic (the luminance formula behind every contrast checker, why the lightness slider in HSL is not lightness, what colour vision deficiency actually removes), and it is equally clear about where the standards are contested, where cultural meaning has no universal answer, and where a screen cannot tell you what will come off a press.","outcome":"Build a palette from perceptual lightness ramps rather than from hue, state the contrast ratio of every text pair and the criterion it is being judged against, name the specific conditions under which that ratio overstates legibility, and give any colour-carried meaning a second non-colour encoding.","lessons":[{"slug":"contrast-beats-palette","title":"A palette will not save an unreadable page","url":"https://addaly.com/learn/design-foundations/contrast-beats-palette","api":"https://addaly.com/api/lesson/design-foundations/contrast-beats-palette","minutes":10,"keyIdea":"Build palettes by moving lightness rather than hue, check every text pair against a contrast number, and never let colour be the only thing carrying a meaning."},{"slug":"why-hsl-lies-about-lightness","title":"The lightness slider is not lightness","url":"https://addaly.com/learn/design-foundations/why-hsl-lies-about-lightness","api":"https://addaly.com/api/lesson/design-foundations/why-hsl-lies-about-lightness","minutes":9,"keyIdea":"HSL lightness is a position in the RGB cube rather than a measurement of brightness, so yellow and blue at the same L differ more than tenfold in luminance: build ramps in a perceptually uniform space such as OKLCH, or measure every swatch."},{"slug":"the-contrast-ratio-formula","title":"What a contrast checker is actually computing","url":"https://addaly.com/learn/design-foundations/the-contrast-ratio-formula","api":"https://addaly.com/api/lesson/design-foundations/the-contrast-ratio-formula","minutes":9,"keyIdea":"A contrast ratio is the linearised, sensitivity-weighted luminance of two colours compared with a flare constant added to both, capped at 21:1, and the 4.5:1 threshold is a conformance floor rather than a guarantee that text is comfortable to read."},{"slug":"where-contrast-ratios-fail","title":"Where the contrast standard is wrong, and what is unsettled","url":"https://addaly.com/learn/design-foundations/where-contrast-ratios-fail","api":"https://addaly.com/api/lesson/design-foundations/where-contrast-ratios-fail","minutes":9,"keyIdea":"The WCAG 2 contrast formula ignores size, weight and polarity and mis-scores very dark and very light pairs, so meet it as the enforceable floor while adding headroom for small or light text and checking dark mode separately. APCA addresses these gaps but is a draft, not a requirement."},{"slug":"colour-vision-deficiency","title":"What colour blindness actually removes","url":"https://addaly.com/learn/design-foundations/colour-vision-deficiency","api":"https://addaly.com/api/lesson/design-foundations/colour-vision-deficiency","minutes":9,"keyIdea":"Common colour vision deficiency collapses red-green distinctions while leaving lightness discrimination intact, so a palette built on lightness steps is already largely robust; and a simulator showing a distinction disappearing is conclusive while one showing it surviving is not."},{"slug":"never-colour-alone","title":"Colour is never the only signal","url":"https://addaly.com/learn/design-foundations/never-colour-alone","api":"https://addaly.com/api/lesson/design-foundations/never-colour-alone","minutes":8,"keyIdea":"Colour must always be the second encoding of something already carried by lightness, shape, text or position, because colour fails under deficiency, greyscale, sunlight and bad screens, and the check is simply to use the product in greyscale."},{"slug":"neutrals-and-tinted-greys","title":"Greys are a design decision","url":"https://addaly.com/learn/design-foundations/neutrals-and-tinted-greys","api":"https://addaly.com/api/lesson/design-foundations/neutrals-and-tinted-greys","minutes":8,"keyIdea":"Neutrals cover most of an interface, so build them as a perceptually even ramp tinted slightly towards one hue, keep every grey at the same temperature, and spread the dark end further than the arithmetic suggests because small differences compress near black."},{"slug":"semantic-colour-and-culture","title":"Red means danger, except where it does not","url":"https://addaly.com/learn/design-foundations/semantic-colour-and-culture","api":"https://addaly.com/api/lesson/design-foundations/semantic-colour-and-culture","minutes":8,"keyIdea":"There is no reliable universal mapping from hue to meaning (red is danger in one market and auspicious in another, and stock-market colour conventions are inverted across East Asia) so rely on conventions you establish consistently inside your own product and always back them with a non-colour signal."},{"slug":"dark-mode-is-not-inversion","title":"Dark mode, built rather than inverted","url":"https://addaly.com/learn/design-foundations/dark-mode-is-not-inversion","api":"https://addaly.com/api/lesson/design-foundations/dark-mode-is-not-inversion","minutes":9,"keyIdea":"A dark theme is a second design with its own colour values: a near-black surface rather than black, elevation expressed by lightness rather than shadow, lightened and desaturated brand colours, and a slightly lighter font weight to offset halation."},{"slug":"colour-for-print","title":"Why your blue printed purple","url":"https://addaly.com/learn/design-foundations/colour-for-print","api":"https://addaly.com/api/lesson/design-foundations/colour-for-print","minutes":9,"keyIdea":"Screens add light and presses subtract it, so saturated blues, greens and oranges simply do not exist in CMYK; soft-proof in Scribus or GIMP against the printer's profile, use rich black for solids and pure K for small text, and approve colour from a printed sample rather than a screen."},{"slug":"how-many-colours","title":"How many colours a design needs","url":"https://addaly.com/learn/design-foundations/how-many-colours","api":"https://addaly.com/api/lesson/design-foundations/how-many-colours","minutes":8,"keyIdea":"One neutral ramp, one brand ramp and three or four semantic colours covers most design work, because each additional colour reduces the information carried by every existing one. Data visualisation is the genuine exception, and there the palette should be a tested colour-blind-safe set."}]},{"slug":"composition-and-the-image","title":"Composition and the image","summary":"Most design work includes a picture, and most pictures arrive as somebody else's rectangle. This block is about what you do with them: where the crop should fall and what it removes, why a tangent is uncomfortable, how to build depth on a flat surface, how to keep text legible over an image you do not control, and how to make one asset survive being re-cropped by four different platforms.","outcome":"Crop and place an image so that the subject, the four frame edges, the empty space and any text over it all support one reading, justify the crop by what it removes, and produce a single asset that survives re-cropping to square, portrait and vertical without losing its subject.","lessons":[{"slug":"thirds-and-the-frame","title":"The rule of thirds is a nudge, not a law","url":"https://addaly.com/learn/design-foundations/thirds-and-the-frame","api":"https://addaly.com/api/lesson/design-foundations/thirds-and-the-frame","minutes":9,"keyIdea":"Decide first whether the picture wants balance or tension, then check the four edges: the thirds grid is only useful for stopping you centring a horizon."},{"slug":"tangents-and-edge-collisions","title":"Why a near-touch is worse than an overlap","url":"https://addaly.com/learn/design-foundations/tangents-and-edge-collisions","api":"https://addaly.com/api/lesson/design-foundations/tangents-and-edge-collisions","minutes":8,"keyIdea":"A tangent removes the occlusion information the visual system uses to order depth, so two contours that nearly touch fuse into one ambiguous shape: either overlap them clearly or separate them clearly, and never crop a figure at a joint."},{"slug":"cropping-is-subtraction","title":"A crop is a decision about what leaves","url":"https://addaly.com/learn/design-foundations/cropping-is-subtraction","api":"https://addaly.com/api/lesson/design-foundations/cropping-is-subtraction","minutes":8,"keyIdea":"A crop is a decision about what to remove rather than what to keep, it cannot change perspective because that was fixed at capture, and it spends resolution permanently, so crop last, for a named output, and never over the original."},{"slug":"leading-lines-and-the-eye-path","title":"Building a path through the image","url":"https://addaly.com/learn/design-foundations/leading-lines-and-the-eye-path","api":"https://addaly.com/api/lesson/design-foundations/leading-lines-and-the-eye-path","minutes":8,"keyIdea":"The eye follows the smoothest available path, and gaze direction, rows of objects and value edges create lines the picture never drew, so give a facing subject space to look into, specify the intended path before checking it, and never leave a strong line ending at nothing."},{"slug":"depth-without-perspective","title":"Six ways to make a flat surface have depth","url":"https://addaly.com/learn/design-foundations/depth-without-perspective","api":"https://addaly.com/api/lesson/design-foundations/depth-without-perspective","minutes":8,"keyIdea":"Occlusion is by far the strongest depth cue and costs nothing, aerial perspective (less contrast, less saturation, closer to the background lightness) is the one you can apply deliberately anywhere, and shadows work only when every shadow in a design agrees about one light direction."},{"slug":"negative-space-as-a-shape","title":"The space between things has a shape","url":"https://addaly.com/learn/design-foundations/negative-space-as-a-shape","api":"https://addaly.com/api/lesson/design-foundations/negative-space-as-a-shape","minutes":8,"keyIdea":"The leftover space in a layout is itself a shape that readers see, so evaluate it directly by filling every element with flat black and looking only at the white, and place the largest area of empty space beside the most important element rather than distributing it evenly."},{"slug":"aspect-ratios-and-safe-areas","title":"One image, four crops","url":"https://addaly.com/learn/design-foundations/aspect-ratios-and-safe-areas","api":"https://addaly.com/api/lesson/design-foundations/aspect-ratios-and-safe-areas","minutes":9,"keyIdea":"Design in the tallest ratio you need and keep everything load-bearing inside the intersection of all the crops you will be asked for, because platform crops, overlay positions and compression all change without notice and margin is the only durable defence."},{"slug":"two-subjects-fighting","title":"Two focal points is none","url":"https://addaly.com/learn/design-foundations/two-subjects-fighting","api":"https://addaly.com/api/lesson/design-foundations/two-subjects-fighting","minutes":8,"keyIdea":"Two elements of similar prominence leave the eye oscillating, so demote one, merge them into a single group, or commit to an exact symmetry, and the diagnostic is not that viewers disagree with you but that they disagree with each other about what they saw first."},{"slug":"text-over-image","title":"Text over a picture you do not control","url":"https://addaly.com/learn/design-foundations/text-over-image","api":"https://addaly.com/api/lesson/design-foundations/text-over-image","minutes":9,"keyIdea":"An image has no single contrast ratio, so the worst pixel under the text governs legibility. And because the image is usually unknown in advance, a solid panel or a multi-stop gradient scrim is the robust choice and a text shadow alone is not."},{"slug":"rhythm-repetition-and-the-break","title":"Repetition, and the one that breaks it","url":"https://addaly.com/learn/design-foundations/rhythm-repetition-and-the-break","api":"https://addaly.com/api/lesson/design-foundations/rhythm-repetition-and-the-break","minutes":8,"keyIdea":"Repetition builds a prediction and a single deviation violates it cheaply, which makes consistency the thing that gives emphasis its force, so break a pattern once, at the place you want attention, and never twice in the same way."}]},{"slug":"real-screens-and-surfaces","title":"Real screens, real thumbs, real paper","summary":"A design lives somewhere: a 360-pixel phone held one-handed on a bus, a 200% browser zoom, a sheet of 130gsm paper coming off a press with 3mm trimmed off every edge. This block covers the numbers those surfaces actually have (device widths and pixel ratios, thumb reach, zoom and reflow requirements, page weight, bleed and paper) and what each one forces you to decide differently.","outcome":"Produce a layout that works at 360 CSS pixels one-handed in daylight, at 400% zoom, and on paper with correct bleed and resolution, naming for each constraint the specific number it imposes and which design decisions change because of it.","lessons":[{"slug":"what-survives-the-shrink","title":"Design it at 390 pixels or find out the hard way","url":"https://addaly.com/learn/design-foundations/what-survives-the-shrink","api":"https://addaly.com/api/lesson/design-foundations/what-survives-the-shrink","minutes":9,"keyIdea":"Design at 360-390 pixels wide and test on a cheap phone in daylight, because shrinking a desktop layout hides the faults that expanding a phone layout exposes."},{"slug":"the-numbers-real-devices-have","title":"What a pixel is, and how wide phones actually are","url":"https://addaly.com/learn/design-foundations/the-numbers-real-devices-have","api":"https://addaly.com/api/lesson/design-foundations/the-numbers-real-devices-have","minutes":9,"keyIdea":"A CSS pixel is an angular reference rather than a physical size, device pixel ratio means raster assets need 2x or 3x export while vectors need none, and 360 CSS pixels is the width to design at because a layout that fits at 393 can still break there."},{"slug":"breakpoints-from-content","title":"Breakpoints come from the content, not from devices","url":"https://addaly.com/learn/design-foundations/breakpoints-from-content","api":"https://addaly.com/api/lesson/design-foundations/breakpoints-from-content","minutes":8,"keyIdea":"Put breakpoints where your content measurably breaks rather than where devices sit, prefer intrinsic rules and container queries over enumerated cases, and design the small screen first because a narrow column forces the hierarchy decisions a wide one lets you avoid."},{"slug":"thumb-reach-and-one-handed-use","title":"Where a thumb can actually go","url":"https://addaly.com/learn/design-foundations/thumb-reach-and-one-handed-use","api":"https://addaly.com/api/lesson/design-foundations/thumb-reach-and-one-handed-use","minutes":8,"keyIdea":"The top-left corner is the hardest point on a large phone for most people, so frequent actions belong in the easily reached bottom while destructive ones need separation, and because people switch grips constantly, nothing essential may sit where a single grip cannot reach it."},{"slug":"type-rendering-on-screen-and-paper","title":"Why 10pt is fine in print and terrible on screen","url":"https://addaly.com/learn/design-foundations/type-rendering-on-screen-and-paper","api":"https://addaly.com/api/lesson/design-foundations/type-rendering-on-screen-and-paper","minutes":8,"keyIdea":"Print builds a 10pt letter from hundreds of dots while a screen builds it from about ten pixels, so screen minimums are larger (16px body, and exactly 16px on form inputs because iOS auto-zooms below that) and font smoothing declarations change stroke weight rather than sharpness."},{"slug":"empty-error-and-loading-states","title":"The five screens nobody designs","url":"https://addaly.com/learn/design-foundations/empty-error-and-loading-states","api":"https://addaly.com/api/lesson/design-foundations/empty-error-and-loading-states","minutes":9,"keyIdea":"Every screen ships in at least six states (empty, one, too many, loading, error and offline) and the undesigned ones default to a blank rectangle and the words something went wrong, so produce all six before calling a screen finished."},{"slug":"motion-with-restraint","title":"Motion, and the people it makes ill","url":"https://addaly.com/learn/design-foundations/motion-with-restraint","api":"https://addaly.com/api/lesson/design-foundations/motion-with-restraint","minutes":8,"keyIdea":"Motion overrides every other attention channel, so keep it to continuity, feedback and direction at 100 to 400 milliseconds with ease-out, and honour reduced-motion by replacing movement with a fade, because large-scale motion causes real symptoms rather than mild annoyance."},{"slug":"accessibility-beyond-contrast","title":"The accessibility requirements that are design decisions","url":"https://addaly.com/learn/design-foundations/accessibility-beyond-contrast","api":"https://addaly.com/api/lesson/design-foundations/accessibility-beyond-contrast","minutes":9,"keyIdea":"Focus visibility, 400% reflow, agreement between visual and source order, persistent labels and functional alt text are design decisions rather than implementation details, and automated checkers find roughly a third of accessibility issues, so the rest needs a person with a keyboard and a free screen reader."},{"slug":"weight-is-a-design-decision","title":"The designer decides how heavy the page is","url":"https://addaly.com/learn/design-foundations/weight-is-a-design-decision","api":"https://addaly.com/api/lesson/design-foundations/weight-is-a-design-decision","minutes":9,"keyIdea":"Page weight is set by design choices (how many images, how many font weights, how large the hero) and a 3MB image exceeds the ten-second attention limit on a connection many readers have, so choose the weight deliberately rather than letting export defaults choose it."},{"slug":"print-and-physical-output","title":"Bleed, trim and the things paper does","url":"https://addaly.com/learn/design-foundations/print-and-physical-output","api":"https://addaly.com/api/lesson/design-foundations/print-and-physical-output","minutes":9,"keyIdea":"Trimming lands within about a millimetre of the mark, so artwork needs 3mm of bleed beyond the trim and nothing important within 3 to 5mm inside it. And paper finish, binding method and viewing distance each change the design before the file is exported."}]},{"slug":"making-decisions-once","title":"Making the decision once","summary":"The scales in the previous blocks were each a way of deciding something once instead of repeatedly. This block joins them up: named tokens, components and the variants worth having, the states every component ships in whether or not you drew them, icons as a set rather than a collection, and an honest account of what a design system costs and when a project is too small to want one.","outcome":"Convert a set of one-off screens into named tokens and a small component set, decide for any new element whether it is a variant of something existing or a new thing, specify every state a component can be in, and say at what point a project is large enough for the system to be worth its maintenance cost.","lessons":[{"slug":"tokens-are-decisions-with-names","title":"A token is a decision with a name","url":"https://addaly.com/learn/design-foundations/tokens-are-decisions-with-names","api":"https://addaly.com/api/lesson/design-foundations/tokens-are-decisions-with-names","minutes":8,"keyIdea":"A token is a named design decision, and the structure that matters is two layers (primitive values and semantic roles pointing at them) because retheming means remapping the semantic layer rather than editing every component."},{"slug":"naming-things","title":"Names that survive the next change","url":"https://addaly.com/learn/design-foundations/naming-things","api":"https://addaly.com/api/lesson/design-foundations/naming-things","minutes":8,"keyIdea":"Name tokens and components by the role they play rather than by how they currently look, number ramps rather than labelling them small and large, and order words from general to specific so autocomplete groups them, then test the names on somebody who did not write them."},{"slug":"components-and-variants","title":"Variant, or a new thing","url":"https://addaly.com/learn/design-foundations/components-and-variants","api":"https://addaly.com/api/lesson/design-foundations/components-and-variants","minutes":9,"keyIdea":"Make a variant when the structure and purpose are the same and only the appearance differs, and a new component when the content model differs; then define axes and rules rather than drawing permutations, and use slots to keep the property count from doubling."},{"slug":"states-are-part-of-the-component","title":"Every state you did not draw still ships","url":"https://addaly.com/learn/design-foundations/states-are-part-of-the-component","api":"https://addaly.com/api/lesson/design-foundations/states-are-part-of-the-component","minutes":9,"keyIdea":"A component ships in every state whether or not it was designed, hover and focus serve different audiences and never substitute for each other, and a disabled control that cannot be read or explained should usually be an enabled control that explains what is missing on activation."},{"slug":"icons-as-a-system","title":"Icons are a set, not a collection","url":"https://addaly.com/learn/design-foundations/icons-as-a-system","api":"https://addaly.com/api/lesson/design-foundations/icons-as-a-system","minutes":8,"keyIdea":"Use one icon set, because mismatched grids, stroke weights and detail levels are visible even when nobody can name them, and label icons wherever there is room, since comprehension without a label is poor for everything outside a small well-learned set."},{"slug":"a-system-you-can-build-in-a-day","title":"The afternoon version","url":"https://addaly.com/learn/design-foundations/a-system-you-can-build-in-a-day","api":"https://addaly.com/api/lesson/design-foundations/a-system-you-can-build-in-a-day","minutes":8,"keyIdea":"A working design system for a small project is about thirty tokens and six components, all derived from decisions already made in the earlier blocks, and the step that proves it is rebuilding one real screen using nothing else."},{"slug":"documenting-and-handing-off","title":"Specifications that survive contact","url":"https://addaly.com/learn/design-foundations/documenting-and-handing-off","api":"https://addaly.com/api/lesson/design-foundations/documenting-and-handing-off","minutes":8,"keyIdea":"Hand over token names rather than pixel measurements, specify the rules for long content and narrow containers rather than only providing pictures, and keep documentation beside the code or generated from it, because stale documentation is worse than none."},{"slug":"consistency-versus-uniformity","title":"Consistency is not uniformity","url":"https://addaly.com/learn/design-foundations/consistency-versus-uniformity","api":"https://addaly.com/api/lesson/design-foundations/consistency-versus-uniformity","minutes":8,"keyIdea":"Consistency means the same things look the same while uniformity means everything does, so break the system only for moments that must not feel routine, genuinely new content, a different context or a timed experiment, and require every exception to be resolved rather than merely recorded."},{"slug":"the-cost-of-a-system","title":"When not to build one","url":"https://addaly.com/learn/design-foundations/the-cost-of-a-system","api":"https://addaly.com/api/lesson/design-foundations/the-cost-of-a-system","minutes":8,"keyIdea":"Build the three scales always, and everything beyond them only once the same decision has been made three times or a second person has joined, because a system is a product with ongoing maintenance cost, and most published advice is written for organisations a hundred times larger than the project in front of you."}]}]},{"slug":"image-editing","title":"Editing an Image","tagline":"Layers, masks, curves and export: the craft behind a photo that still holds up at full size.","description":"Raster editing as a working craft. What resolution can and cannot be recovered, why every edit belongs on its own layer, how masks separate people who can edit from people who cannot, selections down to hair, Levels and Curves instead of Brightness/Contrast, the difference between healing and cloning and generative fill, sharpening done last, and export settings that survive a slow connection. Photoshop is named; Photopea, GIMP and Krita are the paths that cost nothing.","level":"beginner","track":"create","url":"https://addaly.com/learn/image-editing","lessons":78,"minutes":703,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/image-editing.pdf","pages":478,"bytes":5441941,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/image-editing.pdf","cover":"https://addaly.com/textbooks/look/image-editing/1.webp?v=2026-10-07-5441941"},"film":null,"modules":[{"slug":"what-an-image-is-made-of","title":"What an image is made of","summary":"Before any tool, the file. A photograph is a grid of numbers with a colour meaning attached, and almost every mystery in editing (the soft enlargement, the banded sky, the grey fringe round a logo, the colours that will not print) is a property of that grid rather than a bug in the software. This block takes the file apart: channels, bit depth, gamma, alpha, the raw mosaic, the inside of a JPEG, gamut, your monitor, and what the lens did before any of it reached you.","outcome":"Open an unfamiliar image file and state what it can and cannot survive (its bit depth, colour space, alpha, compression history and lens geometry) and predict from those facts which edits will band, fringe, clip or fail to print, before making any of them.","lessons":[{"slug":"pixels-and-size","title":"The photo you were sent is too small, and nothing fixes that","url":"https://addaly.com/learn/image-editing/pixels-and-size","api":"https://addaly.com/api/lesson/image-editing/pixels-and-size","minutes":9,"keyIdea":"Enlarging can only average pixels you already have; AI upscaling invents new ones, which is a different thing from recovering them."},{"slug":"colour-in-three-numbers","title":"Three numbers per pixel, and why green counts most","url":"https://addaly.com/learn/image-editing/colour-in-three-numbers","api":"https://addaly.com/api/lesson/image-editing/colour-in-three-numbers","minutes":9,"keyIdea":"A colour pixel is three independent brightness values whose contributions to perceived lightness are roughly 21/71/7 per cent, so the green channel is your cleanest and averaging the three is never a correct greyscale."},{"slug":"bit-depth-and-banding","title":"Why the sky turns into stripes","url":"https://addaly.com/learn/image-editing/bit-depth-and-banding","api":"https://addaly.com/api/lesson/image-editing/bit-depth-and-banding","minutes":9,"keyIdea":"Banding is empty space in the histogram (a stretch redistributes the levels you have rather than creating new ones), so do tonal work in 16-bit, dither what remains, and remember that converting a JPEG upward adds no levels at all."},{"slug":"gamma-and-linear-light","title":"Mid-grey is not half the light","url":"https://addaly.com/learn/image-editing/gamma-and-linear-light","api":"https://addaly.com/api/lesson/image-editing/gamma-and-linear-light","minutes":10,"keyIdea":"Stored pixel values are spaced to match your eye, not the light, so any operation that averages or adds pixels (resizing, blurring, transparency, compositing) is arithmetically wrong unless it is done in linear light."},{"slug":"alpha-and-the-fourth-channel","title":"Transparency is a number, and it carries a colour with it","url":"https://addaly.com/learn/image-editing/alpha-and-the-fourth-channel","api":"https://addaly.com/api/lesson/image-editing/alpha-and-the-fourth-channel","minutes":9,"keyIdea":"Alpha is a single coverage number per pixel that leaves the pixel's colour untouched, so transparency problems split into three separate causes (the wrong premultiply convention, contaminated edge colour, and formats that only store on-or-off) each with its own fix."},{"slug":"raw-and-the-mosaic","title":"Two thirds of the colour in your photo was calculated","url":"https://addaly.com/learn/image-editing/raw-and-the-mosaic","api":"https://addaly.com/api/lesson/image-editing/raw-and-the-mosaic","minutes":10,"keyIdea":"A raw file is linear sensor data before demosaic, white balance, tone curve and 8-bit conversion, which is why white balance costs nothing and a stop of highlights can be rebuilt from the channels that did not clip."},{"slug":"inside-a-jpeg","title":"Eight by eight, and what the encoder threw away","url":"https://addaly.com/learn/image-editing/inside-a-jpeg","api":"https://addaly.com/api/lesson/image-editing/inside-a-jpeg","minutes":9,"keyIdea":"JPEG loses data at exactly one step, rounding the 8×8 transform coefficients, so blocking, ringing and colour fringes each map to a specific stage of the encoder and tell you whether to change the quality, the subsampling or the format."},{"slug":"colour-spaces-and-gamut","title":"Some colours have no number","url":"https://addaly.com/learn/image-editing/colour-spaces-and-gamut","api":"https://addaly.com/api/lesson/image-editing/colour-spaces-and-gamut","minutes":9,"keyIdea":"A colour space is a set of primaries defining a triangle of reachable colours, so converting to a smaller one either clips saturated areas into flat patches or compresses everything slightly, and the rendering intent is where you choose which."},{"slug":"your-screen-is-lying","title":"The monitor is a measuring instrument nobody calibrated","url":"https://addaly.com/learn/image-editing/your-screen-is-lying","api":"https://addaly.com/api/lesson/image-editing/your-screen-is-lying","minutes":8,"keyIdea":"Calibration does not make your screen match anyone else's (it makes your own judgements repeatable and eliminates the display as a suspect), and the cheapest version of it is checking every delivery on three different devices."},{"slug":"what-the-lens-did","title":"Straight lines that are not straight, and colour that is not there","url":"https://addaly.com/learn/image-editing/what-the-lens-did","api":"https://addaly.com/api/lesson/image-editing/what-the-lens-did","minutes":9,"keyIdea":"Geometry corrections resample the whole frame, so distortion, vignetting and lateral chromatic aberration go first, before cropping or retouching; and longitudinal fringing, flare and diffraction are losses no profile can undo."}]},{"slug":"the-non-destructive-workshop","title":"The non-destructive workshop","summary":"A layered file is a recipe, not a picture. This block builds the workshop you will do everything else in: what a blend mode computes, why the order of the stack changes the answer, what a group actually does to rendering, smart objects and linked files, the Channels panel as storage and arithmetic, versions and backups that survive a client changing their mind twice, and what to do when the file gets too heavy for the machine you own.","outcome":"Build and hand over a layered document another editor can take apart (correctly ordered, grouped, masked, named and versioned) and diagnose from the stack alone why an adjustment is affecting the wrong layers or why the file has become too slow to work in.","lessons":[{"slug":"never-touch-the-original","title":"Every edit should still be undoable next week","url":"https://addaly.com/learn/image-editing/never-touch-the-original","api":"https://addaly.com/api/lesson/image-editing/never-touch-the-original","minutes":9,"keyIdea":"Stack instructions on top of the pixels instead of changing them, and save the layered file before you save anything else."},{"slug":"masks-not-erasers","title":"The eraser is the tool that costs you the second revision","url":"https://addaly.com/learn/image-editing/masks-not-erasers","api":"https://addaly.com/api/lesson/image-editing/masks-not-erasers","minutes":10,"keyIdea":"Black conceals, white reveals: mask instead of erasing, and every revision becomes a brushstroke rather than a restart."},{"slug":"blend-modes-are-arithmetic","title":"Twenty-seven blend modes, six ideas","url":"https://addaly.com/learn/image-editing/blend-modes-are-arithmetic","api":"https://addaly.com/api/lesson/image-editing/blend-modes-are-arithmetic","minutes":10,"keyIdea":"Every blend mode is a short per-channel formula, so white vanishes in Multiply, black vanishes in Screen, mid-grey vanishes in Soft Light, and setting a tonal adjustment to Luminosity separates contrast from the saturation shift that normally comes with it."},{"slug":"the-layer-stack-and-order","title":"The same three edits in a different order give a different picture","url":"https://addaly.com/learn/image-editing/the-layer-stack-and-order","api":"https://addaly.com/api/lesson/image-editing/the-layer-stack-and-order","minutes":9,"keyIdea":"Image operations are not commutative, so a layer stack is an ordered recipe (repairs under tone, tone under colour, sharpening last) and a stamped flatten is a snapshot that silently goes stale the moment anything beneath it changes."},{"slug":"groups-clipping-and-pass-through","title":"Why an adjustment stopped working when you put it in a folder","url":"https://addaly.com/learn/image-editing/groups-clipping-and-pass-through","api":"https://addaly.com/api/lesson/image-editing/groups-clipping-and-pass-through","minutes":8,"keyIdea":"A group defaults to Pass Through, where adjustments inside still reach the layers below, and giving the group any other blend mode or an opacity below 100 isolates it into its own buffer so those adjustments become local."},{"slug":"smart-objects-and-linked-files","title":"One file, forty mockups, one change","url":"https://addaly.com/learn/image-editing/smart-objects-and-linked-files","api":"https://addaly.com/api/lesson/image-editing/smart-objects-and-linked-files","minutes":9,"keyIdea":"A smart object stores the original and re-renders it through your transform and filters each time, which is what makes scaling reversible, filters re-editable and contents swappable, at the cost of file size, render lag, and a portability gap that GIMP does not close."},{"slug":"channels-and-saved-selections","title":"The panel where selections go to live","url":"https://addaly.com/learn/image-editing/channels-and-saved-selections","api":"https://addaly.com/api/lesson/image-editing/channels-and-saved-selections","minutes":9,"keyIdea":"Alpha channels are permanent storage for selections, colour channels are ready-made masks waiting to be found, and multiplying two masks intersects them while screening them unions them."},{"slug":"history-versions-and-backup","title":"The file you will need is the one from Tuesday","url":"https://addaly.com/learn/image-editing/history-versions-and-backup","api":"https://addaly.com/api/lesson/image-editing/history-versions-and-backup","minutes":8,"keyIdea":"History dies when the document closes and a synced folder replicates your mistakes, so the record that actually rescues a job is named versions on disk plus three copies on two kinds of media with one of them elsewhere."},{"slug":"setting-up-to-work-fast","title":"Eleven shortcuts and a scratch disk","url":"https://addaly.com/learn/image-editing/setting-up-to-work-fast","api":"https://addaly.com/api/lesson/image-editing/setting-up-to-work-fast","minutes":8,"keyIdea":"Speed comes from never leaving the keyboard for the dozen commands you use hourly and from configuring scratch space and memory so the application stops stalling, not from working faster at the ones you use rarely."},{"slug":"when-the-file-gets-too-big","title":"Working on a laptop that cannot hold the job","url":"https://addaly.com/learn/image-editing/when-the-file-gets-too-big","api":"https://addaly.com/api/lesson/image-editing/when-the-file-gets-too-big","minutes":9,"keyIdea":"A slow document has four separable causes (pixel count, layer count, smart-filter re-rendering and scratch thrashing) and the fixes run from hiding groups and stamping checkpoints up to splitting the job into two documents, with browser-based tools hitting a hard memory ceiling rather than degrading gradually."}]},{"slug":"selections-cutouts-and-edges","title":"Selections, cut-outs and edges","summary":"Getting a subject out of its background is the most requested skill in this trade and the one where the difference between adequate and professional is visible at a glance. This block goes past the automatic button: bezier paths for manufactured edges, painting a selection by hand, colour and luminosity as selection sources, what the segmentation models are actually doing, the equation that makes hair mathematically hard, and how to cut out things that are not opaque at all.","outcome":"Choose and execute the right extraction method for a given edge (path, painted mask, colour range, luminosity, model or blend-mode composite) decontaminate the result so it carries no trace of its old background, and run a batch of cut-outs to a consistent standard with a sampling check that catches the failures.","lessons":[{"slug":"selections-and-edges","title":"Selections are easy until you reach hair","url":"https://addaly.com/learn/image-editing/selections-and-edges","api":"https://addaly.com/api/lesson/image-editing/selections-and-edges","minutes":10,"keyIdea":"Edge pixels are mixtures of subject and background, so a good cut-out is about partial transparency and colour decontamination, not about finding a line."},{"slug":"the-pen-tool-properly","title":"Two handles and a curve: making the pen tool obey","url":"https://addaly.com/learn/image-editing/the-pen-tool-properly","api":"https://addaly.com/api/lesson/image-editing/the-pen-tool-properly","minutes":10,"keyIdea":"A bezier path is anchors plus direction handles, so accuracy comes from placing few anchors at direction changes and shaping the curve with handles, and the finished cut-out lives or dies on a sub-pixel feather that matches the photograph's own edge softness."},{"slug":"quick-mask-and-painting-a-selection","title":"Stop fighting the selection tools and paint it","url":"https://addaly.com/learn/image-editing/quick-mask-and-painting-a-selection","api":"https://addaly.com/api/lesson/image-editing/quick-mask-and-painting-a-selection","minutes":8,"keyIdea":"Quick Mask turns a selection into a paintable greyscale image, so the fast route to a difficult cut-out is an automatic tool for the bulk followed by a low-opacity brush for the part the tool got wrong."},{"slug":"select-by-colour-properly","title":"Tolerance is a wall, fuzziness is a slope","url":"https://addaly.com/learn/image-editing/select-by-colour-properly","api":"https://addaly.com/api/lesson/image-editing/select-by-colour-properly","minutes":8,"keyIdea":"The Magic Wand's tolerance produces an in-or-out selection while Colour Range's fuzziness produces partial values, which is why one is for flat graphics and the other for anything that shades, and neither can separate a subject from a background that shares its values."},{"slug":"luminosity-masks","title":"Masks with no edge anywhere","url":"https://addaly.com/learn/image-editing/luminosity-masks","api":"https://addaly.com/api/lesson/image-editing/luminosity-masks","minutes":9,"keyIdea":"A luminosity mask makes each pixel's participation equal to its own brightness, so an adjustment fades continuously and has no boundary to halo along; and intersecting the mask with itself narrows it to the highlights, the shadows or a midtone band."},{"slug":"segmentation-models-and-one-click-cutouts","title":"What the one-click button is actually doing","url":"https://addaly.com/learn/image-editing/segmentation-models-and-one-click-cutouts","api":"https://addaly.com/api/lesson/image-editing/segmentation-models-and-one-click-cutouts","minutes":9,"keyIdea":"A one-click cut-out is an object-recognition model predicting which pixels belong to a learned shape, which is why it fills enclosed gaps, loses thin structures and guesses at transparency, and why the mask must be inspected on its own before it is used."},{"slug":"matting-fringes-and-colour-spill","title":"Three equations, seven unknowns: why hair is hard","url":"https://addaly.com/learn/image-editing/matting-fringes-and-colour-spill","api":"https://addaly.com/api/lesson/image-editing/matting-fringes-and-colour-spill","minutes":9,"keyIdea":"A boundary pixel is a mixture of foreground and background whose separation is mathematically underdetermined, so every extraction needs extra information, and the edge colour must be recomputed rather than contracted, feathered or contrasted away."},{"slug":"hair-fur-glass-and-smoke","title":"The four subjects that are not opaque","url":"https://addaly.com/learn/image-editing/hair-fur-glass-and-smoke","api":"https://addaly.com/api/lesson/image-editing/hair-fur-glass-and-smoke","minutes":9,"keyIdea":"Non-opaque subjects split into coverage, transmission and emission, and each needs a different method: matting and decontamination for hair, Multiply and Screen plates for glass, and a plain Screen with no mask at all for smoke and flame."},{"slug":"batch-background-removal","title":"Four hundred cut-outs, and the twelve that are wrong","url":"https://addaly.com/learn/image-editing/batch-background-removal","api":"https://addaly.com/api/lesson/image-editing/batch-background-removal","minutes":8,"keyIdea":"A batch of cut-outs is a pipeline plus a sampling check (a grey-background contact sheet of the masks finds the errors a white-background grid hides) and the predictable failure categories should be pulled out for manual work before the batch runs, not after."}]},{"slug":"tone-and-colour","title":"Tone and colour","summary":"Light and colour are where a photograph is actually made or lost, and where most of the reversible damage happens. This block covers reading the measurement rather than trusting the screen, white balance when there are two light sources, shaping form by hand with dodge and burn, what local contrast tools are really computing, saturation that does not clip, monochrome conversion that separates rather than flattens, grading with curves and lookup tables, skin tones without a false universal standard, and matching forty photographs so a catalogue reads as one shoot.","outcome":"Take a set of unevenly lit photographs to a consistent, defensible tonal and colour result: diagnosing casts from per-channel evidence, correcting mixed lighting locally, shaping form without banding or halos, and stating what you measured rather than what looked right on your screen.","lessons":[{"slug":"levels-and-curves","title":"Brightness/Contrast is one knob for a problem with five","url":"https://addaly.com/learn/image-editing/levels-and-curves","api":"https://addaly.com/api/lesson/image-editing/levels-and-curves","minutes":10,"keyIdea":"Set the black and white points first, shape the middle with Curves, and remember that contrast in the midtones is borrowed from the shadows and highlights."},{"slug":"reading-a-histogram","title":"There is no correct histogram","url":"https://addaly.com/learn/image-editing/reading-a-histogram","api":"https://addaly.com/api/lesson/image-editing/reading-a-histogram","minutes":9,"keyIdea":"The histogram only reports value distribution, so its real jobs are catching per-channel clipping and missing tones. And the camera's version is computed from the JPEG preview, which is why the raw file usually holds highlights the warning says are gone."},{"slug":"white-balance-and-mixed-light","title":"Two light sources, one global slider","url":"https://addaly.com/learn/image-editing/white-balance-and-mixed-light","api":"https://addaly.com/api/lesson/image-editing/white-balance-and-mixed-light","minutes":9,"keyIdea":"White balance has a blue-yellow axis and a green-magenta axis, so a green office cast needs tint rather than temperature, and two light sources in one frame cannot be corrected globally at all, only by masking a second correction onto the minority light."},{"slug":"dodging-and-burning","title":"Shaping light by hand, on a grey layer","url":"https://addaly.com/learn/image-editing/dodging-and-burning","api":"https://addaly.com/api/lesson/image-editing/dodging-and-burning","minutes":9,"keyIdea":"Dodge and burn on a 50 per cent grey Soft Light layer at 5 to 10 per cent brush opacity is fully reversible local tonal control, and a steep-curve black-and-white viewing layer is how you see the blotches before your client does."},{"slug":"shadows-highlights-and-local-contrast","title":"Why Clarity makes halos, and what Dehaze is estimating","url":"https://addaly.com/learn/image-editing/shadows-highlights-and-local-contrast","api":"https://addaly.com/api/lesson/image-editing/shadows-highlights-and-local-contrast","minutes":9,"keyIdea":"Shadows/Highlights, Clarity, Texture and sharpening are one operation at four radii (comparing each pixel to a blurred version of its surroundings) so halos are inherent to the method, while Dehaze is a separate estimate of an atmospheric veil that fails wherever the scene genuinely has no dark pixels."},{"slug":"hue-saturation-and-vibrance","title":"Saturation is a slider that destroys detail quietly","url":"https://addaly.com/learn/image-editing/hue-saturation-and-vibrance","api":"https://addaly.com/api/lesson/image-editing/hue-saturation-and-vibrance","minutes":8,"keyIdea":"Raising saturation pushes channels apart until the leading one clips and flattens a shaded surface into a single colour, which is why Vibrance weights the increase against existing saturation and why the three-channel histogram and a gamut warning are the two checks that catch the damage."},{"slug":"black-and-white-properly","title":"Monochrome is a decision about which colours become which greys","url":"https://addaly.com/learn/image-editing/black-and-white-properly","api":"https://addaly.com/api/lesson/image-editing/black-and-white-properly","minutes":9,"keyIdea":"Monochrome conversion is a choice of how each hue maps to a grey, so the six-channel Black and White adjustment reproduces the old coloured lens filters; and a photograph whose subject and background differ in hue but not in lightness cannot be separated by any conversion."},{"slug":"colour-grading-and-luts","title":"A look is a mapping, and a LUT is a table of it","url":"https://addaly.com/learn/image-editing/colour-grading-and-luts","api":"https://addaly.com/api/lesson/image-editing/colour-grading-and-luts","minutes":9,"keyIdea":"A grade is a mapping from input colour to output colour, so a LUT applies it identically every time and therefore gives a different result on an image whose exposure and contrast were not normalised first."},{"slug":"skin-tones-honestly","title":"There is no correct number for skin","url":"https://addaly.com/learn/image-editing/skin-tones-honestly","api":"https://addaly.com/api/lesson/image-editing/skin-tones-honestly","minutes":10,"keyIdea":"Skin has no universal correct value, so the method is to neutralise from a known reference, check hue consistency across the face rather than against a target, and recognise that automatic exposure and white balance were tuned on distributions that systematically under-serve darker skin."},{"slug":"matching-a-whole-set","title":"Forty photographs that have to look like one shoot","url":"https://addaly.com/learn/image-editing/matching-a-whole-set","api":"https://addaly.com/api/lesson/image-editing/matching-a-whole-set","minutes":8,"keyIdea":"Set consistency is bought at capture with a grey card and manual settings, maintained by syncing one hero frame's settings and then adjusting only exposure, and verified on a mid-grey contact sheet with sampled numbers rather than by eye."}]},{"slug":"repair-and-retouching","title":"Repair and retouching","summary":"Removing what should not be there, and rebuilding what has been lost. This block separates texture from tone so skin can be evened without being sanded, works through portraits and products with the restraint that keeps them honest, deals with reflections and glare, reconstructs large removed objects rather than smearing them, scans and restores damaged prints, and ends with a plain account of what no tool can bring back.","outcome":"Repair a damaged or imperfect photograph to a professional standard using the right mechanism for each fault (separated frequencies, patch synthesis, manual reconstruction or warp) and state precisely which faults in a given file are unrecoverable and why.","lessons":[{"slug":"retouching-honestly","title":"Three tools that all remove a spot, and they are not interchangeable","url":"https://addaly.com/learn/image-editing/retouching-honestly","api":"https://addaly.com/api/lesson/image-editing/retouching-honestly","minutes":11,"keyIdea":"Healing blends into its surroundings, cloning copies exactly, content-aware borrows from elsewhere in the frame, and generative fill invents, and only the last one changes what the picture claims."},{"slug":"frequency-separation","title":"Splitting texture from tone","url":"https://addaly.com/learn/image-editing/frequency-separation","api":"https://addaly.com/api/lesson/image-editing/frequency-separation","minutes":10,"keyIdea":"Frequency separation splits an image into a blurred tone layer and a neutral-grey detail layer that recombine exactly, so blemishes are healed on the detail layer where there is no tone to get wrong and colour is evened on the tone layer where there is no texture to destroy."},{"slug":"portrait-retouching-with-restraint","title":"Keep what is permanent, remove what is passing","url":"https://addaly.com/learn/image-editing/portrait-retouching-with-restraint","api":"https://addaly.com/api/lesson/image-editing/portrait-retouching-with-restraint","minutes":9,"keyIdea":"Remove what would be gone in a fortnight and keep what would not, do the retouch fully and then reduce the group's opacity to correct for the judgement drift that happens at high zoom, and treat eyes and teeth by removing colour rather than adding brightness."},{"slug":"product-retouching","title":"The product has to be the product","url":"https://addaly.com/learn/image-editing/product-retouching","api":"https://addaly.com/api/lesson/image-editing/product-retouching","minutes":9,"keyIdea":"The governing test for product work is whether the buyer receives what they saw, which permits removing sample defects, rebuilding straight edges against a path, and mirroring a symmetrical half, but never altering proportions or the colour the product actually is."},{"slug":"reflections-glare-and-glass","title":"A reflection is a photograph of the light source","url":"https://addaly.com/learn/image-editing/reflections-glare-and-glass","api":"https://addaly.com/api/lesson/image-editing/reflections-glare-and-glass","minutes":9,"keyIdea":"A specular reflection is an image of the light source added on top of the surface, so it can be reduced by subtractive adjustments or replaced from a second frame shot with the reflection moved, but removing a dense one means inventing what the recorded pixels no longer contain."},{"slug":"removing-something-large","title":"Rebuild the structure first, then the texture","url":"https://addaly.com/learn/image-editing/removing-something-large","api":"https://addaly.com/api/lesson/image-editing/removing-something-large","minutes":9,"keyIdea":"Patch-based fill copies texture from elsewhere in the same photograph and has no model of geometry, so large removals are done by rebuilding the structural lines by hand first, letting the fill handle only flat texture, and then unifying tone and grain across the repair."},{"slug":"liquify-warp-and-the-line","title":"Moving pixels, and the straight line that gives it away","url":"https://addaly.com/learn/image-editing/liquify-warp-and-the-line","api":"https://addaly.com/api/lesson/image-editing/liquify-warp-and-the-line","minutes":9,"keyIdea":"A warp is a displacement mesh that moves everything within its influence, so the reliable evidence of reshaping is a bent straight line in the background, which is exactly what the freeze mask, or warping the subject on its own layer, exists to prevent."},{"slug":"scanning-a-print","title":"Getting the photograph off the paper","url":"https://addaly.com/learn/image-editing/scanning-a-print","api":"https://addaly.com/api/lesson/image-editing/scanning-a-print","minutes":9,"keyIdea":"Scan resolution is chosen from the intended output size with room for correction, moiré from a previously printed original is an interference pattern best removed by oversampling and downscaling, and infrared dust removal fails on silver black-and-white and Kodachrome because the image itself blocks infrared."},{"slug":"restoring-a-damaged-photograph","title":"Tears, mould and the cyan that faded first","url":"https://addaly.com/learn/image-editing/restoring-a-damaged-photograph","api":"https://addaly.com/api/lesson/image-editing/restoring-a-damaged-photograph","minutes":9,"keyIdea":"Restoration runs large damage to small, the pink cast on old colour prints is the cyan dye layer having faded and can be neutralised but not recovered, and anything reconstructed rather than derived from surviving evidence belongs in a written note delivered with the file."},{"slug":"what-cannot-be-repaired","title":"Four losses that no tool undoes","url":"https://addaly.com/learn/image-editing/what-cannot-be-repaired","api":"https://addaly.com/api/lesson/image-editing/what-cannot-be-repaired","minutes":9,"keyIdea":"Blur, defocus, clipping and compression are absences of information rather than faults in it, so every tool that appears to reverse them is generating plausible content, and a five-minute triage at 100 per cent zoom tells you on day one what a file can become."}]},{"slug":"compositing","title":"Compositing: making two pictures one","summary":"Putting an element from one photograph into another is easy; making the result believable is a craft with a short list of rules. This block works through the six mismatches that give a composite away, the geometry that tells you where a camera stood, how to relight a cut-out and build its shadow and reflection, sky replacement, blending several exposures of one scene, stitching and stacking frames, and the grain and focus matching that removes the last tell.","outcome":"Combine elements from different photographs into one image that survives inspection (matching perspective, scale, light direction and quality, edge softness, depth of field and grain) and merge multiple exposures, viewpoints or focus planes of one scene without halos, ghosting or parallax errors.","lessons":[{"slug":"why-composites-fail","title":"Six mismatches, and the eye finds them all","url":"https://addaly.com/learn/image-editing/why-composites-fail","api":"https://addaly.com/api/lesson/image-editing/why-composites-fail","minutes":8,"keyIdea":"Composites fail on six measurable mismatches (perspective, scale, light direction, light quality, edge softness and grain) and the fastest ways to find them are flipping the image, shrinking it and blurring it, because each reveals a different class of error."},{"slug":"perspective-scale-and-horizon","title":"The horizon tells you where the camera stood","url":"https://addaly.com/learn/image-editing/perspective-scale-and-horizon","api":"https://addaly.com/api/lesson/image-editing/perspective-scale-and-horizon","minutes":9,"keyIdea":"The horizon sits at camera height and crosses every figure standing on the same ground plane at the same point on their body, which fixes an element's scale exactly, and an object's depth is read from where it meets the ground rather than from how large it is."},{"slug":"matching-light-and-shadow","title":"Relighting a cut-out so it belongs","url":"https://addaly.com/learn/image-editing/matching-light-and-shadow","api":"https://addaly.com/api/lesson/image-editing/matching-light-and-shadow","minutes":9,"keyIdea":"Read direction, elevation, quality and the key-to-fill colour difference from the plate first, build the tight dark contact shadow before the directional cast shadow, and accept that shadows already baked into a hard-lit element cannot be relit from the opposite side."},{"slug":"building-shadows-and-reflections","title":"Constructing what the light would have done","url":"https://addaly.com/learn/image-editing/building-shadows-and-reflections","api":"https://addaly.com/api/lesson/image-editing/building-shadows-and-reflections","minutes":9,"keyIdea":"A convincing shadow is dark and tight at the contact and progressively softer and lighter further away, coloured rather than black, and shaped by the surface it falls on, and the easiest way to get one right is to extract the real shadow from the element's own original frame."},{"slug":"sky-replacement","title":"A new sky changes the light in the whole photograph","url":"https://addaly.com/learn/image-editing/sky-replacement","api":"https://addaly.com/api/lesson/image-editing/sky-replacement","minutes":8,"keyIdea":"A sky is the scene's light source, so replacing it means matching direction, hardness, exposure and colour spill in the foreground as well, and a plate where the old sky reflects in windows, water or paintwork cannot take a new one without replacing every reflection too."},{"slug":"exposure-blending-and-hdr","title":"Two exposures of one scene, and how not to make it look like HDR","url":"https://addaly.com/learn/image-editing/exposure-blending-and-hdr","api":"https://addaly.com/api/lesson/image-editing/exposure-blending-and-hdr","minutes":9,"keyIdea":"Exposure fusion picks the best-exposed pixels and needs no tone mapping, while HDR merge plus tone mapping flattens global contrast and restores it locally, which is exactly why halos and the characteristic grey look appear, and a hand-masked blend of two exposures beats both."},{"slug":"panoramas-and-stitching","title":"Many frames, one view, and the pivot point that matters","url":"https://addaly.com/learn/image-editing/panoramas-and-stitching","api":"https://addaly.com/api/lesson/image-editing/panoramas-and-stitching","minutes":9,"keyIdea":"Stitching solves for camera orientation from overlapping features, so it needs 30 to 40 per cent overlap and fails on parallax: rotating anywhere but the lens's entrance pupil makes near and far objects disagree between frames in a way no algorithm can reconcile."},{"slug":"focus-stacking","title":"When depth of field is not enough","url":"https://addaly.com/learn/image-editing/focus-stacking","api":"https://addaly.com/api/lesson/image-editing/focus-stacking","minutes":8,"keyIdea":"Focus stacking picks each pixel from the frame where local contrast is highest, so it needs frames whose sharp zones overlap and pixel-accurate alignment including the scale change from focus breathing; and it produces halos exactly where a sharp foreground edge meets a background sharp in a different frame."},{"slug":"matching-grain-noise-and-focus","title":"The last tell: texture and depth","url":"https://addaly.com/learn/image-editing/matching-grain-noise-and-focus","api":"https://addaly.com/api/lesson/image-editing/matching-grain-noise-and-focus","minutes":8,"keyIdea":"The last tells are surface ones (depth of field, grain, lens artefacts, compression and black point) and they are fixed by applying a single unified treatment across the whole flattened composite rather than correcting the pasted element on its own."}]},{"slug":"ai-inside-the-image-editor","title":"AI inside the image editor","summary":"Generative fill, upscaling, denoising and colourising are now buttons in ordinary editors, and every one of them produces content rather than recovering it. This block explains what the models are doing so their failures become predictable, shows how to run the free equivalents on a laptop with no graphics card, covers provenance and watermarking as they actually stand, and ends on the decision about when none of it should be used.","outcome":"Use generative fill, outpainting, upscaling, denoising and colourising deliberately (predicting each one's characteristic failures from its mechanism, running free local equivalents where confidentiality or cost requires it) and state for a given image whether generated content is permissible and what has to be disclosed.","lessons":[{"slug":"what-a-diffusion-model-does-to-your-photo","title":"Noise in, picture out: inpainting explained","url":"https://addaly.com/learn/image-editing/what-a-diffusion-model-does-to-your-photo","api":"https://addaly.com/api/lesson/image-editing/what-a-diffusion-model-does-to-your-photo","minutes":10,"keyIdea":"Generative fill initialises a masked region with noise and denoises it towards something consistent with the surrounding pixels and your prompt, which is why filled areas are cleaner than photographs, softer than the original file, and wrong wherever text or regular geometry is involved."},{"slug":"generative-fill-in-practice","title":"Getting a usable result in three attempts instead of thirty","url":"https://addaly.com/learn/image-editing/generative-fill-in-practice","api":"https://addaly.com/api/lesson/image-editing/generative-fill-in-practice","minutes":9,"keyIdea":"Leave the prompt empty when removing and describe the light and material when adding, generate three variations and composite the good parts onto a masked layer rather than accepting a whole result, and fix grain, geometry and black point afterwards."},{"slug":"generative-expand-and-outpainting","title":"Making a photograph bigger than it was taken","url":"https://addaly.com/learn/image-editing/generative-expand-and-outpainting","api":"https://addaly.com/api/lesson/image-editing/generative-expand-and-outpainting","minutes":8,"keyIdea":"Outpainting is inpainting with the mask outside the frame, so it works best in 20 to 30 per cent stages with generous overlap, and because viewers read extended content as part of the scene, it is the generative operation most in need of disclosure outside advertising and design."},{"slug":"ai-upscaling-choices","title":"Which upscaler, for which material","url":"https://addaly.com/learn/image-editing/ai-upscaling-choices","api":"https://addaly.com/api/lesson/image-editing/ai-upscaling-choices","minutes":9,"keyIdea":"Upscalers come in families with different tendencies to invent texture, they must be run after denoising and before sharpening, tiling seams are fixed with a larger overlap, and 2× is close to recovery while 8× is mostly the training data rather than your photograph."},{"slug":"ai-denoise-and-deblur","title":"Reconstruction sold as noise reduction","url":"https://addaly.com/learn/image-editing/ai-denoise-and-deblur","api":"https://addaly.com/api/lesson/image-editing/ai-denoise-and-deblur","minutes":9,"keyIdea":"Learned denoisers predict a clean image rather than smoothing a noisy one, which is why they work on raw data whose noise statistics are known, why they deliver two to three stops, and why fine repeated texture and small faces come back plausible rather than correct."},{"slug":"colourising-old-photographs","title":"A guess about what colour the dress was","url":"https://addaly.com/learn/image-editing/colourising-old-photographs","api":"https://addaly.com/api/lesson/image-editing/colourising-old-photographs","minutes":8,"keyIdea":"Colourisation predicts chrominance from luminance using statistical associations learned from modern photographs, so it is reliable on sky, foliage and skin and a hedge towards muddy averages on anything manufactured, and none of it is recovered, because the greyscale file holds no colour information at all."},{"slug":"running-these-models-free","title":"On your own machine, with no graphics card","url":"https://addaly.com/learn/image-editing/running-these-models-free","api":"https://addaly.com/api/lesson/image-editing/running-these-models-free","minutes":9,"keyIdea":"Background removal, upscaling and denoising run usefully on a laptop with no graphics card, inpainting runs slowly but workably, and running locally buys confidentiality, zero per-image cost and independence from a service, while Colab's free GPU is a real option that is not local."},{"slug":"provenance-watermarks-and-c2pa","title":"What can be proved about where an image came from","url":"https://addaly.com/learn/image-editing/provenance-watermarks-and-c2pa","api":"https://addaly.com/api/lesson/image-editing/provenance-watermarks-and-c2pa","minutes":8,"keyIdea":"C2PA signs a chain of edits rather than certifying truth, invisible watermarks live in the pixels but only for vendors that apply them, and AI-detection services are too unreliable to accuse or defend anyone with, so the strongest provenance a working editor has is the kept original plus a written delivery note."},{"slug":"when-not-to-use-any-of-it","title":"The decision, and the parts nobody has settled","url":"https://addaly.com/learn/image-editing/when-not-to-use-any-of-it","api":"https://addaly.com/api/lesson/image-editing/when-not-to-use-any-of-it","minutes":9,"keyIdea":"Ask whether the picture is a record or a construction, because that determines whether generated content is permissible, and treat the copyright status of model training as genuinely unresolved, documenting what you used rather than assuming an answer."}]},{"slug":"out-of-the-editor","title":"Out of the editor: size, sharpness and the delivered file","summary":"The edit is finished and nobody has seen it yet. Everything between the layered master and the file somebody opens is its own craft, and it is where careful work is most often thrown away: the resize that aliases a striped shirt into moiré, the sharpening tuned for a size the picture will never be seen at, the wide-gamut profile a platform strips on upload. This block takes the picture out: the arithmetic of how many pixels a destination needs, the resampling kernel doing the work, output sharpening, colour conversion, codecs newer than JPEG, motion, metadata, and what happens to your file after you press upload.","outcome":"Take a finished edit to a delivered file for any named destination: computing the pixel dimensions from the destination rather than the source, choosing a resampling filter and a colour space by mechanism, sharpening last and at output size, selecting the codec and quality by measurement rather than habit, and predicting what a platform's own re-encoding pipeline will do to the result.","lessons":[{"slug":"resampling-algorithms","title":"Nearest, bicubic, Lanczos: what the resize dialogue is computing","url":"https://addaly.com/learn/image-editing/resampling-algorithms","api":"https://addaly.com/api/lesson/image-editing/resampling-algorithms","minutes":10,"keyIdea":"A resize invents pixel values between the ones you have: point sampling aliases fine detail into moiré, Lanczos is sharp but rings at hard edges, and averaging gamma-encoded numbers rather than light makes downscaled bright detail on dark backgrounds come out roughly half as bright as it should be."},{"slug":"sizing-for-a-screen","title":"The width to export, and why the browser will not fix it for you","url":"https://addaly.com/learn/image-editing/sizing-for-a-screen","api":"https://addaly.com/api/lesson/image-editing/sizing-for-a-screen","minutes":9,"keyIdea":"Export width is the slot's CSS width times the device pixel ratio, capped at 2x for photographs; handing the browser a larger file costs the full bytes, is downscaled without gamma correction and throws away the sharpening you tuned for the output size."},{"slug":"sharpening-and-noise","title":"Sharpening adds no detail, and it goes last","url":"https://addaly.com/learn/image-editing/sharpening-and-noise","api":"https://addaly.com/api/lesson/image-editing/sharpening-and-noise","minutes":9,"keyIdea":"Sharpening only exaggerates edges that already exist, so do it after resizing, at the output size, and after noise reduction rather than before."},{"slug":"export-and-colour","title":"Why your image looks washed out on somebody else's phone","url":"https://addaly.com/learn/image-editing/export-and-colour","api":"https://addaly.com/api/lesson/image-editing/export-and-colour","minutes":10,"keyIdea":"Deliver sRGB by converting rather than assigning, choose the format by what is in the picture, and treat file size as part of the job."},{"slug":"choosing-quality-by-measurement","title":"Stop guessing the quality slider","url":"https://addaly.com/learn/image-editing/choosing-quality-by-measurement","api":"https://addaly.com/api/lesson/image-editing/choosing-quality-by-measurement","minutes":9,"keyIdea":"A fixed quality setting gives different visual results on different pictures because it scales a quantisation table rather than targeting an outcome, so pick settings by flipping between versions at 100 per cent, automate that judgement with a perceptual metric, and argue in byte budgets rather than slider numbers."},{"slug":"webp-avif-and-jpeg-xl","title":"The formats that replaced JPEG, and the one that might","url":"https://addaly.com/learn/image-editing/webp-avif-and-jpeg-xl","api":"https://addaly.com/api/lesson/image-editing/webp-avif-and-jpeg-xl","minutes":10,"keyIdea":"WebP and AVIF are smaller than JPEG because they use variable block sizes and intra prediction borrowed from video codecs, AVIF's characteristic failure is smoothing texture rather than blocking it, JPEG XL can losslessly shrink existing JPEGs but its browser support is genuinely unresolved, and quality numbers never transfer between encoders."},{"slug":"when-the-image-has-to-move","title":"GIF is a 1987 format and you are probably still exporting one","url":"https://addaly.com/learn/image-editing/when-the-image-has-to-move","api":"https://addaly.com/api/lesson/image-editing/when-the-image-has-to-move","minutes":9,"keyIdea":"GIF costs ten to twenty times what the same motion costs as video because it stores 256 dithered colours per frame with no motion compensation, so deliver MP4 or WebM with muted autoplay, or animated WebP where an image tag is required, and keep GIF only for platforms that accept nothing else."},{"slug":"metadata-that-should-survive","title":"The fields that say who made it, and which platforms keep them","url":"https://addaly.com/learn/image-editing/metadata-that-should-survive","api":"https://addaly.com/api/lesson/image-editing/metadata-that-should-survive","minutes":8,"keyIdea":"EXIF records the camera, IPTC records the picture's meaning and XMP is the container modern tools write, so fill Creator, Copyright, Credit and Description as an import preset; and treat embedded metadata as a record that most social re-encoding destroys rather than as any kind of protection."},{"slug":"serving-the-right-file","title":"One picture, six files, and letting the browser choose","url":"https://addaly.com/learn/image-editing/serving-the-right-file","api":"https://addaly.com/api/lesson/image-editing/serving-the-right-file","minutes":9,"keyIdea":"Ship several widths and formats and let the browser choose with srcset, sizes and picture (sizes being the attribute that actually prevents oversized downloads) then lazy-load everything except the hero, which needs high fetch priority because it is what the load-time metric is measuring."},{"slug":"what-the-platform-does-to-your-file","title":"Your file is re-encoded on upload, and you can plan for it","url":"https://addaly.com/learn/image-editing/what-the-platform-does-to-your-file","api":"https://addaly.com/api/lesson/image-editing/what-the-platform-does-to-your-file","minutes":9,"keyIdea":"Platforms resize, re-compress and strip the profile from every upload, so convert to sRGB, match the width they actually serve, sharpen slightly less than for final delivery, and give their encoder a high-quality input rather than one you already compressed."},{"slug":"the-whole-job","title":"One bottle, one window, twelve minutes","url":"https://addaly.com/learn/image-editing/the-whole-job","api":"https://addaly.com/api/lesson/image-editing/the-whole-job","minutes":12,"keyIdea":"The order is fixed (shoot, develop, straighten, mask, retouch, tone, then resize, sharpen, convert to sRGB and export) and the layered file is saved before any of it."}]}]},{"slug":"vector-and-print","title":"Vectors, Logos and Things That Get Printed","tagline":"Draw curves that hold at any size, then hand a press a file it will not send back.","description":"Vector drawing and the print pipeline, taught with the tools shops actually run. Bezier handles and why fewer anchor points make better curves, building marks from primitives and booleans, outlining type and why the printer asks, designing a logo that survives 16 pixels and one colour, moving files between CorelDRAW, Illustrator, Inkscape and Affinity, styles and master pages for long documents, and CMYK, bleed, overprint and PDF/X for the handover, plus vinyl, embroidery, laser and screen separations.","level":"beginner","track":"create","url":"https://addaly.com/learn/vector-and-print","lessons":73,"minutes":624,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/vector-and-print.pdf","pages":422,"bytes":5158283,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/vector-and-print.pdf","cover":"https://addaly.com/textbooks/look/vector-and-print/1.webp?v=2026-10-07-5158283"},"film":null,"modules":[{"slug":"what-a-vector-is","title":"The thing that is actually in the file","summary":"Before any drawing, the raw material. What a vector file stores, in what units, and how a renderer turns it back into something you can see. Path data read by hand, the coordinate system and the two different \"dots per inch\" that fight each other, strokes that are instructions rather than shapes, winding rules, clipping, and the places where vector artwork quietly becomes pixels without telling you.","outcome":"Read the geometry inside a vector file by hand, predict which operations are lossless and which silently rasterise, explain a size or line-weight discrepancy by naming the unit or rendering rule that caused it, and choose vector or raster for a job from its output device rather than from habit.","lessons":[{"slug":"pixels-cannot-be-enlarged","title":"Why your Photoshop logo cannot go on a hoarding","url":"https://addaly.com/learn/vector-and-print/pixels-cannot-be-enlarged","api":"https://addaly.com/api/lesson/vector-and-print/pixels-cannot-be-enlarged","minutes":9,"keyIdea":"A raster file records pixels at one fixed size; a vector file records geometry with no size at all, which is why only the second can be redrawn for a hoarding."},{"slug":"reading-path-data","title":"What the `d` attribute is saying","url":"https://addaly.com/learn/vector-and-print/reading-path-data","api":"https://addaly.com/api/lesson/vector-and-print/reading-path-data","minutes":10,"keyIdea":"An SVG is text you can read and edit, and the `d` attribute is a short list of pen instructions in document coordinates, which is why a 240-byte logo and a 1.9 MB logo can look identical on screen."},{"slug":"units-and-the-dpi-that-is-not-there","title":"Points, millimetres, and two different inches","url":"https://addaly.com/learn/vector-and-print/units-and-the-dpi-that-is-not-there","api":"https://addaly.com/api/lesson/vector-and-print/units-and-the-dpi-that-is-not-there","minutes":9,"keyIdea":"A vector file stores unitless numbers plus a rule for how many of them make an inch, and because PostScript says 72 and the web says 96, a file that does not state its units can open at the wrong size in perfectly working software."},{"slug":"a-path-has-no-thickness","title":"A path has no thickness","url":"https://addaly.com/learn/vector-and-print/a-path-has-no-thickness","api":"https://addaly.com/api/lesson/vector-and-print/a-path-has-no-thickness","minutes":9,"keyIdea":"A stroke is a render-time instruction, not an object, so its caps, joins, miter limit and scaling behaviour can change the printed shape, and a \"hairline\" means whatever the output device's thinnest line is, which on a platesetter is thin enough to disappear."},{"slug":"winding-rules-and-compound-paths","title":"Why the hole will not appear","url":"https://addaly.com/learn/vector-and-print/winding-rules-and-compound-paths","api":"https://addaly.com/api/lesson/vector-and-print/winding-rules-and-compound-paths","minutes":9,"keyIdea":"A shape with more than one loop needs a rule for what counts as inside: non-zero winding depends on the direction each subpath is drawn, even-odd only on how many crossings there are, and the same geometry prints differently under each."},{"slug":"clipping-hides-it-does-not-remove-it","title":"Clipping hides; it does not remove","url":"https://addaly.com/learn/vector-and-print/clipping-hides-it-does-not-remove-it","api":"https://addaly.com/api/lesson/vector-and-print/clipping-hides-it-does-not-remove-it","minutes":8,"keyIdea":"A clipping path hides geometry rather than deleting it, so hidden image data still bloats the file, still costs RIP time, and can still be recovered by anyone who opens the PDF."},{"slug":"where-vector-becomes-pixels","title":"Where vector quietly becomes pixels","url":"https://addaly.com/learn/vector-and-print/where-vector-becomes-pixels","api":"https://addaly.com/api/lesson/vector-and-print/where-vector-becomes-pixels","minutes":10,"keyIdea":"Shadows, blurs, meshes and blend modes are generated as pixels at a resolution the document sets (often 72 ppi by default) and anything transparent gets sliced into atomic regions when flattened, which is where the grey box and the hairline seam come from."},{"slug":"tracing-and-when-to-redraw","title":"What auto-trace is doing, and when to redraw instead","url":"https://addaly.com/learn/vector-and-print/tracing-and-when-to-redraw","api":"https://addaly.com/api/lesson/vector-and-print/tracing-and-when-to-redraw","minutes":9,"keyIdea":"Auto-trace thresholds, finds contours on a pixel staircase, guesses which steps are corners and fits curves within a tolerance, so wobbly straights, rounded corners and node explosions are all predictable consequences, and anything being enlarged or cut should be redrawn over the trace rather than shipped as one."}]},{"slug":"drawing-curves","title":"Drawing curves people will pay for","summary":"The manual craft. The four gestures of the pen tool, what makes a join kink, how booleans multiply nodes and how to clean up after them, offsets and the miter spike, transforms as arithmetic rather than dragging, and the grid and snapping setup that helps instead of fighting you. Ends with the workflow for redrawing something that exists only as a photograph.","outcome":"Draw, correct and combine any shape with the pen, node, boolean, offset and transform tools, name the node type, handle or continuity failure responsible when a curve goes lumpy, and rebuild an existing mark from a photograph or scan as exact geometry rather than as an approximation.","lessons":[{"slug":"fewer-points-better-curves","title":"Your curves are lumpy because you used too many points","url":"https://addaly.com/learn/vector-and-print/fewer-points-better-curves","api":"https://addaly.com/api/lesson/vector-and-print/fewer-points-better-curves","minutes":10,"keyIdea":"Put anchor points only at a curve's extremes (top, bottom, left, right) and fix problems by adjusting handle length, never by adding another point."},{"slug":"build-marks-from-shapes","title":"Most good logos are circles and rectangles cut into each other","url":"https://addaly.com/learn/vector-and-print/build-marks-from-shapes","api":"https://addaly.com/api/lesson/vector-and-print/build-marks-from-shapes","minutes":9,"keyIdea":"Assemble marks from exact primitives and cut them with booleans, duplicate before every boolean because it is destructive, and remember a hole that fills solid is a fill-rule problem, not a stacking one."},{"slug":"the-pen-tool-in-four-moves","title":"The pen tool is four gestures","url":"https://addaly.com/learn/vector-and-print/the-pen-tool-in-four-moves","api":"https://addaly.com/api/lesson/vector-and-print/the-pen-tool-in-four-moves","minutes":8,"keyIdea":"The pen tool has exactly four gestures (click, click-drag, Alt-drag to break the handle pair, and click-to-close) and the one that goes wrong is dragging towards the bend instead of along the direction of travel."},{"slug":"continuity-and-the-kink","title":"The kink you can see but cannot find","url":"https://addaly.com/learn/vector-and-print/continuity-and-the-kink","api":"https://addaly.com/api/lesson/vector-and-print/continuity-and-the-kink","minutes":9,"keyIdea":"Vector editors enforce matching tangents but never matching curvature, so a join can be perfectly \"smooth\" and still show a visible crease: usually caused by mismatched handle lengths, a curve meeting a straight, or an anchor that is not quite at the extreme."},{"slug":"boolean-aftermath","title":"Booleans, and the mess they leave behind","url":"https://addaly.com/learn/vector-and-print/boolean-aftermath","api":"https://addaly.com/api/lesson/vector-and-print/boolean-aftermath","minutes":9,"keyIdea":"A boolean splits paths at every intersection and restitches the survivors, so it adds nodes, hands the result a fill you did not choose, and destroys the inputs: clean up immediately, set colour afterwards, and keep a locked copy of the sources."},{"slug":"offsets-and-the-miter-spike","title":"Offsets, and the spike that appears at a sharp corner","url":"https://addaly.com/learn/vector-and-print/offsets-and-the-miter-spike","api":"https://addaly.com/api/lesson/vector-and-print/offsets-and-the-miter-spike","minutes":8,"keyIdea":"An offset runs parallel to the original, so a mitred corner at angle θ lands at `offset ÷ sin(θ/2)` from the point (5 mm becomes 29 mm at a 20° tip) which is why join style and miter limit exist and why round joins are the safe default."},{"slug":"transforms-as-arithmetic","title":"Transforms are arithmetic, so type the numbers","url":"https://addaly.com/learn/vector-and-print/transforms-as-arithmetic","api":"https://addaly.com/api/lesson/vector-and-print/transforms-as-arithmetic","minutes":8,"keyIdea":"Every transform is a matrix multiply about an origin you can move, so type the numbers rather than dragging: rotate once by the total instead of repeatedly, and know whether you want the group transformed or each object transformed about its own centre."},{"slug":"grids-guides-and-snapping","title":"Grids and snapping that help instead of fighting","url":"https://addaly.com/learn/vector-and-print/grids-guides-and-snapping","api":"https://addaly.com/api/lesson/vector-and-print/grids-guides-and-snapping","minutes":8,"keyIdea":"Snapping fights you because it is set to every target at once (keep node-to-node and grid, kill bounding-box snapping because a bounding box includes stroke width) and set the grid from the job's real module rather than from the software default."},{"slug":"redrawing-from-a-photograph","title":"Rebuilding a mark that only exists as a photograph","url":"https://addaly.com/learn/vector-and-print/redrawing-from-a-photograph","api":"https://addaly.com/api/lesson/vector-and-print/redrawing-from-a-photograph","minutes":9,"keyIdea":"Reconstructing a logo from a photograph is measurement, not tracing: correct the perspective, lock a dimmed template, identify the typeface and the underlying primitives, redraw with shape tools, then verify with an overlay, a flip and a 16-pixel test."}]},{"slug":"type-as-shape","title":"Type, which is also vector","summary":"Letters are paths in somebody else's file, delivered under a licence, shaped by an engine you did not write. What is inside a font, what your licence actually permits, how to kern a wordmark by hand, how to set a paragraph that reads, how type behaves on a curve, why Devanagari and other complex scripts break in ways Latin never does, and what a variable font does to a press.","outcome":"Set, space and convert type in a vector file without breaking it: choose a typeface you are licensed to use for the job in hand, correct spacing at the pair and the paragraph level, handle a complex script correctly, and decide per job whether to outline, embed or subset, stating the consequence of each to the printer.","lessons":[{"slug":"outline-the-fonts","title":"Why the printer asked you to outline the fonts","url":"https://addaly.com/learn/vector-and-print/outline-the-fonts","api":"https://addaly.com/api/lesson/vector-and-print/outline-the-fonts","minutes":9,"keyIdea":"Outline text so a missing font cannot reflow your layout, but keep an editable master and embed rather than outline for body text, because thousands of glyph paths choke a RIP."},{"slug":"what-is-inside-a-font-file","title":"What is actually inside a font file","url":"https://addaly.com/learn/vector-and-print/what-is-inside-a-font-file","api":"https://addaly.com/api/lesson/vector-and-print/what-is-inside-a-font-file","minutes":9,"keyIdea":"A font is a set of tables (outlines, a character map, widths, kerning, substitutions and a permission bit) and `pdffonts` plus `fonttools` will tell you in seconds what a font menu never will."},{"slug":"licensing-a-typeface","title":"The licence, which is the part that bites","url":"https://addaly.com/learn/vector-and-print/licensing-a-typeface","api":"https://addaly.com/api/lesson/vector-and-print/licensing-a-typeface","minutes":9,"keyIdea":"Desktop, web, app and broadcast are licensed separately; \"free for personal use\" excludes client work; outlining is not a licensing workaround; and sending a printer the font file is distributing software, which is a different permission from using it."},{"slug":"kerning-a-wordmark","title":"Kerning a wordmark by hand","url":"https://addaly.com/learn/vector-and-print/kerning-a-wordmark","api":"https://addaly.com/api/lesson/vector-and-print/kerning-a-wordmark","minutes":9,"keyIdea":"Kern by equalising the white *area* between letters, judged three letters at a time and confirmed by blurring; and kern a reversed wordmark separately, because light on dark closes the counters and reads tighter."},{"slug":"paragraphs-measure-and-rag","title":"Setting a paragraph somebody can read","url":"https://addaly.com/learn/vector-and-print/paragraphs-measure-and-rag","api":"https://addaly.com/api/lesson/vector-and-print/paragraphs-measure-and-rag","minutes":9,"keyIdea":"Size, leading and measure carry most of readability (45 to 75 characters a line, leading at 120 to 145%) and justified text needs a long measure plus controlled H&J values or it develops rivers."},{"slug":"type-on-a-path","title":"Type on a curve, and why it splays","url":"https://addaly.com/learn/vector-and-print/type-on-a-path","api":"https://addaly.com/api/lesson/vector-and-print/type-on-a-path","minutes":8,"keyIdea":"Type on a path is positioned by arc length along the baseline while the glyph is rigid, so letters splay on the outside of a curve and crowd on the inside: fixed by a larger radius, more tracking, and a second reversed circle for the bottom of a badge."},{"slug":"complex-scripts","title":"Devanagari, Arabic, and the scripts that break","url":"https://addaly.com/learn/vector-and-print/complex-scripts","api":"https://addaly.com/api/lesson/vector-and-print/complex-scripts","minutes":10,"keyIdea":"Complex scripts need a shaping engine that forms conjuncts and reorders matras, so the same text can be correct on screen and wrong in the PDF: test with a real string of hard cases, have a native reader check it before outlining, and never use legacy non-Unicode fonts."},{"slug":"figures-dashes-and-missing-glyphs","title":"Figures, dashes and the characters nobody checks","url":"https://addaly.com/learn/vector-and-print/figures-dashes-and-missing-glyphs","api":"https://addaly.com/api/lesson/vector-and-print/figures-dashes-and-missing-glyphs","minutes":8,"keyIdea":"Quotes, the three dashes, tabular versus proportional figures, the rupee sign's patchy coverage and silent font substitution are the details that separate set type from typed text, and each has a specific check you can run in seconds."},{"slug":"variable-fonts-in-print","title":"Variable fonts, and what a press does with one","url":"https://addaly.com/learn/vector-and-print/variable-fonts-in-print","api":"https://addaly.com/api/lesson/vector-and-print/variable-fonts-in-print","minutes":8,"keyIdea":"A variable font is instanced, frozen at your axis values and embedded as an ordinary static font, before it reaches a press, so it is safe for print if you verify the export, and its `wdth` axis is the only legitimate way to condense a headline."}]},{"slug":"colour-for-print","title":"Colour that survives the press","summary":"Why a screen and a sheet of paper disagree, and what to do about it. Device-independent colour and Delta E, ICC profiles and the difference between assigning and converting, gamut and rendering intents, halftone screening and dot gain, spot inks and the economics of a plate, designing in one and two colours, trapping, and how to proof without a budget.","outcome":"Specify a colour so the sheet that comes off the press matches what was agreed: choose between process, spot and duotone, read a gamut warning and pick a rendering intent, allow for dot gain and trapping, and state which of screen, proof and press you are trusting and why.","lessons":[{"slug":"two-ways-of-making-colour","title":"Two different physical processes","url":"https://addaly.com/learn/vector-and-print/two-ways-of-making-colour","api":"https://addaly.com/api/lesson/vector-and-print/two-ways-of-making-colour","minutes":8,"keyIdea":"Screens add emitted light and paper subtracts reflected light, so white is the paper and black is limited by it; and because two different spectra can match under one illuminant and differ under another, print is judged under a standard D50 light rather than under whatever bulb is overhead."},{"slug":"device-independent-colour","title":"Lab, Delta E, and what \"close enough\" means","url":"https://addaly.com/learn/vector-and-print/device-independent-colour","api":"https://addaly.com/api/lesson/vector-and-print/device-independent-colour","minutes":8,"keyIdea":"Lab describes colour by measurement rather than by device, Delta E measures the distance between two colours in it, and a specification that names a ΔE figure and a formula is something a printer can act on where \"match it exactly\" is not."},{"slug":"icc-profiles-assign-or-convert","title":"Profiles, and the dialog that decides everything","url":"https://addaly.com/learn/vector-and-print/icc-profiles-assign-or-convert","api":"https://addaly.com/api/lesson/vector-and-print/icc-profiles-assign-or-convert","minutes":9,"keyIdea":"Assign changes what the existing numbers mean; convert changes the numbers to preserve the appearance, and a CMYK conversion is only as correct as the press profile you converted to, which is a question for your printer rather than a default."},{"slug":"gamut-and-rendering-intents","title":"What happens to a colour the press cannot print","url":"https://addaly.com/learn/vector-and-print/gamut-and-rendering-intents","api":"https://addaly.com/api/lesson/vector-and-print/gamut-and-rendering-intents","minutes":8,"keyIdea":"Perceptual compresses the whole gamut smoothly and suits photographs; relative colorimetric with black point compensation keeps in-gamut colours exact and clips the rest, which is what artwork and brand colours need."},{"slug":"halftones-and-dot-gain","title":"Why your 20% tint printed at 30%","url":"https://addaly.com/learn/vector-and-print/halftones-and-dot-gain","api":"https://addaly.com/api/lesson/vector-and-print/halftones-and-dot-gain","minutes":9,"keyIdea":"Tone is made of dots, and a dot grows when it hits paper (around 15% on coated and 25% on uncoated at the midtone) which the press profile already corrects for, so the failures come from converting with the wrong profile or from relying on very light tints and small reversed type."},{"slug":"spot-colours-and-plates","title":"A spot colour is a plate, and a plate is money","url":"https://addaly.com/learn/vector-and-print/spot-colours-and-plates","api":"https://addaly.com/api/lesson/vector-and-print/spot-colours-and-plates","minutes":9,"keyIdea":"A spot colour is a physically mixed ink on its own plate, which buys consistency, out-of-gamut reach and economy on low colour counts at the cost of a plate, and a spot must be defined as a spot swatch and then verified in the separations, because a spot that exports as process is a silent failure."},{"slug":"one-and-two-colour-work","title":"Getting a whole design out of two inks","url":"https://addaly.com/learn/vector-and-print/one-and-two-colour-work","api":"https://addaly.com/api/lesson/vector-and-print/one-and-two-colour-work","minutes":8,"keyIdea":"One plate gives five usable values including the reversed paper, and two inks give tints of each plus overprints, which is enough range for real work, provided the colour count is decided before the design is drawn rather than after."},{"slug":"trapping-chokes-and-spreads","title":"Trapping, and the white line around everything","url":"https://addaly.com/learn/vector-and-print/trapping-chokes-and-spreads","api":"https://addaly.com/api/lesson/vector-and-print/trapping-chokes-and-spreads","minutes":8,"keyIdea":"Registration drifts by a tenth of a millimetre or so, exposing white slivers where two knocked-out colours meet, so the lighter colour is spread into the darker by around 0.1 mm, usually by the printer's RIP rather than by you, while 100% black text overprints and white must never overprint."},{"slug":"proofing-on-a-budget","title":"Proofing when you cannot afford a proofing system","url":"https://addaly.com/learn/vector-and-print/proofing-on-a-budget","api":"https://addaly.com/api/lesson/vector-and-print/proofing-on-a-budget","minutes":8,"keyIdea":"A soft proof shows which colours are unreachable, a calibrated digital proof predicts the sheet, and the first good sheet off the press is the only thing that shows the real ink on the real paper, so approve under a known light, against a physical reference, and keep the signed artefact."}]},{"slug":"designing-a-mark","title":"Designing a mark","summary":"The whole job of a logo, from the questions you ask before drawing to the folder you hand over. Mark types and what each costs to draw and to defend, sketching and narrowing, real construction versus the golden-ratio story, lockups and clear space, hostile backgrounds, the law around naming and ownership stated honestly, presenting work, and the delivery pack that stops the client's next supplier redrawing it in Word.","outcome":"Take a logo from brief to delivered asset pack: interrogate the brief against the surfaces it will appear on, choose and draw a mark that holds in one colour at 16 pixels and on a hostile background, define its lockups and clear space, and hand over files plus a usage sheet a stranger can work from.","lessons":[{"slug":"logo-at-sixteen-pixels","title":"If it does not work in black at 16 pixels, it is not a logo","url":"https://addaly.com/learn/vector-and-print/logo-at-sixteen-pixels","api":"https://addaly.com/api/lesson/vector-and-print/logo-at-sixteen-pixels","minutes":10,"keyIdea":"Design the mark in flat black at small size first, because embroidery, stamps, vinyl and one-colour print cannot reproduce anything else, and the colour version can be added afterwards."},{"slug":"the-brief-before-the-pencil","title":"The questions to ask before you draw anything","url":"https://addaly.com/learn/vector-and-print/the-brief-before-the-pencil","api":"https://addaly.com/api/lesson/vector-and-print/the-brief-before-the-pencil","minutes":8,"keyIdea":"The surfaces list (every specific place the mark will appear) decides more of a logo's design than any adjective the client uses, so collect it first, convert vague directions into choices between real examples, and send a one-page written brief back for confirmation."},{"slug":"the-five-kinds-of-mark","title":"Five kinds of mark, and what each one costs","url":"https://addaly.com/learn/vector-and-print/the-five-kinds-of-mark","api":"https://addaly.com/api/lesson/vector-and-print/the-five-kinds-of-mark","minutes":8,"keyIdea":"Wordmarks read immediately and fail small, monograms work small and are hard to make distinctive, pictorial marks cross languages and cost iterations, abstract marks are ownable but carry no meaning until somebody pays to build it, and a combination mark is the honest default for most small clients."},{"slug":"sketching-and-narrowing","title":"Thumbnails, and why you never show a concept you would not ship","url":"https://addaly.com/learn/vector-and-print/sketching-and-narrowing","api":"https://addaly.com/api/lesson/vector-and-print/sketching-and-narrowing","minutes":8,"keyIdea":"Generate thirty thumbnails at 30 mm on paper before opening any software, develop six into real geometry, and present exactly three you would all be happy to ship, with rationale about function rather than story, because a functional reason cannot be argued with."},{"slug":"construction-and-the-golden-ratio","title":"Real construction, and the golden-ratio story","url":"https://addaly.com/learn/vector-and-print/construction-and-the-golden-ratio","api":"https://addaly.com/api/lesson/vector-and-print/construction-and-the-golden-ratio","minutes":8,"keyIdea":"Real construction means one stroke unit, shared radii, aligned terminals and a grid of multiples, corrected optically by eye — and the golden-ratio circles laid over famous logos are almost always retrofitted decoration rather than how those marks were drawn."},{"slug":"lockups-clear-space-minimum-size","title":"Lockups, clear space and the smallest it may ever be","url":"https://addaly.com/learn/vector-and-print/lockups-clear-space-minimum-size","api":"https://addaly.com/api/lesson/vector-and-print/lockups-clear-space-minimum-size","minutes":8,"keyIdea":"Define separate lockups rather than letting somebody scale one to fit, express internal spacing and clear space as multiples of an internal measure so they stay true at any size, and arrive at minimum sizes empirically by printing on the worst printer available."},{"slug":"hostile-backgrounds","title":"Reversed, on a photograph, and in one thread","url":"https://addaly.com/learn/vector-and-print/hostile-backgrounds","api":"https://addaly.com/api/lesson/vector-and-print/hostile-backgrounds","minutes":8,"keyIdea":"A knockout is transparent geometry rather than an inverted image, and a reversed mark may need its counters opened because light on dark closes them optically and ink closes them physically; so deliver designed versions for dark, photographic, single-thread and colourless surfaces rather than leaving them to be improvised."},{"slug":"naming-trademarks-ownership","title":"Names, trademarks and who owns the file","url":"https://addaly.com/learn/vector-and-print/naming-trademarks-ownership","api":"https://addaly.com/api/lesson/vector-and-print/naming-trademarks-ownership","minutes":9,"keyIdea":"Copyright protects the drawing and a trademark protects the sign used in trade; ownership of commissioned artwork varies by country and must be settled in writing; and nobody can promise an enforceable copyright in generated output, so the client's real protection is registration and use."},{"slug":"the-delivery-pack","title":"The folder you hand over","url":"https://addaly.com/learn/vector-and-print/the-delivery-pack","api":"https://addaly.com/api/lesson/vector-and-print/the-delivery-pack","minutes":8,"keyIdea":"Hand over a numbered folder with print, screen, source and usage material plus a plain-text README that tells a printer, a developer and an embroiderer which file each of them needs, and include a Lab value, because it is the only colour notation that means the same thing at two different suppliers."}]},{"slug":"layout-that-scales","title":"Documents that survive a late change","summary":"Multi-page work, where the difference between a tool and a toy is what happens when the client changes their mind on page 60. Choosing a layout application honestly, deriving a grid from the type rather than a template, masters and sections, threaded text and overset, linked images and effective resolution, tables that behave like tables, automatic contents and cross-references, data merge for five hundred cards, and how a book is actually bound.","outcome":"Build a multi-page document that survives a late change (masters, a style family, a grid derived from the body text, linked images at verified effective resolution, an automatic contents list and a data merge) and specify a bound job with the right page count, spine width and gutter allowance.","lessons":[{"slug":"styles-are-the-whole-point","title":"Eighty pages, one font change, six hours of your life","url":"https://addaly.com/learn/vector-and-print/styles-are-the-whole-point","api":"https://addaly.com/api/lesson/vector-and-print/styles-are-the-whole-point","minutes":9,"keyIdea":"Styles exist so a change is made once in a named place rather than eighty times by hand, and a style that does not update is almost always carrying a local override."},{"slug":"choosing-a-layout-tool","title":"Choosing a layout tool, honestly","url":"https://addaly.com/learn/vector-and-print/choosing-a-layout-tool","api":"https://addaly.com/api/lesson/vector-and-print/choosing-a-layout-tool","minutes":8,"keyIdea":"Choose the layout tool from the document's requirements (press colour and bleed, structural features like contents and cross-references, and budget) and accept that Scribus is a genuine free answer for press work rather than a consolation prize."},{"slug":"page-geometry-and-the-grid","title":"Deriving a grid from the type, not from a template","url":"https://addaly.com/learn/vector-and-print/page-geometry-and-the-grid","api":"https://addaly.com/api/lesson/vector-and-print/page-geometry-and-the-grid","minutes":8,"keyIdea":"Derive the grid from the body text (size and leading first, then a measure of 45 to 75 characters, then columns, and the margins are what remains) and add the binding's gutter allowance to the inner margin before anything else is placed."},{"slug":"master-pages-and-sections","title":"Masters, running heads and why folios drift","url":"https://addaly.com/learn/vector-and-print/master-pages-and-sections","api":"https://addaly.com/api/lesson/vector-and-print/master-pages-and-sections","minutes":8,"keyIdea":"Put all repeating furniture on masters, number pages with a marker rather than by typing, use sections for front matter, and when a folio drifts the cause is almost always a local override on that page rather than a problem with the master."},{"slug":"threaded-text-and-overset","title":"Threaded text, overset, and copy that does not fit","url":"https://addaly.com/learn/vector-and-print/threaded-text-and-overset","api":"https://addaly.com/api/lesson/vector-and-print/threaded-text-and-overset","minutes":8,"keyIdea":"Threaded frames let text reflow through a document, and overset text is the silent failure that hides surplus copy where no proof will show it; so check the preflight for overset before every export, and fit copy by editing it or by changing a style rather than by distorting type."},{"slug":"linked-images-and-effective-ppi","title":"Linked images, and the number that actually matters","url":"https://addaly.com/learn/vector-and-print/linked-images-and-effective-ppi","api":"https://addaly.com/api/lesson/vector-and-print/linked-images-and-effective-ppi","minutes":8,"keyIdea":"Effective PPI (native pixels divided by the placed physical size) is the only resolution figure that means anything, a stored dpi tag is just a note about intended size, and packaging exists because a linked file that was not sent is the commonest reason a job cannot be opened."},{"slug":"tables-that-are-tables","title":"Tables, and why tabs are not one","url":"https://addaly.com/learn/vector-and-print/tables-that-are-tables","api":"https://addaly.com/api/lesson/vector-and-print/tables-that-are-tables","minutes":8,"keyIdea":"A real table object supports repeating headers, cell styles, alternating fills and central restyling where tabbed text supports none of them; and a table is made readable by removing rules and adding space rather than by boxing every cell."},{"slug":"contents-and-cross-references","title":"Contents lists and cross-references that renumber themselves","url":"https://addaly.com/learn/vector-and-print/contents-and-cross-references","api":"https://addaly.com/api/lesson/vector-and-print/contents-and-cross-references","minutes":8,"keyIdea":"Generated contents lists, cross-references, numbered captions and running heads all derive from paragraph styles and update when pages move, so anything that refers to a position in the document should be generated rather than typed, including the leader dots."},{"slug":"data-merge-and-variable-data","title":"Five hundred different cards from one template","url":"https://addaly.com/learn/vector-and-print/data-merge-and-variable-data","api":"https://addaly.com/api/lesson/vector-and-print/data-merge-and-variable-data","minutes":9,"keyIdea":"Variable data printing is a template plus a clean UTF-8 CSV, and nearly every failure is a data problem, so design to the longest record, generate QR and barcode images beforehand as a merged image field, and proof by sampling six deliberately chosen records rather than skimming all of them."},{"slug":"books-signatures-and-binding","title":"Page counts, creep and the spine","url":"https://addaly.com/learn/vector-and-print/books-signatures-and-binding","api":"https://addaly.com/api/lesson/vector-and-print/books-signatures-and-binding","minutes":8,"keyIdea":"Folded work comes in multiples of four and often of sixteen, creep pushes the inner pages of a thick saddle-stitched booklet outward by several millimetres, and a perfect-bound cover cannot be laid out until the printer gives you the spine width measured on the actual stock."}]},{"slug":"the-handover","title":"The handover","summary":"Everything between \"the design is finished\" and \"the job is on press\". What a RIP does with your file, which PDF/X flavour forbids what, the five rectangles inside a PDF, how to preflight your own export with free command-line tools, how to read separations, what to ask about paper and finishing, and how to run a proof approval so that a dispute has an answer.","outcome":"Export a file a press will run without a phone call (bleed and boxes correct, the right PDF/X flavour, fonts and images accounted for) and verify every one of those claims from the exported PDF itself using free tools, then specify the stock and finishing and record the approval.","lessons":[{"slug":"cmyk-bleed-and-pdfx","title":"The blue you chose on screen cannot be printed","url":"https://addaly.com/learn/vector-and-print/cmyk-bleed-and-pdfx","api":"https://addaly.com/api/lesson/vector-and-print/cmyk-bleed-and-pdfx","minutes":12,"keyIdea":"Choose colours from a printed chart rather than a screen, keep small black text at 100K only, and run overprint preview before every export because a white object set to overprint vanishes entirely."},{"slug":"what-a-rip-does","title":"What a RIP actually does with your file","url":"https://addaly.com/learn/vector-and-print/what-a-rip-does","api":"https://addaly.com/api/lesson/vector-and-print/what-a-rip-does","minutes":8,"keyIdea":"A RIP interprets, flattens, colour-converts and screens, and each stage has its own characteristic failure, so a job that times out is almost always node explosion, nested transparency, oversized clipped images or too many clipping paths, and none of it is visible in a screen view of the PDF."},{"slug":"pdf-x-flavours","title":"PDF/X, and what each flavour forbids","url":"https://addaly.com/learn/vector-and-print/pdf-x-flavours","api":"https://addaly.com/api/lesson/vector-and-print/pdf-x-flavours","minutes":8,"keyIdea":"Every PDF/X flavour embeds fonts, defines a TrimBox and names an output intent, and they differ in what they allow: X-1a forbids RGB and flattens transparency, X-4 keeps transparency live for the RIP to flatten once at device resolution."},{"slug":"the-five-pdf-boxes","title":"The five rectangles inside a PDF","url":"https://addaly.com/learn/vector-and-print/the-five-pdf-boxes","api":"https://addaly.com/api/lesson/vector-and-print/the-five-pdf-boxes","minutes":8,"keyIdea":"The press cuts from the TrimBox, so set the document page size to trim and bleed in the document setup rather than exporting a page at trim-plus-bleed, and verify with `pdfinfo -box`, which is arithmetic anybody can check in ten seconds."},{"slug":"preflight-your-own-pdf","title":"Preflighting your own PDF, free","url":"https://addaly.com/learn/vector-and-print/preflight-your-own-pdf","api":"https://addaly.com/api/lesson/vector-and-print/preflight-your-own-pdf","minutes":9,"keyIdea":"Run seven checks against the exported PDF rather than the design file (boxes, fonts, image ppi, ink coverage, separations, overprint simulation and structure) all of which poppler-utils and Ghostscript do for nothing, and none of which will catch a misspelled name."},{"slug":"reading-separations","title":"Reading separations, and the fifth plate you did not order","url":"https://addaly.com/learn/vector-and-print/reading-separations","api":"https://addaly.com/api/lesson/vector-and-print/reading-separations","minutes":8,"keyIdea":"Separations answer questions a composite cannot: whether your black text is really 100% K, whether a spot survived as a spot, whether there is an unordered fifth plate, and whether total ink exceeds what the press can dry."},{"slug":"paper-and-finishing","title":"Paper, and everything done after printing","url":"https://addaly.com/learn/vector-and-print/paper-and-finishing","api":"https://addaly.com/api/lesson/vector-and-print/paper-and-finishing","minutes":8,"keyIdea":"Weight is not thickness, coated and uncoated differ in gamut and dot gain by a wide margin, grain direction decides whether a fold cracks, and every finishing process (varnish, foil, emboss, die-cut) is supplied the same way: its own layer, a named spot swatch, set to overprint."},{"slug":"proofs-and-approvals","title":"Approvals, and who pays for the reprint","url":"https://addaly.com/learn/vector-and-print/proofs-and-approvals","api":"https://addaly.com/api/lesson/vector-and-print/proofs-and-approvals","minutes":8,"keyIdea":"Keep four artefacts on every job (the exact PDF with a checksum, the message that sent it, the signed proof and the preflight output) because a reprint dispute is only answerable by whichever party can show what was actually supplied and approved."},{"slug":"cdr-is-not-portable","title":"CDR is the most common file in Indian print and the least portable","url":"https://addaly.com/learn/vector-and-print/cdr-is-not-portable","api":"https://addaly.com/api/lesson/vector-and-print/cdr-is-not-portable","minutes":9,"keyIdea":"Keep your working file native, send a press-ready PDF by default, and ask the shop which software, version and PDF/X standard they want before you start rather than after you finish."},{"slug":"sending-the-job","title":"The covering note, and the file a shop can open","url":"https://addaly.com/learn/vector-and-print/sending-the-job","api":"https://addaly.com/api/lesson/vector-and-print/sending-the-job","minutes":8,"keyIdea":"A nine-line covering note in ordinary words answers everything a shop would otherwise email about and doubles as your record of the specification. And the final look is run on the exported PDF as though a stranger had sent it."}]},{"slug":"machines-that-make-things","title":"Machines that cut, stitch and burn","summary":"The paid work almost nobody teaches. Preparing a file for a physical machine rather than for a sheet of paper: vinyl plotters and weeding, print-and-cut registration, embroidery stitch files, laser kerf and material safety, CNC tool radius, screen-printing separations and underbase, the newer garment processes, and large-format signage at real viewing distances.","outcome":"Prepare a vector file for a plotter, needle, laser, router, screen or large-format printer: stating the minimum feature the material can hold, the kerf, pull or choke the process introduces, and the file format, layer convention and spot-colour name the operator's software expects.","lessons":[{"slug":"paths-that-cut-and-stitch","title":"The paid vector work is mostly machines, not posters","url":"https://addaly.com/learn/vector-and-print/paths-that-cut-and-stitch","api":"https://addaly.com/api/lesson/vector-and-print/paths-that-cut-and-stitch","minutes":10,"keyIdea":"For any machine (plotter, needle, laser, screen) the file must describe a physical action, which means closed paths, outlined strokes, welded overlaps and a minimum feature size the material can actually hold."},{"slug":"vinyl-cutting-end-to-end","title":"A vinyl job from file to wall","url":"https://addaly.com/learn/vector-and-print/vinyl-cutting-end-to-end","api":"https://addaly.com/api/lesson/vector-and-print/vinyl-cutting-end-to-end","minutes":8,"keyIdea":"A plotter cuts outlines, so text must be curves, strokes must be outlined and overlaps welded, and the real constraint is weeding, which sets a minimum feature of about 2 mm and makes every counter a separate piece held only by the transfer tape."},{"slug":"print-and-cut-registration","title":"Print and cut, and the marks the machine looks for","url":"https://addaly.com/learn/vector-and-print/print-and-cut-registration","api":"https://addaly.com/api/lesson/vector-and-print/print-and-cut-registration","minutes":8,"keyIdea":"Print-and-cut aligns the two machines with optical registration marks the RIP places, and the cut line travels as an outline on a named spot colour such as `CutContour`, set to overprint so it is passed to the cutter rather than printed."},{"slug":"embroidery-digitising","title":"Embroidery, which does not use vectors at all","url":"https://addaly.com/learn/vector-and-print/embroidery-digitising","api":"https://addaly.com/api/lesson/vector-and-print/embroidery-digitising","minutes":9,"keyIdea":"Embroidery reads a stitch file, not vectors, so a digitiser must choose stitch type, direction, density and underlay, and pull compensation means a shape comes out narrower across the stitch direction and longer along it unless the artwork is deliberately widened."},{"slug":"laser-cutting-and-engraving","title":"Laser cutting, kerf, and the material you must never use","url":"https://addaly.com/learn/vector-and-print/laser-cutting-and-engraving","api":"https://addaly.com/api/lesson/vector-and-print/laser-cutting-and-engraving","minutes":8,"keyIdea":"A laser distinguishes cut from engrave by stroke and colour on named layers, removes a kerf of 0.1 to 0.3 mm that must be measured on the real material before parts will fit, and must never be used on PVC or any other chlorine-bearing plastic."},{"slug":"cnc-and-built-up-letters","title":"CNC routing, tool radius, and the letters on a shop board","url":"https://addaly.com/learn/vector-and-print/cnc-and-built-up-letters","api":"https://addaly.com/api/lesson/vector-and-print/cnc-and-built-up-letters","minutes":8,"keyIdea":"A router bit of finite diameter cannot cut an internal corner sharper than its own radius, so ask the bit diameter before drawing and add dog-bone fillets where a square corner is needed. And built-up or channel letters impose a minimum stroke width and make every counter a separate piece."},{"slug":"screen-print-separations","title":"Screen printing, separations and the underbase","url":"https://addaly.com/learn/vector-and-print/screen-print-separations","api":"https://addaly.com/api/lesson/vector-and-print/screen-print-separations","minutes":9,"keyIdea":"Screen printing is one screen per colour, so build in flat colours on named layers, and on dark fabric add a white underbase choked inwards by 0.3 to 0.5 mm, with traps around 0.5 mm because manual carousel registration is measured in millimetres, not tenths."},{"slug":"garment-printing-processes","title":"DTF, DTG, sublimation and heat transfer","url":"https://addaly.com/learn/vector-and-print/garment-printing-processes","api":"https://addaly.com/api/lesson/vector-and-print/garment-printing-processes","minutes":8,"keyIdea":"DTG is cotton-only with a machine-printed underbase, DTF works on almost anything but sits on the surface and needs clean hard-edged transparency, sublimation bonds into polyester and cannot print white or work on dark, and HTV is cut mirrored in flat colours."},{"slug":"large-format-and-distance","title":"Signage, viewing distance and the seams","url":"https://addaly.com/learn/vector-and-print/large-format-and-distance","api":"https://addaly.com/api/lesson/vector-and-print/large-format-and-distance","minutes":8,"keyIdea":"Large-format resolution is set by viewing distance (20 to 40 ppi at full size for a hoarding seen from 30 m) and the constraints that actually decide the design are where the panel seams fall, the hem and eyelet allowance, and cap height of about 25 mm per 3 m of viewing distance."}]}]},{"slug":"ai-images","title":"Image Generation, in Practice","tagline":"Reference images, inpainting, character LoRAs, upscaling, and the licence nobody read.","description":"The craft of getting a specific, finished image out of a model on a deadline. Choosing between hosted tools and open weights on cost, control and licensing. Preset platforms like Higgsfield and what they take away. Reference images and denoise strength, inpainting and outpainting, pose and depth conditioning, character consistency, upscalers that invent detail, the finishing pass in a raster editor, and what you must tell a client.","level":"beginner","track":"create","url":"https://addaly.com/learn/ai-images","lessons":69,"minutes":547,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-images.pdf","pages":386,"bytes":4585449,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-images.pdf","cover":"https://addaly.com/textbooks/look/ai-images/1.webp?v=2026-10-07-4585449"},"film":null,"modules":[{"slug":"the-kit","title":"The kit, and what each piece of it costs you","summary":"Before any picture, a set of decisions that are easy to get wrong and expensive to reverse: hosted service or your own machine, which files a \"model\" actually consists of, which interface to spend your learning time on, how to make a large model fit a small graphics card, and why the same prompt produces different pictures on two platforms. This block ends with a setup you can reproduce in six months.","outcome":"Assemble a working image-generation setup from the hardware you actually own (hosted service, local install or a free cloud GPU) and state for your chosen route the VRAM it needs, the seconds and rupees per image it costs, the licence it carries, and the exact files on disk that make up the model.","lessons":[{"slug":"choosing-a-generator","title":"The generator you pick is a licensing decision","url":"https://addaly.com/learn/ai-images/choosing-a-generator","api":"https://addaly.com/api/lesson/ai-images/choosing-a-generator","minutes":9,"keyIdea":"The licence on a model's weights governs whether you may use it commercially, and it is a completely separate question from who owns the picture it made."},{"slug":"presets-and-recipes","title":"A preset is somebody else's workflow, frozen","url":"https://addaly.com/learn/ai-images/presets-and-recipes","api":"https://addaly.com/api/lesson/ai-images/presets-and-recipes","minutes":8,"keyIdea":"Recipe-driven tools trade control for speed, and the bill arrives at the first revision, when the thing the client wants changed is the thing the preset already decided."},{"slug":"hosted-or-local","title":"Three routes to a GPU, and the arithmetic for each","url":"https://addaly.com/learn/ai-images/hosted-or-local","api":"https://addaly.com/api/lesson/ai-images/hosted-or-local","minutes":9,"keyIdea":"The choice between a hosted service, your own card and a free cloud notebook is decided by how many images you make per month and how much control you need, and the crossover is usually somewhere around a few thousand images."},{"slug":"what-the-files-are","title":"A model is four kinds of file, and mixing them up wastes an evening","url":"https://addaly.com/learn/ai-images/what-the-files-are","api":"https://addaly.com/api/lesson/ai-images/what-the-files-are","minutes":8,"keyIdea":"A checkpoint, a VAE, a LoRA and an embedding are different file types with different sizes and different folders, and almost every \"it loaded but the image is grey mush\" problem is one of them in the wrong place."},{"slug":"picking-an-interface","title":"Four front ends, and which one deserves your learning time","url":"https://addaly.com/learn/ai-images/picking-an-interface","api":"https://addaly.com/api/lesson/ai-images/picking-an-interface","minutes":8,"keyIdea":"The interface you learn decides which problems are easy, and the right choice is the simplest one that can express the workflow you actually need, which for finished client work usually means a node graph eventually."},{"slug":"the-first-hour","title":"The first hour, and the four errors everybody gets","url":"https://addaly.com/learn/ai-images/the-first-hour","api":"https://addaly.com/api/lesson/ai-images/the-first-hour","minutes":8,"keyIdea":"Almost every failed local install is one of four specific errors, each with a one-line cause, and knowing them turns a lost weekend into twenty minutes."},{"slug":"speed-and-steps","title":"Steps, samplers and the seconds you should actually expect","url":"https://addaly.com/learn/ai-images/speed-and-steps","api":"https://addaly.com/api/lesson/ai-images/speed-and-steps","minutes":8,"keyIdea":"Doubling the step count past roughly 30 buys almost nothing on a standard model, while a distilled model does a usable image in 4 to 8 steps, so measure iterations per second and spend your time where the curve is still steep."},{"slug":"quantisation-and-offload","title":"Making a big model fit a small card","url":"https://addaly.com/learn/ai-images/quantisation-and-offload","api":"https://addaly.com/api/lesson/ai-images/quantisation-and-offload","minutes":8,"keyIdea":"Quantisation and offloading trade quality or speed for memory in known amounts: fp8 costs almost nothing, Q4 costs a little detail, and CPU offload costs seconds rather than quality."},{"slug":"the-safety-filter-differs","title":"Every platform's filter is different, and that is a production risk","url":"https://addaly.com/learn/ai-images/the-safety-filter-differs","api":"https://addaly.com/api/lesson/ai-images/the-safety-filter-differs","minutes":7,"keyIdea":"A refusal is produced by a keyword layer, an output classifier and an account-level policy stacked together, all tuned for the platform's liability rather than your brief, which is why the same prompt passes on one service and fails on another."},{"slug":"a-reproducible-setup","title":"The setup that still works in six months","url":"https://addaly.com/learn/ai-images/a-reproducible-setup","api":"https://addaly.com/api/lesson/ai-images/a-reproducible-setup","minutes":7,"keyIdea":"Diffusion output depends on the exact version of the interface, the model hash and the sampler implementation, so recording those four or five facts with each approved image is what makes a client revision six months later a ten-minute job."},{"slug":"cost-and-batching","title":"You are paying to make decisions you could make cheaply","url":"https://addaly.com/learn/ai-images/cost-and-batching","api":"https://addaly.com/api/lesson/ai-images/cost-and-batching","minutes":8,"keyIdea":"Choose the frame on cheap low-step renders and spend full quality only on the winner; after about six full-quality attempts the remaining distance is editing work, not generation."}]},{"slug":"the-brief","title":"From a request to a specification you can generate against","summary":"The work that decides whether a job goes well happens before the first prompt. This block turns \"we need something for the launch\" into a document: the exact pixel dimensions the image has to land in, the aspect ratio the model can natively produce, a reference pack where every picture has a stated purpose, a written list of what must never appear, and an honest note about which parts of the brief a generator cannot deliver at all.","outcome":"Convert a one-line request into a written image specification (final pixel dimensions, the native generation ratio and the crop-safe area inside it, colour and brand constraints, a purpose-labelled reference pack and an explicit forbidden list) and state which elements will have to be photographed or composited rather than generated.","lessons":[{"slug":"what-the-image-is-for","title":"Start at the placement, not the picture","url":"https://addaly.com/learn/ai-images/what-the-image-is-for","api":"https://addaly.com/api/lesson/ai-images/what-the-image-is-for","minutes":8,"keyIdea":"The final placement fixes the dimensions, the crop, the amount of detail that will ever be visible and the file format, and every one of those decisions is cheaper to make before generating than after."},{"slug":"aspect-ratio-and-the-native-bucket","title":"The ratios the model was trained on, and what happens outside them","url":"https://addaly.com/learn/ai-images/aspect-ratio-and-the-native-bucket","api":"https://addaly.com/api/lesson/ai-images/aspect-ratio-and-the-native-bucket","minutes":8,"keyIdea":"Models are trained at a specific set of resolutions, and generating far outside those buckets produces duplicated subjects and stretched anatomy, so you pick the nearest trained ratio and crop to the delivery size afterwards."},{"slug":"crop-safe-composition","title":"Designing for the crop you will not control","url":"https://addaly.com/learn/ai-images/crop-safe-composition","api":"https://addaly.com/api/lesson/ai-images/crop-safe-composition","minutes":8,"keyIdea":"Plan the frame as concentric zones (a core that survives every crop, a middle that survives most, and an outer band that exists to be thrown away) because the image will be re-cropped by people and platforms who never see your original."},{"slug":"the-reference-pack","title":"Six references, each with a job","url":"https://addaly.com/learn/ai-images/the-reference-pack","api":"https://addaly.com/api/lesson/ai-images/the-reference-pack","minutes":7,"keyIdea":"A mood board of vibes cannot be acted on, but six references each labelled with the single thing it is there to demonstrate can be used directly as conditioning and as the basis for sign-off."},{"slug":"the-forbidden-list","title":"Write down what must not appear","url":"https://addaly.com/learn/ai-images/the-forbidden-list","api":"https://addaly.com/api/lesson/ai-images/the-forbidden-list","minutes":7,"keyIdea":"A negative prompt is a weak statistical nudge rather than a guarantee, so anything that would be genuinely damaging in the final image belongs on a written checklist that a person verifies before delivery."},{"slug":"brand-colour-is-a-constraint","title":"A hex value is not something a diffusion model can hit","url":"https://addaly.com/learn/ai-images/brand-colour-is-a-constraint","api":"https://addaly.com/api/lesson/ai-images/brand-colour-is-a-constraint","minutes":8,"keyIdea":"Diffusion models cannot be instructed to produce an exact colour, so brand colour is achieved by generating in a neutral or near palette and then grading or compositing the exact value in afterwards."},{"slug":"one-image-or-a-set","title":"One hero or twelve pieces is a different job","url":"https://addaly.com/learn/ai-images/one-image-or-a-set","api":"https://addaly.com/api/lesson/ai-images/one-image-or-a-set","minutes":7,"keyIdea":"A single image is a search problem and a set is a consistency problem, and they need different budgets, different methods and a decision made before any generating starts."},{"slug":"what-to-shoot-instead","title":"The frames where a phone camera wins","url":"https://addaly.com/learn/ai-images/what-to-shoot-instead","api":"https://addaly.com/api/lesson/ai-images/what-to-shoot-instead","minutes":7,"keyIdea":"Anything that must be exactly itself (a real product, real premises, real staff, food you are selling) is faster, cheaper and safer to photograph than to generate, and recognising those frames early is a professional skill rather than a failure."},{"slug":"writing-the-spec","title":"The one page that ends the revision argument","url":"https://addaly.com/learn/ai-images/writing-the-spec","api":"https://addaly.com/api/lesson/ai-images/writing-the-spec","minutes":7,"keyIdea":"A signed one-page spec that names dimensions, ratio, forbidden content, the reference pack and what will be photographed rather than generated converts later disputes from matters of taste into matters of record."},{"slug":"rights-and-disclosure","title":"What you can sell, and what you must disclose","url":"https://addaly.com/learn/ai-images/rights-and-disclosure","api":"https://addaly.com/api/lesson/ai-images/rights-and-disclosure","minutes":10,"keyIdea":"Being licensed to use a model, owning its output, and having to disclose that output is generated are three separate questions, and only the ownership one is genuinely unsettled."}]},{"slug":"first-frames","title":"Getting to a frame worth keeping","summary":"Exploration is where most of the time goes and where most of it is wasted. This block replaces prompt roulette with a method: a prompt built from named slots, the photographic vocabulary that measurably changes an image and the vocabulary that does nothing, a cheap contact sheet you judge on a grid, fixed seeds so a comparison means something, and a written rule for when to stop generating and start editing.","outcome":"Run a structured exploration that reaches a usable frame inside a stated budget (a prompt assembled in named slots, a low-cost contact sheet judged on a grid, seed-fixed single-variable comparisons) and apply an explicit test for whether a frame is worth taking into repair or should be abandoned.","lessons":[{"slug":"the-prompt-in-slots","title":"Build the prompt in slots, not as a sentence you keep rewriting","url":"https://addaly.com/learn/ai-images/the-prompt-in-slots","api":"https://addaly.com/api/lesson/ai-images/the-prompt-in-slots","minutes":8,"keyIdea":"Writing a prompt as seven named slots makes it debuggable, because when the image is wrong you can change one slot and know which part of the description caused the change."},{"slug":"lens-and-camera-words","title":"The camera vocabulary that works, and the words that do nothing","url":"https://addaly.com/learn/ai-images/lens-and-camera-words","api":"https://addaly.com/api/lesson/ai-images/lens-and-camera-words","minutes":8,"keyIdea":"Focal length, aperture, camera height and shot size measurably change composition because they appeared in the captions of millions of training photographs, while quality words like \"8k\" and \"masterpiece\" mostly do nothing on modern models."},{"slug":"light-is-the-whole-look","title":"Name the light or accept the model's average","url":"https://addaly.com/learn/ai-images/light-is-the-whole-look","api":"https://addaly.com/api/lesson/ai-images/light-is-the-whole-look","minutes":8,"keyIdea":"Light is the single highest-leverage slot in a prompt, and leaving it unspecified is the main reason generated images look generically generated."},{"slug":"style-without-a-living-artist","title":"Describing a look without naming a living artist","url":"https://addaly.com/learn/ai-images/style-without-a-living-artist","api":"https://addaly.com/api/lesson/ai-images/style-without-a-living-artist","minutes":8,"keyIdea":"A look is more reliably reproduced by naming its process, era, materials and printing than by naming an artist, and the process description also avoids the ethical and commercial problem of trading on a living person's name."},{"slug":"the-contact-sheet","title":"Sixteen cheap frames beat four expensive ones","url":"https://addaly.com/learn/ai-images/the-contact-sheet","api":"https://addaly.com/api/lesson/ai-images/the-contact-sheet","minutes":7,"keyIdea":"Judging a grid of many low-cost renders at once is faster and more accurate than judging full-quality images one at a time, because composition is visible at thumbnail size and commitment bias is not."},{"slug":"seed-discipline","title":"Fix the seed or learn nothing","url":"https://addaly.com/learn/ai-images/seed-discipline","api":"https://addaly.com/api/lesson/ai-images/seed-discipline","minutes":7,"keyIdea":"A seed fixes the starting noise, so changing it and the prompt together means you cannot attribute the difference to either, and seed-locked comparison is what turns guessing into testing."},{"slug":"one-change-at-a-time","title":"Change one thing, or you have learned nothing","url":"https://addaly.com/learn/ai-images/one-change-at-a-time","api":"https://addaly.com/api/lesson/ai-images/one-change-at-a-time","minutes":7,"keyIdea":"A comparison is only informative when one variable moves, and the habit of changing prompt, sampler and steps together is why so much accumulated knowledge about image generation turns out to be wrong."},{"slug":"when-the-model-will-not-do-it","title":"Recognising the twenty minutes that will never converge","url":"https://addaly.com/learn/ai-images/when-the-model-will-not-do-it","api":"https://addaly.com/api/lesson/ai-images/when-the-model-will-not-do-it","minutes":7,"keyIdea":"Some requests fail for structural reasons rather than for want of a better prompt, and the professional skill is recognising them inside three attempts and switching method instead of continuing."},{"slug":"prompt-from-an-image","title":"Interrogating a picture for vocabulary","url":"https://addaly.com/learn/ai-images/prompt-from-an-image","api":"https://addaly.com/api/lesson/ai-images/prompt-from-an-image","minutes":7,"keyIdea":"An interrogator recovers usable vocabulary from a reference image but never recovers the image, because it is describing appearance rather than inverting the generation process."},{"slug":"the-keeper-checklist","title":"What \"good enough to take forward\" actually means","url":"https://addaly.com/learn/ai-images/the-keeper-checklist","api":"https://addaly.com/api/lesson/ai-images/the-keeper-checklist","minutes":7,"keyIdea":"A frame is worth repairing when its composition, light and structure are right, because those are the things repair cannot create, while hands, small objects and texture always can be fixed."}]},{"slug":"steering-with-images","title":"Steering with pictures instead of adjectives","summary":"Words run out. Everything a brief asks for that a prompt cannot deliver (this composition, this perspective, this palette, this pose, this part of the frame and not that part) is delivered by giving the model an image instead. This block covers the ladder of denoise strengths, the five-minute sketch, colour blocks painted in a free editor, a depth map rendered from Blender primitives, the difference between the control types, prompting regions separately, and how to stack two controls without producing something that looks traced.","outcome":"Take control of composition by conditioning on an image (a photograph, a biro sketch, a flat colour block, a depth render or a pose skeleton) choose the conditioning type that preserves what the brief requires and discards what it does not, and state the strength and end-step you used and the failure each setting was avoiding.","lessons":[{"slug":"show-dont-describe","title":"Stop describing it and show it the picture","url":"https://addaly.com/learn/ai-images/show-dont-describe","api":"https://addaly.com/api/lesson/ai-images/show-dont-describe","minutes":8,"keyIdea":"Denoise strength decides how much of your reference survives; the useful range is roughly 0.4 to 0.6, and everything above 0.75 throws the reference away."},{"slug":"telling-it-the-composition","title":"The model is guessing your composition","url":"https://addaly.com/learn/ai-images/telling-it-the-composition","api":"https://addaly.com/api/lesson/ai-images/telling-it-the-composition","minutes":9,"keyIdea":"Conditioning makes composition an input rather than an outcome, and letting the control end around 60% of the steps is what stops the result looking traced."},{"slug":"the-img2img-ladder","title":"Three passes down the denoise ladder","url":"https://addaly.com/learn/ai-images/the-img2img-ladder","api":"https://addaly.com/api/lesson/ai-images/the-img2img-ladder","minutes":8,"keyIdea":"Running several img2img passes at decreasing denoise strength converges on a finished image more reliably than one pass at a middling value, because each pass only has to make a small correction."},{"slug":"sketch-to-image","title":"A biro sketch is the most reliable composition tool you own","url":"https://addaly.com/learn/ai-images/sketch-to-image","api":"https://addaly.com/api/lesson/ai-images/sketch-to-image","minutes":8,"keyIdea":"Five minutes of rough drawing photographed on a phone gives the model a composition it will follow, and it requires no drawing skill because the conditioning reads structure rather than quality of line."},{"slug":"colour-blocking","title":"Paint flat shapes, then let the model make them real","url":"https://addaly.com/learn/ai-images/colour-blocking","api":"https://addaly.com/api/lesson/ai-images/colour-blocking","minutes":8,"keyIdea":"A crude painting of flat colour shapes run through img2img at low denoise places objects and palette exactly, because the colour distribution of the input survives the parts of the schedule that decide layout."},{"slug":"depth-from-a-blockout","title":"Get the perspective right by building it","url":"https://addaly.com/learn/ai-images/depth-from-a-blockout","api":"https://addaly.com/api/lesson/ai-images/depth-from-a-blockout","minutes":9,"keyIdea":"Rendering a depth map from a few primitives in Blender gives the model correct perspective and object placement that no sketch or prompt can supply, and it is the standard professional route for interiors, architecture and product staging."},{"slug":"choosing-the-control-type","title":"Canny, lineart, depth, softedge, pose, normal","url":"https://addaly.com/learn/ai-images/choosing-the-control-type","api":"https://addaly.com/api/lesson/ai-images/choosing-the-control-type","minutes":8,"keyIdea":"Each control type preserves one property of the input and discards the rest, so the choice is made by naming what must survive from the source and what must be free to change."},{"slug":"regional-prompting","title":"Different words for different parts of the frame","url":"https://addaly.com/learn/ai-images/regional-prompting","api":"https://addaly.com/api/lesson/ai-images/regional-prompting","minutes":8,"keyIdea":"Regional prompting assigns separate text to separate areas of the image, which solves attribute binding failures that no amount of rephrasing a single prompt can fix."},{"slug":"style-adapters","title":"Transferring a look from an image without training anything","url":"https://addaly.com/learn/ai-images/style-adapters","api":"https://addaly.com/api/lesson/ai-images/style-adapters","minutes":8,"keyIdea":"An image-prompt adapter injects a reference image's appearance through the model's attention layers, giving style transfer in seconds rather than the hours a LoRA costs, at the price of much less control over what exactly is transferred."},{"slug":"stacking-controls","title":"Two controls, without the plastic look","url":"https://addaly.com/learn/ai-images/stacking-controls","api":"https://addaly.com/api/lesson/ai-images/stacking-controls","minutes":8,"keyIdea":"Stacking conditioning signals removes the model's freedom in proportion to the total constraint, so the sum of the strengths matters more than any individual value and should stay near 1.2 to 1.5."}]},{"slug":"repair-and-extend","title":"Repair, extend, assemble","summary":"The base render is raw material. This block is the work between that and a deliverable: a triage order that fixes structure before detail, the specific settings that repair hands and faces, the only reliable way to put words in a picture, extending a frame when the crop changes, removing an object without leaving a ghost, putting a real photographed product into a generated scene so the shadow and grain agree, and enlarging a canvas past what the model can render in one pass.","outcome":"Take a flawed base render to a deliverable by masked repair: fix hands, faces and small objects at full resolution with stated denoise values, extend the frame without a visible seam, remove an object cleanly, and composite a photographed item into a generated scene with matching perspective, contact shadow, optics and grain.","lessons":[{"slug":"inpainting-is-the-job","title":"The finished image is never one generation","url":"https://addaly.com/learn/ai-images/inpainting-is-the-job","api":"https://addaly.com/api/lesson/ai-images/inpainting-is-the-job","minutes":9,"keyIdea":"Generate a base plate, then repair it region by region; the \"inpaint at full resolution\" setting is what gives a small detail enough pixels to be drawn correctly."},{"slug":"the-repair-triage","title":"Fix it in the order that stops you doing it twice","url":"https://addaly.com/learn/ai-images/the-repair-triage","api":"https://addaly.com/api/lesson/ai-images/the-repair-triage","minutes":8,"keyIdea":"Repair has a correct order (structure, then faces and hands, then edges, then small objects, then grade and grain last) because each stage changes the pixels the next stage would otherwise have worked on."},{"slug":"hands-eyes-teeth","title":"The three repairs everybody needs, with settings","url":"https://addaly.com/learn/ai-images/hands-eyes-teeth","api":"https://addaly.com/api/lesson/ai-images/hands-eyes-teeth","minutes":8,"keyIdea":"Hands, eyes and teeth fail because they are small, high-variance structures rendered at too few pixels, so the fix is always to give the region more pixels rather than to describe it better."},{"slug":"text-in-images","title":"Type is set, not generated","url":"https://addaly.com/learn/ai-images/text-in-images","api":"https://addaly.com/api/lesson/ai-images/text-in-images","minutes":8,"keyIdea":"Generated text fails at unusual words, small sizes and long strings because a diffusion model renders letterforms as visual texture rather than assembling glyphs, so any text that must be correct is set in a type tool over a clean plate."},{"slug":"outpainting-the-crop","title":"Extending a frame when the crop changes","url":"https://addaly.com/learn/ai-images/outpainting-the-crop","api":"https://addaly.com/api/lesson/ai-images/outpainting-the-crop","minutes":8,"keyIdea":"Outpainting extends an image in overlapping steps of a few hundred pixels, and the overlap is what lets the model match light, perspective and texture rather than inventing a discontinuous new scene."},{"slug":"removing-a-thing-properly","title":"Four ways to remove an object, and when each is right","url":"https://addaly.com/learn/ai-images/removing-a-thing-properly","api":"https://addaly.com/api/lesson/ai-images/removing-a-thing-properly","minutes":8,"keyIdea":"Clone, heal, content-aware fill and inpainting fail in different ways, so the choice depends on whether the area behind the object is a texture, a structure or a scene that has to be invented."},{"slug":"real-product-generated-scene","title":"The real product in a generated world","url":"https://addaly.com/learn/ai-images/real-product-generated-scene","api":"https://addaly.com/api/lesson/ai-images/real-product-generated-scene","minutes":9,"keyIdea":"A photographed product composited into a generated scene is convincing only when perspective, light direction, contact shadow, reflection and grain all agree, and the contact shadow is the one that gives it away."},{"slug":"matching-grain-and-optics","title":"Making two sources agree","url":"https://addaly.com/learn/ai-images/matching-grain-and-optics","api":"https://addaly.com/api/lesson/ai-images/matching-grain-and-optics","minutes":8,"keyIdea":"Every image carries a signature of noise, sharpness, depth of field and chromatic behaviour, and a composite reads as fake when two sources disagree on that signature rather than on content."},{"slug":"edges-and-halos","title":"The fault the client sees on a big screen","url":"https://addaly.com/learn/ai-images/edges-and-halos","api":"https://addaly.com/api/lesson/ai-images/edges-and-halos","minutes":8,"keyIdea":"A composite or repair fails at its boundary, and the three specific faults (colour contamination, a bright or dark halo, and over-feathering) each have a distinct cause and a distinct fix."},{"slug":"tiling-and-large-canvases","title":"Getting to poster size without a second horizon","url":"https://addaly.com/learn/ai-images/tiling-and-large-canvases","api":"https://addaly.com/api/lesson/ai-images/tiling-and-large-canvases","minutes":8,"keyIdea":"A large final image is produced by generating at native size and enlarging in a separate pass, and where extra generated detail is needed the canvas is processed as overlapping tiles with a low denoise so no tile can invent a new scene."}]},{"slug":"consistency","title":"The same thing, twelve times","summary":"One good image is a search problem; twelve that belong together is an engineering one. This block builds the character sheet you generate from, the practicalities of training a LoRA on free hardware including the dataset rules that decide whether it works, the decision between an adapter and a trained model, why a product is harder than a face, the constants that hold a visual system together across a set, a naming scheme that survives the revision round, and a worked run of twelve images from start to delivery.","outcome":"Deliver a set of images that hold one character, one product and one visual system: build a character sheet, choose between an image adapter and a trained LoRA on a stated cost-and-quality basis, prepare a training set that avoids the four common dataset faults, and hold light, palette, lens and finish constant across a campaign.","lessons":[{"slug":"the-same-face-twice","title":"The same face twice is the hard part","url":"https://addaly.com/learn/ai-images/the-same-face-twice","api":"https://addaly.com/api/lesson/ai-images/the-same-face-twice","minutes":9,"keyIdea":"One-photo identity adapters get you a family resemblance; a specific real person needs a LoRA trained on varied photographs, or their actual photographed face composited in an editor."},{"slug":"the-character-sheet","title":"Build the reference before you build the images","url":"https://addaly.com/learn/ai-images/the-character-sheet","api":"https://addaly.com/api/lesson/ai-images/the-character-sheet","minutes":8,"keyIdea":"A character sheet turns an identity from something you hope recurs into an asset you condition on, and building it first is what makes every later frame a matter of reuse rather than of luck."},{"slug":"training-a-lora-in-practice","title":"Training a character LoRA on hardware you can borrow","url":"https://addaly.com/learn/ai-images/training-a-lora-in-practice","api":"https://addaly.com/api/lesson/ai-images/training-a-lora-in-practice","minutes":9,"keyIdea":"A usable character LoRA trains from 15 to 30 images in under an hour on free cloud hardware, and the settings that matter are rank, learning rate and total steps, with overfitting visible as the training images reappearing in the output."},{"slug":"dataset-hygiene","title":"Four dataset faults, and the LoRA each one ruins","url":"https://addaly.com/learn/ai-images/dataset-hygiene","api":"https://addaly.com/api/lesson/ai-images/dataset-hygiene","minutes":8,"keyIdea":"A LoRA learns whatever is constant across its training images, so variety in everything except the subject is the property that decides whether it works, and no training setting compensates for a set that lacks it."},{"slug":"adapter-or-lora","title":"The decision, with the numbers","url":"https://addaly.com/learn/ai-images/adapter-or-lora","api":"https://addaly.com/api/lesson/ai-images/adapter-or-lora","minutes":7,"keyIdea":"An adapter gives roughly seventy per cent of an identity in under a minute and a trained LoRA gives most of the rest in about an hour, so the decision turns on how many images the identity has to survive and how closely it will be examined."},{"slug":"product-consistency","title":"A product is harder than a face","url":"https://addaly.com/learn/ai-images/product-consistency","api":"https://addaly.com/api/lesson/ai-images/product-consistency","minutes":8,"keyIdea":"A face is forgiven small variation and a product is not, because a viewer compares the rendered product against the real one they can buy, so compositing a photograph is almost always the correct answer."},{"slug":"a-visual-system-across-a-set","title":"Five constants that do more than the face","url":"https://addaly.com/learn/ai-images/a-visual-system-across-a-set","api":"https://addaly.com/api/lesson/ai-images/a-visual-system-across-a-set","minutes":8,"keyIdea":"Coherence in a set is produced by holding light, lens, palette, crop and finish constant, and these are cheap to enforce and far more visible to a viewer than small drift in a character's features."},{"slug":"naming-and-versioning","title":"A file scheme that survives the revision round","url":"https://addaly.com/learn/ai-images/naming-and-versioning","api":"https://addaly.com/api/lesson/ai-images/naming-and-versioning","minutes":7,"keyIdea":"A naming convention that encodes project, frame, version and status lets you find the approved file in seconds six months later, and its absence is what turns a small revision into an afternoon."},{"slug":"the-campaign-of-twelve","title":"A worked run, with the budget and the failure","url":"https://addaly.com/learn/ai-images/the-campaign-of-twelve","api":"https://addaly.com/api/lesson/ai-images/the-campaign-of-twelve","minutes":8,"keyIdea":"A twelve-image campaign is about thirty hours of work distributed unevenly: a third on establishing the system, most of the rest on repair and consistency, and very little on generation itself."}]},{"slug":"finishing","title":"Finishing and handing over","summary":"The last few hours decide whether the work looks professional. This block covers the resolution the job actually needs rather than the number people quote, what happens to colour between a screen and a press, making type legible over a busy photograph, the twelve-point check that catches what a client would otherwise find, exporting without visible compression damage, writing alt text for a generated image, and handling the revision that turns out to be a rebuild.","outcome":"Take an approved frame to a delivered file: reach the output resolution the medium genuinely requires, prepare colour for screen or press, set type that stays legible over a photographic background, run a named twelve-point QA pass, and hand over a package with disclosure, alt text and archived source files.","lessons":[{"slug":"upscaling-and-invention","title":"Upscaling either restores detail or invents it","url":"https://addaly.com/learn/ai-images/upscaling-and-invention","api":"https://addaly.com/api/lesson/ai-images/upscaling-and-invention","minutes":8,"keyIdea":"Diffusion-based upscalers re-generate rather than sharpen, so never point one at text, a logo, a product detail or a face you need to stay recognisable."},{"slug":"the-finishing-pass","title":"Nothing goes to a client straight from the model","url":"https://addaly.com/learn/ai-images/the-finishing-pass","api":"https://addaly.com/api/lesson/ai-images/the-finishing-pass","minutes":8,"keyIdea":"Curves for contrast, a colour pass to match the set, fine grain to fake a sensor, and real type over any generated words: that is the ten minutes that separates output from a deliverable."},{"slug":"resolution-you-actually-need","title":"300 dpi is one number applied to everything","url":"https://addaly.com/learn/ai-images/resolution-you-actually-need","api":"https://addaly.com/api/lesson/ai-images/resolution-you-actually-need","minutes":8,"keyIdea":"Required resolution is set by viewing distance rather than by a universal figure, so a billboard needs far fewer pixels per inch than a brochure and most \"high res please\" requests are satisfied by a file you already have."},{"slug":"colour-for-the-medium","title":"The blue on your screen is not going on the press","url":"https://addaly.com/learn/ai-images/colour-for-the-medium","api":"https://addaly.com/api/lesson/ai-images/colour-for-the-medium","minutes":8,"keyIdea":"Screens emit light and presses absorb it, so a set of vivid screen colours cannot be printed at all, and the conversion has to be seen and approved before delivery rather than discovered on the printed sheet."},{"slug":"type-over-an-image","title":"Making words readable on a photograph","url":"https://addaly.com/learn/ai-images/type-over-an-image","api":"https://addaly.com/api/lesson/ai-images/type-over-an-image","minutes":8,"keyIdea":"Type over a photograph fails on contrast rather than on typeface, and the fixes are all about creating a controlled surface for the words rather than about choosing better fonts."},{"slug":"the-qa-pass","title":"Twelve things to check before you send","url":"https://addaly.com/learn/ai-images/the-qa-pass","api":"https://addaly.com/api/lesson/ai-images/the-qa-pass","minutes":8,"keyIdea":"A written check performed at 100% on the final file catches the specific faults that generated images produce and that the person who made the image has stopped being able to see."},{"slug":"export-and-compression","title":"Exporting without wrecking it at the last step","url":"https://addaly.com/learn/ai-images/export-and-compression","api":"https://addaly.com/api/lesson/ai-images/export-and-compression","minutes":8,"keyIdea":"Export is where visible damage is introduced by compression, colour profile loss and resampling, and each has a specific setting that prevents it."},{"slug":"alt-text-and-accessibility","title":"Describing the image, including what it is","url":"https://addaly.com/learn/ai-images/alt-text-and-accessibility","api":"https://addaly.com/api/lesson/ai-images/alt-text-and-accessibility","minutes":8,"keyIdea":"Alt text describes what an image conveys in its context rather than listing what is in it, and whether to mention that an image is generated depends on whether that fact matters to understanding it."},{"slug":"the-revision-round","title":"When \"just change one thing\" is a rebuild","url":"https://addaly.com/learn/ai-images/the-revision-round","api":"https://addaly.com/api/lesson/ai-images/the-revision-round","minutes":8,"keyIdea":"Revisions divide into adjustments, regional changes and structural changes, and the professional skill is saying which category a request falls into before agreeing to it."}]}]},{"slug":"hugging-face","title":"Hugging Face, End to End","tagline":"Read a model card licence-first, run a Space for free, keep a token safe, publish something of your own.","description":"The Hub is a host for git repositories that happen to contain neural networks, and that framing explains the rest. You will read a model card licence-first, tell the four shelves apart, run and duplicate Spaces on free hardware, keep tokens out of public code, load models and stream datasets without filling your disk, judge a leaderboard sceptically, and publish a card a stranger can act on.","level":"intermediate","track":"create","url":"https://addaly.com/learn/hugging-face","lessons":75,"minutes":659,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/hugging-face.pdf","pages":462,"bytes":5106078,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/hugging-face.pdf","cover":"https://addaly.com/textbooks/look/hugging-face/1.webp?v=2026-10-07-5106078"},"film":null,"modules":[{"slug":"the-hub-as-a-repository-host","title":"The Hub, read properly","summary":"The Hub holds over a million model repositories and the search box is the worst way into them. This block teaches the Hub as what it is: a git host with a filter sidebar, a file layout, a naming convention and a set of counters, so that you can find a specific model among millions, tell from its files alone what will load it, and know which of its numbers mean anything.","outcome":"Find a specific model on the Hub using filters and the Python API rather than the search box, read its repository files to say what architecture it is, what format its weights are in and what code will run when you load it, and explain what the download counter is actually counting.","lessons":[{"slug":"the-hub-is-git","title":"The Hub is git, and that explains everything else","url":"https://addaly.com/learn/hugging-face/the-hub-is-git","api":"https://addaly.com/api/lesson/hugging-face/the-hub-is-git","minutes":10,"keyIdea":"A model on the Hub is a git repository with big files stored beside it, so it has versions, history and pull requests; and if you do not pin a revision, the model under your code can change without your code changing."},{"slug":"searching-the-hub","title":"The search box is the worst way in","url":"https://addaly.com/learn/hugging-face/searching-the-hub","api":"https://addaly.com/api/lesson/hugging-face/searching-the-hub","minutes":9,"keyIdea":"Hub search matches repository names and card text rather than meaning, so the filter sidebar (task tag, library, licence, and the base-model links to fine-tunes and quantizations) is the real interface, and the sort order answers popularity rather than quality."},{"slug":"reading-a-model-card","title":"Read the licence before you read the demo","url":"https://addaly.com/learn/hugging-face/reading-a-model-card","api":"https://addaly.com/api/lesson/hugging-face/reading-a-model-card","minutes":11,"keyIdea":"Check the licence family and the base model before anything else, because a fine-tune inherits its parent's terms no matter what its own card claims."},{"slug":"reading-a-model-name","title":"A model's name is a specification, if you can read it","url":"https://addaly.com/learn/hugging-face/reading-a-model-name","api":"https://addaly.com/api/lesson/hugging-face/reading-a-model-name","minutes":8,"keyIdea":"A repository name usually encodes owner, family, parameter count, tuning style and weight format, which is enough to compute memory and rule a model in or out, but it never encodes context length or licence, and a mixture-of-experts name like 8x7B states resident memory rather than compute."},{"slug":"inside-a-repository","title":"What the files in a model repository are for","url":"https://addaly.com/learn/hugging-face/inside-a-repository","api":"https://addaly.com/api/lesson/hugging-face/inside-a-repository","minutes":10,"keyIdea":"Five files answer the questions a model card often does not: config.json gives the architecture and context length, the tokenizer files carry the chat template, the safetensors index gives the true download size, generation_config sets sampling defaults you did not choose, and an adapter_config means you are looking at a LoRA rather than a model."},{"slug":"safetensors-and-pickle","title":"Loading a model can run someone else's code","url":"https://addaly.com/learn/hugging-face/safetensors-and-pickle","api":"https://addaly.com/api/lesson/hugging-face/safetensors-and-pickle","minutes":9,"keyIdea":"A pickle checkpoint executes code when loaded, while safetensors is a JSON header plus raw bytes with no code path at all, but `trust_remote_code=True` reopens the hole by importing Python from the repository, so the weights format and the loading code are two separate decisions."},{"slug":"four-shelves","title":"Four shelves, and picking the wrong one costs a weekend","url":"https://addaly.com/learn/hugging-face/four-shelves","api":"https://addaly.com/api/lesson/hugging-face/four-shelves","minutes":8,"keyIdea":"Models are parts, datasets are material, Spaces are finished tools and inference is rented hardware: choose the shelf by how often the job runs and whether the data may leave your machine."},{"slug":"the-hub-api","title":"Ask the Hub questions instead of browsing it","url":"https://addaly.com/learn/hugging-face/the-hub-api","api":"https://addaly.com/api/lesson/hugging-face/the-hub-api","minutes":9,"keyIdea":"`huggingface_hub` turns the Hub into a queryable service, and the single highest-value call is `model_info(..., files_metadata=True)`, which tells you exactly what a repository will cost in disk and what formats it duplicates before you spend a byte."},{"slug":"counters-and-trending","title":"What a download count is counting","url":"https://addaly.com/learn/hugging-face/counters-and-trending","api":"https://addaly.com/api/lesson/hugging-face/counters-and-trending","minutes":8,"keyIdea":"Downloads are a thirty-day count of file fetches dominated by CI, library defaults and ephemeral containers, so they are a floor on how well-exercised a model is and not a ranking, while fine-tune, adapter and Space counts cost real effort and carry more information."}]},{"slug":"transformers-from-text-to-text","title":"Transformers, from characters to output","summary":"The transformers library is three layers stacked: a tokenizer that turns text into integers, a model that turns integers into logits, and a decoder that turns logits back into text. Most of the bugs people report as bad models are one of those three layers being used wrongly. This block walks the whole path with real numbers, then gives you an ordered checklist for the case where everything loads and the output is still rubbish.","outcome":"Trace a piece of text from characters through a tokenizer to logits and back to text with the transformers library, and say which of the Auto class, the tokenizer, the padding side, the chat template or the generation config is at fault when a model loads without error and produces nonsense.","lessons":[{"slug":"your-first-pipeline","title":"One line that hides five steps","url":"https://addaly.com/learn/hugging-face/your-first-pipeline","api":"https://addaly.com/api/lesson/hugging-face/your-first-pipeline","minutes":8,"keyIdea":"`pipeline` resolves, tokenizes, runs, post-processes and formats in one call, and when you do not name a model it silently picks a small English-only default whose confidence score is a softmax over two numbers rather than a probability of being right."},{"slug":"the-auto-classes","title":"AutoModel gives you numbers, not answers","url":"https://addaly.com/learn/hugging-face/the-auto-classes","api":"https://addaly.com/api/lesson/hugging-face/the-auto-classes","minutes":9,"keyIdea":"`AutoModel` loads the network body and returns hidden states, while `AutoModelForX` attaches a task head, and when the checkpoint has no such head, transformers initialises it randomly and warns rather than failing, so a classifier that returns confident noise is the expected outcome of loading a base checkpoint."},{"slug":"tokenizers-in-practice","title":"Your text is integers, and the count is not the word count","url":"https://addaly.com/learn/hugging-face/tokenizers-in-practice","api":"https://addaly.com/api/lesson/hugging-face/tokenizers-in-practice","minutes":10,"keyIdea":"A tokenizer maps text to integers from a fixed vocabulary, and the tokens-per-word ratio depends on whose language the vocabulary was built from, so the same sentence can cost two to four times as much in an Indic script as in English on an English-centric model."},{"slug":"padding-and-attention-masks","title":"Padding on the wrong side ruins generation quietly","url":"https://addaly.com/learn/hugging-face/padding-and-attention-masks","api":"https://addaly.com/api/lesson/hugging-face/padding-and-attention-masks","minutes":9,"keyIdea":"The attention mask makes padding invisible to the model, but a decoder-only model generates from the last position, so right padding makes it continue from a pad token and quietly degrades batched output while single requests still look fine."},{"slug":"from-logits-to-text","title":"Logits, and the four knobs between them and words","url":"https://addaly.com/learn/hugging-face/from-logits-to-text","api":"https://addaly.com/api/lesson/hugging-face/from-logits-to-text","minutes":10,"keyIdea":"A model outputs one unnormalised score per vocabulary token and the decoding strategy picks from them, so temperature, top-p and repetition penalties are choices you make after the model has finished; and a `do_sample: false` default in generation_config silently discards every sampling parameter you pass."},{"slug":"chat-templates","title":"The chat template is not optional","url":"https://addaly.com/learn/hugging-face/chat-templates","api":"https://addaly.com/api/lesson/hugging-face/chat-templates","minutes":9,"keyIdea":"An instruction-tuned model was trained on one exact string format that ships inside `tokenizer_config.json`, so `apply_chat_template(..., add_generation_prompt=True)` is the only reliable way to build a prompt: hand-written `User:`/`Assistant:` text puts the model outside its training distribution with no error to show for it."},{"slug":"batching-and-throughput","title":"Throughput and latency are different problems","url":"https://addaly.com/learn/hugging-face/batching-and-throughput","api":"https://addaly.com/api/lesson/hugging-face/batching-and-throughput","minutes":9,"keyIdea":"Batching trades latency for throughput by amortising weight reads, so it pays on GPUs and often not on CPUs; and because a generation batch runs until its slowest member finishes, sorting by length and watching the KV cache matter more than raising the batch size."},{"slug":"streaming-and-stopping","title":"Showing tokens as they arrive, and making them stop","url":"https://addaly.com/learn/hugging-face/streaming-and-stopping","api":"https://addaly.com/api/lesson/hugging-face/streaming-and-stopping","minutes":8,"keyIdea":"Streaming changes perceived latency rather than compute, and it works by running `generate` on a second thread feeding a queue, while a model that never stops usually has a mismatch between the end token its template emits and the `eos_token_id` its generation config is watching for."},{"slug":"loads-but-outputs-rubbish","title":"It loaded, it ran, the output is nonsense","url":"https://addaly.com/learn/hugging-face/loads-but-outputs-rubbish","api":"https://addaly.com/api/lesson/hugging-face/loads-but-outputs-rubbish","minutes":9,"keyIdea":"Fluent-but-wrong output has a short list of causes to check in order (base instead of instruct, missing chat template, mismatched tokenizer, padding side, dtype overflow, over-aggressive quantization, inherited generation defaults and silent truncation) and the model itself is the last suspect, not the first."}]},{"slug":"running-it-on-what-you-have","title":"Running it on the hardware you actually have","summary":"Most of this readership is on a phone, a shared laptop, or a free Colab session that disconnects after a few hours. This block is the arithmetic and the tooling for that reality: how to compute the memory a model needs before downloading it, what quantization buys and costs, the formats that run well without a GPU, where free compute genuinely exists and where its limits are, and how to measure whether a change helped.","outcome":"Compute from a model's parameter count and dtype whether it will fit the machine in front of you, pick between a full-precision, quantized, GGUF or ONNX route for a stated constraint, and measure peak memory, first-token latency and quality loss well enough to defend the choice.","lessons":[{"slug":"running-it-locally","title":"Your disk fills up before your patience does","url":"https://addaly.com/learn/hugging-face/running-it-locally","api":"https://addaly.com/api/lesson/hugging-face/running-it-locally","minutes":11,"keyIdea":"Weights cost parameters times bytes-per-parameter and everything downloaded lands in one shared cache, where deleting the readable filenames frees nothing because they are only links to the blobs."},{"slug":"dtype-and-the-memory-bill","title":"The memory arithmetic you can do in your head","url":"https://addaly.com/learn/hugging-face/dtype-and-the-memory-bill","api":"https://addaly.com/api/lesson/hugging-face/dtype-and-the-memory-bill","minutes":9,"keyIdea":"Weights cost parameters times bytes-per-dtype, but the bill that decides whether generation fits is weights plus a KV cache that grows with sequence length and batch. And bfloat16 is preferred over float16 not for size but because it keeps float32's exponent range and so does not overflow to NaN."},{"slug":"device-map-and-offloading","title":"Spreading a model across whatever you have","url":"https://addaly.com/learn/hugging-face/device-map-and-offloading","api":"https://addaly.com/api/lesson/hugging-face/device-map-and-offloading","minutes":8,"keyIdea":"`device_map=\"auto\"` places layers across GPU, CPU and disk and streams weights shard by shard, which makes oversized models run correctly and extremely slowly, so offloading suits one-off jobs while quantization is the right answer for anything interactive."},{"slug":"quantisation-four-ways","title":"Quantization: what you buy and what you pay","url":"https://addaly.com/learn/hugging-face/quantisation-four-ways","api":"https://addaly.com/api/lesson/hugging-face/quantisation-four-ways","minutes":10,"keyIdea":"Quantization buys memory at a quality cost that concentrates in arithmetic, structured output and rare languages rather than spreading evenly, and at a fixed memory budget a heavily quantized large model usually beats a small model at full precision."},{"slug":"gguf-and-llama-cpp","title":"GGUF, and the laptop that has no GPU","url":"https://addaly.com/learn/hugging-face/gguf-and-llama-cpp","api":"https://addaly.com/api/lesson/hugging-face/gguf-and-llama-cpp","minutes":9,"keyIdea":"GGUF packs weights, tokenizer and template into one self-contained file that llama.cpp runs on CPU, Apple silicon or a phone with no CUDA and no Python, making `Q4_K_M` the default free path for anyone without a graphics card."},{"slug":"onnx-optimum-and-the-browser","title":"ONNX, Optimum, and models that run in a browser tab","url":"https://addaly.com/learn/hugging-face/onnx-optimum-and-the-browser","api":"https://addaly.com/api/lesson/hugging-face/onnx-optimum-and-the-browser","minutes":9,"keyIdea":"ONNX freezes a model into a portable graph that runs without PyTorch, and through transformers.js that graph runs inside a browser tab, which makes a static file a free, private, infinitely scalable deployment for any model small enough to download."},{"slug":"free-gpus-and-their-limits","title":"Where the free GPUs actually are","url":"https://addaly.com/learn/hugging-face/free-gpus-and-their-limits","api":"https://addaly.com/api/lesson/hugging-face/free-gpus-and-their-limits","minutes":9,"keyIdea":"Free GPU compute genuinely exists (Colab, Kaggle, Spaces CPU and ZeroGPU) and every one of them is temporary, so the discipline that makes it usable is pushing artefacts to the Hub, checkpointing to resume, and debugging on a tiny model before switching the name."},{"slug":"small-models-and-old-machines","title":"What actually runs on eight gigabytes","url":"https://addaly.com/learn/hugging-face/small-models-and-old-machines","api":"https://addaly.com/api/lesson/hugging-face/small-models-and-old-machines","minutes":9,"keyIdea":"On 8 GB and no GPU, embeddings, encoder classifiers, small Whisper models and 1 to 3B generative models at 4-bit all run usefully, and for a fixed narrow task a small specialised model usually beats a large general one on accuracy, speed and cost at the same time."},{"slug":"measuring-a-hardware-change","title":"Proving the change helped","url":"https://addaly.com/learn/hugging-face/measuring-a-hardware-change","api":"https://addaly.com/api/lesson/hugging-face/measuring-a-hardware-change","minutes":8,"keyIdea":"A hardware change has to be reported as peak memory, time to first token, throughput and quality on your own thirty examples together, because each configuration trades along all four axes at once and any one number alone can be improved while the system gets worse."}]},{"slug":"spaces-and-shipping-something","title":"Spaces: putting something in front of people","summary":"A Space is a git repository that the Hub builds and runs, with a public URL and a free tier that never expires. This block takes you from a forty-line Gradio script to an application with state, secrets, storage and a build you can debug, and then shows how to call somebody else's Space as an API, which turns the whole platform into infrastructure rather than a gallery.","outcome":"Build, configure and debug a Space that other people can use (choosing the SDK, pinning versions in the README, holding secrets and state correctly, picking hardware against a sleep policy) and call an existing Space programmatically as an API instead of reimplementing it.","lessons":[{"slug":"spaces-in-practice","title":"A Space is someone else's computer, already configured","url":"https://addaly.com/learn/hugging-face/spaces-in-practice","api":"https://addaly.com/api/lesson/hugging-face/spaces-in-practice","minutes":9,"keyIdea":"Free CPU hardware runs one-file-at-a-time work well and cannot run image generation or fast chat, and a slow Space is usually a cold start or a shared queue rather than a fault."},{"slug":"gradio-in-forty-lines","title":"Forty lines from nothing to a public URL","url":"https://addaly.com/learn/hugging-face/gradio-in-forty-lines","api":"https://addaly.com/api/lesson/hugging-face/gradio-in-forty-lines","minutes":9,"keyIdea":"`gr.Interface` turns a Python function plus input and output components into a public web application, and the two things that decide whether strangers can use it are loading the model once at import rather than per request, and shipping examples plus an honest statement of the limits."},{"slug":"gradio-blocks-and-state","title":"Blocks, when Interface is no longer enough","url":"https://addaly.com/learn/hugging-face/gradio-blocks-and-state","api":"https://addaly.com/api/lesson/hugging-face/gradio-blocks-and-state","minutes":9,"keyIdea":"`gr.Blocks` separates layout from event wiring, and the rule that prevents the worst class of Space bug is that module-level variables are shared by every visitor while `gr.State` is per-session, so the model is shared and everything about a user is not."},{"slug":"duplicate-a-space","title":"Duplicate it, and the app becomes yours to change","url":"https://addaly.com/learn/hugging-face/duplicate-a-space","api":"https://addaly.com/api/lesson/hugging-face/duplicate-a-space","minutes":9,"keyIdea":"Duplicating a Space gives you a private copy with no queue, but paid hardware bills for wall-clock time and does not sleep the way free hardware does: set the sleep timer before you upgrade."},{"slug":"the-space-configuration","title":"The README front matter is the deployment config","url":"https://addaly.com/learn/hugging-face/the-space-configuration","api":"https://addaly.com/api/lesson/hugging-face/the-space-configuration","minutes":8,"keyIdea":"A Space's deployment configuration is YAML front matter in `README.md`, so it is versioned like code, and the two fields that decide whether it still builds in six months are `sdk_version` and pinned dependency versions in `requirements.txt`."},{"slug":"hardware-sleep-and-zerogpu","title":"Hardware, sleep, and the bill that runs while you are asleep","url":"https://addaly.com/learn/hugging-face/hardware-sleep-and-zerogpu","api":"https://addaly.com/api/lesson/hugging-face/hardware-sleep-and-zerogpu","minutes":9,"keyIdea":"Paid Space hardware bills for wall-clock uptime rather than requests and does not sleep unless you set the timer first, while ZeroGPU attaches a GPU per function call, which is the only route to a free public demo that needs real acceleration."},{"slug":"storage-in-a-space","title":"The filesystem disappears, and what to do about it","url":"https://addaly.com/learn/hugging-face/storage-in-a-space","api":"https://addaly.com/api/lesson/hugging-face/storage-in-a-space","minutes":8,"keyIdea":"A Space's local filesystem does not survive restarts, so state belongs in `gr.State` for a session, a paid `/data` volume for the model cache, or a private Hub dataset repository for anything collected, and collecting user text at all is a commitment that has to be stated on the page."},{"slug":"beyond-gradio","title":"Streamlit, Docker and a Space with no server at all","url":"https://addaly.com/learn/hugging-face/beyond-gradio","api":"https://addaly.com/api/lesson/hugging-face/beyond-gradio","minutes":8,"keyIdea":"Gradio, Streamlit, Docker and static are four different deployment shapes, and the static Space running transformers.js is the one people overlook: no server, no sleep, no cost, and the user's data never leaves their device."},{"slug":"calling-a-space-as-an-api","title":"Every Space is an API you can call","url":"https://addaly.com/learn/hugging-face/calling-a-space-as-an-api","api":"https://addaly.com/api/lesson/hugging-face/calling-a-space-as-an-api","minutes":8,"keyIdea":"Gradio exposes every event handler as an API endpoint automatically, so any public Space is a callable service, but it can sleep, change or vanish and you cannot see its logs, so anything you depend on should be a private duplicate you control."},{"slug":"debugging-a-space","title":"It built, it started, it is red","url":"https://addaly.com/learn/hugging-face/debugging-a-space","api":"https://addaly.com/api/lesson/hugging-face/debugging-a-space","minutes":8,"keyIdea":"Build logs and container logs describe different phases and most confusion comes from reading the wrong one, while a container killed with no traceback is the out-of-memory signature, and a factory reboot rather than a restart is the fix when the code cannot explain the failure."}]},{"slug":"datasets-and-the-work-before-the-model","title":"Datasets, and the work that happens before any model","summary":"Most of the real job is data, and the datasets library exists so that a 500 GB corpus behaves like a Python list on a laptop. This block covers loading and streaming, the Arrow format that makes it possible, transforming at scale, querying the Hub's parquet copies with SQL before downloading a byte, and then the unglamorous checks (duplicates, leakage, class balance, label noise) that decide whether anything trained on it means anything.","outcome":"Inspect, stream, filter and transform a dataset far larger than your RAM, query the Hub's parquet conversion with SQL before downloading anything, run duplicate, leakage and class-balance checks on your own data, and publish it with a card stating provenance and licence.","lessons":[{"slug":"datasets-without-downloading","title":"Do not download the dataset","url":"https://addaly.com/learn/hugging-face/datasets-without-downloading","api":"https://addaly.com/api/lesson/hugging-face/datasets-without-downloading","minutes":9,"keyIdea":"Inspect a dataset in the viewer and stream it with `streaming=True` rather than downloading, and treat licence obligations as surviving fine-tuning until a lawyer in your country tells you otherwise."},{"slug":"the-datasets-library","title":"A dataset that behaves like a list and is not one","url":"https://addaly.com/learn/hugging-face/the-datasets-library","api":"https://addaly.com/api/lesson/hugging-face/the-datasets-library","minutes":9,"keyIdea":"A `Dataset` is a typed table where indexing a row returns a dict and slicing returns a dict of lists, and operations like shuffle and select build an indices map rather than copying data, which is why reordering a dataset far larger than RAM is instantaneous."},{"slug":"arrow-and-memory-mapping","title":"Why a 300 GB dataset opens instantly","url":"https://addaly.com/learn/hugging-face/arrow-and-memory-mapping","api":"https://addaly.com/api/lesson/hugging-face/arrow-and-memory-mapping","minutes":8,"keyIdea":"Datasets are memory-mapped columnar Arrow files, so size is limited by disk rather than RAM and row access faults in only the pages it needs, while `streaming=True` drops random access and true shuffling in exchange for needing no disk at all."},{"slug":"map-filter-and-batching","title":"Transforming a million rows without waiting an hour","url":"https://addaly.com/learn/hugging-face/map-filter-and-batching","api":"https://addaly.com/api/lesson/hugging-face/map-filter-and-batching","minutes":9,"keyIdea":"`map(batched=True)` hands your function a dict of lists and can return a different number of rows than it received, which makes it both the fast path and the tool for chunking, while `set_transform` applies on access for anything random that should not be cached."},{"slug":"the-viewer-and-sql","title":"Query a dataset with SQL before downloading it","url":"https://addaly.com/learn/hugging-face/the-viewer-and-sql","api":"https://addaly.com/api/lesson/hugging-face/the-viewer-and-sql","minutes":8,"keyIdea":"The Hub auto-converts public datasets to parquet, so DuckDB can run SQL against them over HTTP and answer class balance, length distribution, duplication and train–test overlap in seconds without downloading anything."},{"slug":"building-your-own-dataset","title":"Turning your files into a dataset","url":"https://addaly.com/learn/hugging-face/building-your-own-dataset","api":"https://addaly.com/api/lesson/hugging-face/building-your-own-dataset","minutes":9,"keyIdea":"Building a dataset is `from_dict`, `from_generator` or a folder convention plus explicitly typed `Features`, and publishing is one call; so the decisions that matter are the ones before the push: personal data, the right to redistribute, a licence, and starting private because public cannot be undone."},{"slug":"dataset-cards-and-provenance","title":"The card is where a dataset stops being a file","url":"https://addaly.com/learn/hugging-face/dataset-cards-and-provenance","api":"https://addaly.com/api/lesson/hugging-face/dataset-cards-and-provenance","minutes":8,"keyIdea":"A dataset card's job is provenance (where rows came from, under what terms, labelled by whom, with what agreement) because a licence tag cannot grant rights the compiler never held, and a dataset without recorded provenance can never be assessed against whatever the law turns out to be."},{"slug":"audio-and-image-datasets","title":"Media columns decode when you touch them","url":"https://addaly.com/learn/hugging-face/audio-and-image-datasets","api":"https://addaly.com/api/lesson/hugging-face/audio-and-image-datasets","minutes":8,"keyIdea":"`Audio` and `Image` columns decode lazily on access, so `cast_column` can resample or defer decoding for free, and the silent failures in media work are a sampling rate that does not match the model, processor constants borrowed from another model, and augmentation frozen into a cache by `map`."},{"slug":"data-quality-before-the-model","title":"Duplicates, leakage, balance, and label noise","url":"https://addaly.com/learn/hugging-face/data-quality-before-the-model","api":"https://addaly.com/api/lesson/hugging-face/data-quality-before-the-model","minutes":10,"keyIdea":"Before training, four checks decide whether a result means anything: exact and near duplicates, leakage along the axis deployment must generalise across, class balance against the metric you will quote, and label noise that sets a ceiling no model can pass."},{"slug":"preparing-a-dataset-for-training","title":"From a dataset to batches a trainer can eat","url":"https://addaly.com/learn/hugging-face/preparing-a-dataset-for-training","api":"https://addaly.com/api/lesson/hugging-face/preparing-a-dataset-for-training","minutes":9,"keyIdea":"Training needs `input_ids`, `attention_mask` and a column literally named `labels`, with padding done per batch by a collator rather than at map time, and for instruction tuning the prompt positions are set to `-100` so loss is computed only on the response."}]},{"slug":"embeddings-and-retrieval","title":"Embeddings, and search that understands","summary":"An embedding is a list of numbers that places a piece of text, an image or a clip of audio somewhere in a space where nearby means similar. It is the concept under semantic search, retrieval-augmented generation, recommendation, clustering and deduplication. And it runs on a phone. This block builds a working search over your own documents from first principles, then measures it honestly instead of trusting a leaderboard.","outcome":"Build and measure a semantic search over your own documents: choosing an embedding model against your language and text length, chunking deliberately, normalising vectors for the similarity you use, adding a cross-encoder reranker, and reporting recall@k on questions you wrote yourself.","lessons":[{"slug":"what-an-embedding-is","title":"A list of numbers where near means similar","url":"https://addaly.com/learn/hugging-face/what-an-embedding-is","api":"https://addaly.com/api/lesson/hugging-face/what-an-embedding-is","minutes":9,"keyIdea":"An embedding is a fixed-length vector whose geometry encodes meaning, produced by a model trained contrastively to place similar texts close together, so search, clustering, deduplication and few-shot classification are all the same operation, and its central weakness is that similarity is not relevance and negation barely moves the vector."},{"slug":"sentence-transformers-in-practice","title":"The library, and the four calls you need","url":"https://addaly.com/learn/hugging-face/sentence-transformers-in-practice","api":"https://addaly.com/api/lesson/hugging-face/sentence-transformers-in-practice","minutes":8,"keyIdea":"`SentenceTransformer.encode` with `normalize_embeddings=True` plus one matrix multiply is a complete search engine over a hundred thousand documents, and the two details that silently cost accuracy are forgetting a family's query prefix and letting a vectors array drift out of order with its metadata."},{"slug":"choosing-an-embedding-model","title":"Picking the model, and reading MTEB without being fooled","url":"https://addaly.com/learn/hugging-face/choosing-an-embedding-model","api":"https://addaly.com/api/lesson/hugging-face/choosing-an-embedding-model","minutes":9,"keyIdea":"Maximum sequence length and language coverage decide an embedding model more often than its benchmark rank does, and MTEB's average column mixes tasks you do not have; so use it for a shortlist of three and settle it with thirty questions of your own."},{"slug":"similarity-and-distance","title":"Cosine, dot product, and the normalisation that connects them","url":"https://addaly.com/learn/hugging-face/similarity-and-distance","api":"https://addaly.com/api/lesson/hugging-face/similarity-and-distance","minutes":8,"keyIdea":"On unit-length vectors cosine, dot product and Euclidean distance rank identically, so normalising at encode time removes the choice, and because each model spreads its space differently, similarity scores are for ranking rather than for thresholds copied from anyone else."},{"slug":"chunking-text-for-retrieval","title":"Chunking decides what your search can find","url":"https://addaly.com/learn/hugging-face/chunking-text-for-retrieval","api":"https://addaly.com/api/lesson/hugging-face/chunking-text-for-retrieval","minutes":9,"keyIdea":"Chunk size and boundaries decide what retrieval can find at all, so split on structure rather than character counts, count in the model's own tokens because scripts differ, carry the document and section title into the embedded text, and consider retrieving small chunks while passing their parent sections to the model."},{"slug":"a-search-index-without-a-database","title":"NumPy first, FAISS second, a database rarely","url":"https://addaly.com/learn/hugging-face/a-search-index-without-a-database","api":"https://addaly.com/api/lesson/hugging-face/a-search-index-without-a-database","minutes":9,"keyIdea":"Exact search with one matrix multiply handles a million vectors in tens of milliseconds, so NumPy is the right first index and FAISS or a vector database earns its place only at genuine scale or when filtered, updating, shared indexes are needed, and adding BM25 alongside fixes what embeddings are worst at."},{"slug":"reranking-with-cross-encoders","title":"The second pass that fixes the first","url":"https://addaly.com/learn/hugging-face/reranking-with-cross-encoders","api":"https://addaly.com/api/lesson/hugging-face/reranking-with-cross-encoders","minutes":8,"keyIdea":"A bi-encoder compares precomputed vectors and scales, while a cross-encoder reads query and document together and judges whether one answers the other, so retrieving 50 cheaply and reranking them expensively buys most of the accuracy at a fraction of the cost."},{"slug":"embedding-images-and-audio","title":"One space for pictures and words","url":"https://addaly.com/learn/hugging-face/embedding-images-and-audio","api":"https://addaly.com/api/lesson/hugging-face/embedding-images-and-audio","minutes":8,"keyIdea":"CLIP-style models place images and their captions in one shared space, so photographs become searchable by typed sentences and classifiable with no training, while the same shape does not mean the same space, and mixing vectors from different models in one index produces confident nonsense."},{"slug":"measuring-your-retrieval","title":"Thirty questions, and the numbers they give you","url":"https://addaly.com/learn/hugging-face/measuring-your-retrieval","api":"https://addaly.com/api/lesson/hugging-face/measuring-your-retrieval","minutes":9,"keyIdea":"Thirty questions of your own with known correct chunks turn every dial in a retrieval system into a measurable decision, and the failures sort into a short list of distinct causes, but a set that size detects fifteen-point differences and not three-point ones, so it should settle big choices and never small ones."}]},{"slug":"training-with-the-stack","title":"Training and adapting, with the libraries the Hub is built on","summary":"Adapting a model on the Hub is a different job from training one from scratch, and the libraries reflect that: Trainer for the loop, PEFT for adapters that are a thousandth the size of the model, TRL for instruction and preference tuning, and the Hub itself as durable storage for a run that will be interrupted. This block starts by arguing you probably should not fine-tune, then teaches you to do it properly when you should.","outcome":"Decide from evidence whether a task needs fine-tuning at all, run a LoRA or QLoRA adaptation with Trainer or SFTTrainer on a single free GPU, read a loss curve well enough to name what is wrong, and publish an adapter a stranger can apply to the base model.","lessons":[{"slug":"when-not-to-fine-tune","title":"Three cheaper things to try first","url":"https://addaly.com/learn/hugging-face/when-not-to-fine-tune","api":"https://addaly.com/api/lesson/hugging-face/when-not-to-fine-tune","minutes":8,"keyIdea":"Fine-tuning teaches behaviour and retrieval supplies knowledge, so a gap made of facts should never be trained into weights, and prompting, a larger model and a small specialised classifier all sit between the problem and a training run that will need redoing when the base model is replaced."},{"slug":"the-trainer-api","title":"Trainer, and what it saves you writing","url":"https://addaly.com/learn/hugging-face/the-trainer-api","api":"https://addaly.com/api/lesson/hugging-face/the-trainer-api","minutes":9,"keyIdea":"`Trainer` implements the loop, scheduling, mixed precision, checkpointing and resumption that are individually easy and collectively error-prone, and the two arguments that most often decide whether a run is usable are `id2label` at construction and `resume_from_checkpoint` on restart."},{"slug":"training-arguments-that-matter","title":"The six arguments worth understanding","url":"https://addaly.com/learn/hugging-face/training-arguments-that-matter","api":"https://addaly.com/api/lesson/hugging-face/training-arguments-that-matter","minutes":9,"keyIdea":"Learning rate sets the scale of everything and differs tenfold between full fine-tuning and LoRA, while gradient accumulation buys a large effective batch on small hardware and `gradient_checkpointing`, 8-bit optimisers and shorter sequences are the ordered responses to running out of memory."},{"slug":"lora-and-peft","title":"LoRA: training 0.1% of the parameters","url":"https://addaly.com/learn/hugging-face/lora-and-peft","api":"https://addaly.com/api/lesson/hugging-face/lora-and-peft","minutes":9,"keyIdea":"LoRA freezes the base weights and learns a low-rank update, so optimiser state shrinks by the same hundredfold factor and the result is a few megabytes tied to one exact base model, which is what makes fine-tuning a 7B model on free hardware possible at all."},{"slug":"qlora-on-one-card","title":"QLoRA, and fine-tuning a 7B model on a free GPU","url":"https://addaly.com/learn/hugging-face/qlora-on-one-card","api":"https://addaly.com/api/lesson/hugging-face/qlora-on-one-card","minutes":8,"keyIdea":"QLoRA keeps a frozen base in 4-bit and trains precise adapters over it, dequantizing per matrix multiply, so a 7B model fits a free GPU at the cost of speed rather than memory, and `prepare_model_for_kbit_training` is the line whose absence makes training quietly fail instead of raising."},{"slug":"trl-and-instruction-tuning","title":"TRL, and training on conversations","url":"https://addaly.com/learn/hugging-face/trl-and-instruction-tuning","api":"https://addaly.com/api/lesson/hugging-face/trl-and-instruction-tuning","minutes":9,"keyIdea":"`SFTTrainer` renders chat templates, masks the prompt, packs and truncates conversations for you, so the remaining decisions are about data: a few hundred diverse, well-written examples in the messages format beat tens of thousands of scraped ones, and the register of your responses becomes the model's register."},{"slug":"tracking-and-checkpointing","title":"Watching a run you cannot sit next to","url":"https://addaly.com/learn/hugging-face/tracking-and-checkpointing","api":"https://addaly.com/api/lesson/hugging-face/tracking-and-checkpointing","minutes":8,"keyIdea":"Log training loss, validation metric, learning rate and gradient norm somewhere that outlives the machine, checkpoint with `hub_strategy=\"checkpoint\"` so a killed session costs minutes, and resume with `resume_from_checkpoint` because reloading only the weights restarts the learning-rate schedule."},{"slug":"what-goes-wrong-in-training","title":"Loss is NaN, memory is gone, nothing is learning","url":"https://addaly.com/learn/hugging-face/what-goes-wrong-in-training","api":"https://addaly.com/api/lesson/hugging-face/what-goes-wrong-in-training","minutes":9,"keyIdea":"Training failures sort into memory, NaN, flat loss, good loss with a useless model, and a training–inference mismatch, and the test that separates a pipeline bug from a data problem is deliberately overfitting ten examples, because a model that cannot memorise ten rows is not learning at all."},{"slug":"publishing-an-adapter","title":"Shipping the thing you trained","url":"https://addaly.com/learn/hugging-face/publishing-an-adapter","api":"https://addaly.com/api/lesson/hugging-face/publishing-an-adapter","minutes":8,"keyIdea":"Publish the adapter rather than a merged republication of somebody else's weights, record the base model, training configuration and a measured result against a baseline in the card, and keep the dataset and evaluation set, because the adapter expires when its base is superseded and the data does not."}]},{"slug":"depending-on-it-and-publishing","title":"Depending on it, and publishing so others can","summary":"The last block is about the parts that decide whether your work survives contact with other people: what a licence actually permits and where the law is genuinely unsettled, how to judge a model with your own examples rather than a leaderboard, where inference should run and what it costs, what a card must contain to be auditable, how to contribute back, and how to pin everything so the thing you shipped still works next year.","outcome":"State what a model's licence permits for your intended use and where the question is unresolved rather than answered, choose between a provider, a dedicated endpoint and your own hardware on stated cost and privacy grounds, judge a model with thirty examples of your own, and publish work a stranger can audit and reproduce.","lessons":[{"slug":"tokens-and-gates","title":"A token in a public Space is a token you have given away","url":"https://addaly.com/learn/hugging-face/tokens-and-gates","api":"https://addaly.com/api/lesson/hugging-face/tokens-and-gates","minutes":8,"keyIdea":"Scope tokens as narrowly as the job allows, keep them in environment variables and Space secrets rather than in code, and revoke on suspicion rather than reasoning about whether a leak was seen."},{"slug":"licences-in-practice","title":"What the licence tag does and does not settle","url":"https://addaly.com/learn/hugging-face/licences-in-practice","api":"https://addaly.com/api/lesson/hugging-face/licences-in-practice","minutes":10,"keyIdea":"A fine-tune inherits its base model's terms however its own tag reads, so licence checking means following `base_model` to the root, and the questions the licence does not answer, about training data and output ownership, are genuinely unresolved and differ by country rather than merely being undocumented."},{"slug":"leaderboards-lie-a-little","title":"The leaderboard is not measuring your task","url":"https://addaly.com/learn/hugging-face/leaderboards-lie-a-little","api":"https://addaly.com/api/lesson/hugging-face/leaderboards-lie-a-little","minutes":9,"keyIdea":"A leaderboard narrows the field and cannot pick the winner, because contamination, selective reporting and style effects all sit between a public score and your task: thirty of your own examples decide it."},{"slug":"thirty-examples-of-your-own","title":"The evaluation that decides it","url":"https://addaly.com/learn/hugging-face/thirty-examples-of-your-own","api":"https://addaly.com/api/lesson/hugging-face/thirty-examples-of-your-own","minutes":9,"keyIdea":"A leaderboard narrows the field and thirty examples of your own decide it, because only your set contains your languages, formats and hard cases, and at that size it reliably detects large differences and must never be used to justify small ones."},{"slug":"inference-providers","title":"Renting the compute instead of owning it","url":"https://addaly.com/learn/hugging-face/inference-providers","api":"https://addaly.com/api/lesson/hugging-face/inference-providers","minutes":8,"keyIdea":"The Hub routes inference to third-party providers behind one OpenAI-compatible interface, and the choice between serverless, a dedicated endpoint, your own server and the user's device turns on token volume against GPU utilisation, with the crossover much higher than teams assume and privacy deciding it outright for sensitive data."},{"slug":"serving-it-yourself","title":"When transformers stops being the right server","url":"https://addaly.com/learn/hugging-face/serving-it-yourself","api":"https://addaly.com/api/lesson/hugging-face/serving-it-yourself","minutes":8,"keyIdea":"Purpose-built servers beat a transformers loop structurally rather than by tuning (continuous batching keeps the GPU full, paged attention stops the KV cache fragmenting, and prefix caching reuses a shared system prompt) and unlike at training time, quantization under these stacks buys speed as well as memory."},{"slug":"publishing-your-own","title":"Publish it so a stranger can use it without writing to you","url":"https://addaly.com/learn/hugging-face/publishing-your-own","api":"https://addaly.com/api/lesson/hugging-face/publishing-your-own","minutes":10,"keyIdea":"A card with a runnable snippet, a named limitation and a deliberate licence makes your work usable by strangers, and everything you would regret publishing must be decided before the first push, because copies survive deletion."},{"slug":"the-card-that-passes-review","title":"Writing a card somebody can audit","url":"https://addaly.com/learn/hugging-face/the-card-that-passes-review","api":"https://addaly.com/api/lesson/hugging-face/the-card-that-passes-review","minutes":9,"keyIdea":"A card written for an auditor (documented data, stated intended and out-of-scope use, measured evaluation against a baseline with per-group results, a specific named limitation and a contact) is also the card a careful user needs, and it is the practice that survives whatever the specific regulation turns out to be."},{"slug":"contributing-back","title":"Pull requests, discussions and being useful","url":"https://addaly.com/learn/hugging-face/contributing-back","api":"https://addaly.com/api/lesson/hugging-face/contributing-back","minutes":8,"keyIdea":"Any Hub repository accepts pull requests and proposals can be loaded with `revision=\"refs/pr/N\"` before merging, so the highest-value contributions are small (a missing licence or chat template, a safetensors conversion, a card translation, a named limitation) and the discussions tab usually holds the documentation the card does not."},{"slug":"pinning-and-keeping-up","title":"Still working next year","url":"https://addaly.com/learn/hugging-face/pinning-and-keeping-up","api":"https://addaly.com/api/lesson/hugging-face/pinning-and-keeping-up","minutes":9,"keyIdea":"Four things move independently under a working system (the model's `main` branch, the libraries, the platform defaults and your own corpus) so pin every `from_pretrained` to a revision, pin dependency versions, read deprecation warnings as dated outage notices, and mirror any model you genuinely cannot lose."}]}]},{"slug":"video-editing","title":"Editing Video","tagline":"Cuts, sound, colour and export, taught on DaVinci Resolve, which costs nothing.","description":"A working course in the craft of editing. Why your first cut runs two seconds long, how proxies let an ordinary laptop edit 4K, the grammar of cutting on action and J and L cuts, why clean audio matters more than a sharp picture, correction before grading using scopes rather than eyes, captions for a muted feed, codecs and bitrate explained properly, and a folder structure that still opens six months later.","level":"beginner","track":"create","url":"https://addaly.com/learn/video-editing","lessons":77,"minutes":679,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/video-editing.pdf","pages":450,"bytes":5027918,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/video-editing.pdf","cover":"https://addaly.com/textbooks/look/video-editing/1.webp?v=2026-10-07-5027918"},"film":null,"modules":[{"slug":"ingest-and-setup","title":"Getting the footage into a state you can work with","summary":"An edit is decided before the first cut. This block is about the hour between the card coming out of the camera and the first clip landing on a timeline: what the camera actually wrote to the file, which project settings cannot be changed later, how to copy footage so you know the copy is intact, and how to watch an hour of material in a way that leaves you able to find any moment in it. It ends with the two things that break a project on day one: footage that arrived damaged, and phone video whose frame rate is a lie.","outcome":"Set up a project whose frame rate, resolution, colour handling and media layout are chosen from the footage rather than from a default, offload and verify a card so you can prove the copy is byte-identical, and diagnose a clip that drifts out of sync by naming the property of the source file that causes it.","lessons":[{"slug":"timeline-and-proxies","title":"Your laptop is probably not too slow","url":"https://addaly.com/learn/video-editing/timeline-and-proxies","api":"https://addaly.com/api/lesson/video-editing/timeline-and-proxies","minutes":10,"keyIdea":"Camera files store frames as differences, not pictures, so edit a proxy and let the export go back to the original."},{"slug":"what-a-camera-file-is","title":"What the camera actually wrote to the card","url":"https://addaly.com/learn/video-editing/what-a-camera-file-is","api":"https://addaly.com/api/lesson/video-editing/what-a-camera-file-is","minutes":10,"keyIdea":"A camera file carries four fixed decisions (whole frames or differences, how much colour was kept, how many brightness levels, and how many bits per second) and each one sets a hard limit on what the edit can do later."},{"slug":"frame-rate-and-shutter","title":"Frame rate, shutter, and the flicker in the light","url":"https://addaly.com/learn/video-editing/frame-rate-and-shutter","api":"https://addaly.com/api/lesson/video-editing/frame-rate-and-shutter","minutes":9,"keyIdea":"Pick one frame rate from the mains frequency where you shoot, set every camera and the timeline to it, and keep shutter at roughly 180 degrees, because mismatched rates cost you frames at every conversion and mismatched shutter costs you flicker you cannot remove."},{"slug":"resolution-and-the-frame","title":"Resolution, aspect ratio, and having room to move","url":"https://addaly.com/learn/video-editing/resolution-and-the-frame","api":"https://addaly.com/api/lesson/video-editing/resolution-and-the-frame","minutes":8,"keyIdea":"Shoot larger than you deliver so the edit has room to punch in, stabilise and reframe, set one image-scaling behaviour at the start of the project, and keep everything that must be read inside 90 per cent of the frame."},{"slug":"project-settings-that-bite","title":"The settings you cannot change later","url":"https://addaly.com/learn/video-editing/project-settings-that-bite","api":"https://addaly.com/api/lesson/video-editing/project-settings-that-bite","minutes":8,"keyIdea":"Frame rate, image scaling and colour management are decided before the first import and are expensive to reverse, so configure a template project once and duplicate it rather than choosing settings under time pressure."},{"slug":"offload-and-checksums","title":"Copying a card so you know the copy is good","url":"https://addaly.com/learn/video-editing/offload-and-checksums","api":"https://addaly.com/api/lesson/video-editing/offload-and-checksums","minutes":8,"keyIdea":"A drag-and-drop copy reports success without reading anything back, so verify irreplaceable footage with a checksum manifest at offload and keep the material in two places on two devices before any card is formatted."},{"slug":"logging-and-selects","title":"Watching an hour so you can find any second of it","url":"https://addaly.com/learn/video-editing/logging-and-selects","api":"https://addaly.com/api/lesson/video-editing/logging-and-selects","minutes":9,"keyIdea":"Watch everything once before cutting anything, marking moments with written notes and building a selects timeline, because editing is a search problem and you cannot search material you never formed a memory of."},{"slug":"syncing-and-multicam","title":"Two cameras, one microphone, one sync point","url":"https://addaly.com/learn/video-editing/syncing-and-multicam","api":"https://addaly.com/api/lesson/video-editing/syncing-and-multicam","minutes":9,"keyIdea":"Give every take one sharp sync point at the start, use waveform sync as a first pass and check it at a hard consonant, and convert variable-frame-rate phone footage to constant rate at offload because drift is usually the file, not the clocks."},{"slug":"transcript-first-editing","title":"Editing the words before you touch a picture","url":"https://addaly.com/learn/video-editing/transcript-first-editing","api":"https://addaly.com/api/lesson/video-editing/transcript-first-editing","minutes":9,"keyIdea":"For speech-led work, transcribe everything and build the structure in text with timecodes attached, because reading is four times faster than listening and rearranging a paragraph costs a keystroke where rearranging a timeline costs a minute."},{"slug":"when-the-footage-is-broken","title":"When the footage arrives broken","url":"https://addaly.com/learn/video-editing/when-the-footage-is-broken","api":"https://addaly.com/api/lesson/video-editing/when-the-footage-is-broken","minutes":9,"keyIdea":"Most broken footage falls into four fixable classes (variable frame rate, an unsupported codec, a missing index, and a mis-mapped audio channel) and the ones that are genuinely unrecoverable are clipped highlights, clipped audio and missed focus, which are worth naming to a client on day one."}]},{"slug":"the-cut","title":"The cut itself","summary":"One join between two shots, examined properly. This block covers the four trims that move a cut point and what each one costs, the six things a cut has to satisfy and the order to sacrifice them in, how shot length becomes rhythm, how to build a sequence out of an action, the working method for a dialogue scene, and the repairs available when the coverage you needed was never filmed. It ends where the viewer actually decides whether to stay.","outcome":"Place and trim a cut you can defend frame by frame (naming the moment it lands on, the trim operation you used and what that operation did to everything downstream) and diagnose a cut that feels wrong by identifying which of the six continuities the eye lost.","lessons":[{"slug":"too-late-to-cut","title":"Your first cut is two seconds late","url":"https://addaly.com/learn/video-editing/too-late-to-cut","api":"https://addaly.com/api/lesson/video-editing/too-late-to-cut","minutes":9,"keyIdea":"Trim every shot to the frame where it stops giving new information, and cut to the reaction more often than you think."},{"slug":"grammar-of-cuts","title":"A bad cut is felt before it is seen","url":"https://addaly.com/learn/video-editing/grammar-of-cuts","api":"https://addaly.com/api/lesson/video-editing/grammar-of-cuts","minutes":10,"keyIdea":"Cut on movement, keep the camera on one side of the line, and let sound cross the join before the picture does."},{"slug":"trimming-tools","title":"Ripple, roll, slip and slide","url":"https://addaly.com/learn/video-editing/trimming-tools","api":"https://addaly.com/api/lesson/video-editing/trimming-tools","minutes":10,"keyIdea":"Four named operations move a cut (ripple changes duration and shifts everything downstream, roll moves the join only, slip changes the content inside a clip, slide changes its position) so decide which question you are asking before you touch the edge."},{"slug":"the-rule-of-six","title":"Six things a cut has to satisfy, in order","url":"https://addaly.com/learn/video-editing/the-rule-of-six","api":"https://addaly.com/api/lesson/video-editing/the-rule-of-six","minutes":9,"keyIdea":"A cut can satisfy six things (emotion, story, rhythm, eye-trace, screen plane and physical space) and when they conflict, the audience forgives a broken geography far more readily than a wrong emotional beat."},{"slug":"pace-and-rhythm","title":"Pace is a pattern, and you can count it","url":"https://addaly.com/learn/video-editing/pace-and-rhythm","api":"https://addaly.com/api/lesson/video-editing/pace-and-rhythm","minutes":9,"keyIdea":"Average shot length gives you a number for pace, but rhythm lives in the variation around it: put long shots where the viewer should settle and short ones where they should be pushed, and cut speech at the breath rather than inside the phrase."},{"slug":"building-a-sequence","title":"Building a sequence out of an action","url":"https://addaly.com/learn/video-editing/building-a-sequence","api":"https://addaly.com/api/lesson/video-editing/building-a-sequence","minutes":9,"keyIdea":"A sequence is built out of fragments the viewer stitches into a continuous action, so shoot every action whole from three distances and join the shots with 'but' and 'therefore' rather than 'and then'."},{"slug":"cutting-a-dialogue-scene","title":"Cutting a conversation, step by step","url":"https://addaly.com/learn/video-editing/cutting-a-dialogue-scene","api":"https://addaly.com/api/lesson/video-editing/cutting-a-dialogue-scene","minutes":10,"keyIdea":"Cut a conversation as audio first, move every join to a breath, lay room tone underneath, and only then decide what the viewer looks at, which is the listener at least as often as the speaker."},{"slug":"cutaways-and-inserts","title":"The shot that buys you everything","url":"https://addaly.com/learn/video-editing/cutaways-and-inserts","api":"https://addaly.com/api/lesson/video-editing/cutaways-and-inserts","minutes":8,"keyIdea":"Cutaways and inserts are not decoration: they are the licence to remove time, hide a mistake and change rhythm, and an interview needs roughly one usable one for every thirty seconds of finished film."},{"slug":"no-coverage-repairs","title":"Repairs for coverage you never shot","url":"https://addaly.com/learn/video-editing/no-coverage-repairs","api":"https://addaly.com/api/lesson/video-editing/no-coverage-repairs","minutes":9,"keyIdea":"One camera yields several usable shots through punch-ins, reframes, ramps, freezes, stills and graphics, but each repair has a cost, and a missing reverse angle of a real person is not among the things any of them can supply."},{"slug":"the-first-ten-seconds","title":"Where people decide to stay","url":"https://addaly.com/learn/video-editing/the-first-ten-seconds","api":"https://addaly.com/api/lesson/video-editing/the-first-ten-seconds","minutes":8,"keyIdea":"Viewers answer 'what is this and is it for me' in the first few seconds whether or not you have told them, so state the subject immediately, open on a real image rather than black, and pay off whatever the opening promised."}]},{"slug":"structure","title":"Structure: deciding what the film is","summary":"Between a folder of good material and a film somebody watches to the end lies a decision about what the piece is actually about. This block is the part of editing that happens away from the timeline: naming the spine in one sentence, choosing a shape for the material, cutting an interview without misrepresenting the person in it, running a screening that produces useful notes, removing the shot you love, writing narration that does not describe what is already on screen, and using other people's footage without pretending the law is settled.","outcome":"Take unstructured material to a defensible rough cut: a spine stated in one sentence, a chosen shape with a reason, an interview compressed without changing what the speaker meant, a screening run to produce specific notes, and a documented position on every piece of third-party material in it.","lessons":[{"slug":"finding-the-spine","title":"One sentence, or you do not have a film","url":"https://addaly.com/learn/video-editing/finding-the-spine","api":"https://addaly.com/api/lesson/video-editing/finding-the-spine","minutes":8,"keyIdea":"Write what the piece is about as one sentence containing a question or a change, and hold every uncertain clip against it, because the sentence is what makes the decision about a good shot that does not belong."},{"slug":"structures-that-work","title":"Six shapes, and what each one costs","url":"https://addaly.com/learn/video-editing/structures-that-work","api":"https://addaly.com/api/lesson/video-editing/structures-that-work","minutes":9,"keyIdea":"Chronology is a choice rather than a default, and each shape has a specific failure: thematic sections give the viewer a clean exit at every join, lists have no momentum, and essays become lectures unless every claim has evidence on screen."},{"slug":"interview-editing-honestly","title":"Compressing what somebody said without changing what they meant","url":"https://addaly.com/learn/video-editing/interview-editing-honestly","api":"https://addaly.com/api/lesson/video-editing/interview-editing-honestly","minutes":10,"keyIdea":"You may change what somebody said and not what they meant, so removing a qualification, joining clauses from different answers or cutting the 'no' are fabrications regardless of how clean the join is."},{"slug":"the-assembly-and-the-rough-cut","title":"The stages, and how long each really takes","url":"https://addaly.com/learn/video-editing/the-assembly-and-the-rough-cut","api":"https://addaly.com/api/lesson/video-editing/the-assembly-and-the-rough-cut","minutes":8,"keyIdea":"Assembly, rough cut, fine cut, lock and finishing exist because work done in one stage is thrown away if the previous stage was not finished, and unscripted material realistically costs three to five hours of editing per finished minute before any finishing."},{"slug":"the-rough-cut-screening","title":"Watching it with someone who has not seen it","url":"https://addaly.com/learn/video-editing/the-rough-cut-screening","api":"https://addaly.com/api/lesson/video-editing/the-rough-cut-screening","minutes":8,"keyIdea":"You cannot watch your own edit because you know what is coming, so run a silent, uninterrupted screening with a stranger to the material and treat every note as a symptom report rather than a diagnosis."},{"slug":"killing-the-shot-you-love","title":"The twenty per cent that has to go","url":"https://addaly.com/learn/video-editing/killing-the-shot-you-love","api":"https://addaly.com/api/lesson/video-editing/killing-the-shot-you-love","minutes":8,"keyIdea":"A first fine cut is typically a fifth too long, and the material to remove is whatever is justified by your knowledge of the project rather than by its effect on a stranger, so park it rather than deleting it and watch the two versions."},{"slug":"narration-and-voice-over","title":"Narration that is not a description of the picture","url":"https://addaly.com/learn/video-editing/narration-and-voice-over","api":"https://addaly.com/api/lesson/video-editing/narration-and-voice-over","minutes":9,"keyIdea":"Cut the picture first and write narration into the gaps it leaves, supplying only what the picture cannot show, and read every line aloud while writing, because anything you stumble over the listener will stumble over too."},{"slug":"one-story-two-lengths","title":"One shoot, several finished pieces","url":"https://addaly.com/learn/video-editing/one-story-two-lengths","api":"https://addaly.com/api/lesson/video-editing/one-story-two-lengths","minutes":8,"keyIdea":"A short is not a trimmed long piece but a separate cut with its own spine, opening on the moment rather than the setup, and the cheapest way to get both is to compose and lock the long version first with the vertical crop already in mind."},{"slug":"archive-and-other-peoples-footage","title":"Using material you did not shoot","url":"https://addaly.com/learn/video-editing/archive-and-other-peoples-footage","api":"https://addaly.com/api/lesson/video-editing/archive-and-other-peoples-footage","minutes":10,"keyIdea":"Third-party material is licensed, openly licensed, permitted or covered by a statutory exception, and because exceptions differ fundamentally between fair use and enumerated fair dealing, the widely repeated 'ten seconds is fine' rules have no basis anywhere."}]},{"slug":"sound","title":"Sound, which is most of it","summary":"Audiences leave over sound long before they leave over pictures. This block builds a mix from the ground up: a track layout that survives a revision, the three or four EQ moves that make speech intelligible, what a compressor actually does to a voice and what it does to the noise between words, how loudness is measured now that every platform normalises, the ambience and spot effects that make a scene exist, matching a replaced line to the room it belongs in, and the honest list of audio faults that cannot be repaired.","outcome":"Deliver a mix a stranger can follow on phone speakers: dialogue at a stated loudness with EQ and compression you can justify, continuous ambience under every join, music ducked by a mechanism you chose, and a measured integrated loudness and true peak rather than a guessed level.","lessons":[{"slug":"sound-is-most-of-it","title":"Bad sound kills a good picture","url":"https://addaly.com/learn/video-editing/sound-is-most-of-it","api":"https://addaly.com/api/lesson/video-editing/sound-is-most-of-it","minutes":11,"keyIdea":"Get the mic within 30 cm, keep peaks near -6 dBFS, record thirty seconds of room tone, and use less noise reduction than you want to."},{"slug":"music-and-the-claim","title":"The music you found is not free","url":"https://addaly.com/learn/video-editing/music-and-the-claim","api":"https://addaly.com/api/lesson/video-editing/music-and-the-claim","minutes":9,"keyIdea":"Every track needs a licence you can produce on demand, and \"royalty free\" is a pricing model, not permission."},{"slug":"tracks-busses-and-stems","title":"A track layout that survives a revision","url":"https://addaly.com/learn/video-editing/tracks-busses-and-stems","api":"https://addaly.com/api/lesson/video-editing/tracks-busses-and-stems","minutes":8,"keyIdea":"Organise audio into dialogue, effects and music busses so a change is one fader rather than forty clips, and level clips with clip gain before any compressor sees them, because a compressor responds to whatever level arrives at it."},{"slug":"eq-for-speech","title":"Four EQ moves that make speech intelligible","url":"https://addaly.com/learn/video-editing/eq-for-speech","api":"https://addaly.com/api/lesson/video-editing/eq-for-speech","minutes":9,"keyIdea":"Four moves cover most speech (a high-pass around 80 to 100 Hz, a notch at the mains frequency and its harmonics, a small cut in the 300 to 500 Hz boxy region and a gentle lift around 2 to 3 kHz) applied subtractively before any compressor sees the signal."},{"slug":"compression-on-a-voice","title":"What a compressor does, and what it does to the gaps","url":"https://addaly.com/learn/video-editing/compression-on-a-voice","api":"https://addaly.com/api/lesson/video-editing/compression-on-a-voice","minutes":9,"keyIdea":"Set dialogue compression by the gain reduction meter (3 to 6 dB on loud words, returning to zero between phrases) and remember that make-up gain raises the noise floor too, so a hissy recording can take less compression than a clean one."},{"slug":"loudness-and-lufs","title":"Loudness, measured rather than guessed","url":"https://addaly.com/learn/video-editing/loudness-and-lufs","api":"https://addaly.com/api/lesson/video-editing/loudness-and-lufs","minutes":9,"keyIdea":"Loudness is an energy measurement over time, not a peak, so mix to roughly the destination's integrated LUFS target with true peak at -1 dBTP: mastering louder than the target just means the platform turns you down after you destroyed the dynamics."},{"slug":"effects-and-ambience","title":"The sounds nobody notices and everybody misses","url":"https://addaly.com/learn/video-editing/effects-and-ambience","api":"https://addaly.com/api/lesson/video-editing/effects-and-ambience","minutes":8,"keyIdea":"A continuous ambience bed fills every hole your cuts made in the background at once, and spot effects only need to cover the events the viewer can see happening, layered two or three deep and placed a frame early rather than a frame late."},{"slug":"matching-the-room","title":"Making a replaced line sound like it belongs","url":"https://addaly.com/learn/video-editing/matching-the-room","api":"https://addaly.com/api/lesson/video-editing/matching-the-room","minutes":8,"keyIdea":"A replaced line sounds wrong because its space is wrong, so match the noise floor first, then the EQ, then add far less reverb than sounds like reverb, and record an impulse response with one clap at every location, because de-reverb is much harder than matching."},{"slug":"repairing-bad-audio","title":"What can be repaired, and what cannot","url":"https://addaly.com/learn/video-editing/repairing-bad-audio","api":"https://addaly.com/api/lesson/video-editing/repairing-bad-audio","minutes":9,"keyIdea":"Hum, clicks, plosives and level faults are fully repairable; noise, reverb and mild clipping are partly repairable up to the point where the artefact is worse than the fault; and speech under the noise floor or heavily clipped is gone, which is worth saying to a client on day one."},{"slug":"mixing-on-what-you-have","title":"Mixing when you do not have a studio","url":"https://addaly.com/learn/video-editing/mixing-on-what-you-have","api":"https://addaly.com/api/lesson/video-editing/mixing-on-what-you-have","minutes":8,"keyIdea":"Check every mix on at least three systems and fix only the faults that appear on more than one, because each system lies in its own direction, and the low-volume test tells you more about balance than any meter."}]},{"slug":"colour","title":"Colour, correction before grade","summary":"Colour is the area where the free tool is not a compromise: DaVinci Resolve's colour page is what features are graded on and it costs nothing. This block works through it in the order the work actually happens: the node graph that holds your decisions, the primary controls and what each one touches, curves, the shot-matching workflow that makes a scene belong to itself, keys and windows for changing one part of a frame, what a colour-managed pipeline is doing to your image, how a look is built rather than downloaded, and the levels check that stops an export looking washed out.","outcome":"Take a scene of mismatched shots to a neutral, matched baseline verified on the waveform and parade, apply one look across all of it, and explain why the same LUT lands differently on a log clip and a Rec.709 clip.","lessons":[{"slug":"correct-before-you-grade","title":"Make it right, then make it feel like something","url":"https://addaly.com/learn/video-editing/correct-before-you-grade","api":"https://addaly.com/api/lesson/video-editing/correct-before-you-grade","minutes":10,"keyIdea":"Neutralise and match every shot against the scopes first, because a look applied to unmatched shots produces unmatched results."},{"slug":"the-node-graph","title":"Why grading happens in a graph","url":"https://addaly.com/learn/video-editing/the-node-graph","api":"https://addaly.com/api/lesson/video-editing/the-node-graph","minutes":8,"keyIdea":"A node graph lets you choose what each adjustment applies to and in what order, so correct first and style after, name every node, and use the still store to carry one shot's grade across a whole scene."},{"slug":"lift-gamma-gain","title":"The three wheels, and what each one touches","url":"https://addaly.com/learn/video-editing/lift-gamma-gain","api":"https://addaly.com/api/lesson/video-editing/lift-gamma-gain","minutes":8,"keyIdea":"Gain multiplies so it sets the white point, lift adds so it sets the black point, gamma is a power curve so it moves the mid-tones with both ends pinned: set them in that order and read every move on the waveform."},{"slug":"curves-and-contrast","title":"Curves, and the shape of contrast","url":"https://addaly.com/learn/video-editing/curves-and-contrast","api":"https://addaly.com/api/lesson/video-editing/curves-and-contrast","minutes":8,"keyIdea":"A curve maps input values to output values, so a gentle S steepens the mid-tones where faces live and a reverse S produces the faded film look, and Lum versus Sat pulled down in the shadows stops dark noise reading as coloured."},{"slug":"matching-shots","title":"Making a scene belong to itself","url":"https://addaly.com/learn/video-editing/matching-shots","api":"https://addaly.com/api/lesson/video-editing/matching-shots","minutes":9,"keyIdea":"Grade one hero shot completely and bring every other shot to it on a split wipe, matching black point, white point, mid-tone, balance and saturation in that order on the scopes, and judge the result at playback speed, not frame by frame."},{"slug":"secondaries-and-windows","title":"Changing one part of the frame","url":"https://addaly.com/learn/video-editing/secondaries-and-windows","api":"https://addaly.com/api/lesson/video-editing/secondaries-and-windows","minutes":9,"keyIdea":"Qualifiers select by colour and windows by shape, both feeding a node's key, and because a qualifier builds its mask from chroma, 4:2:0 footage yields a mask at a quarter the resolution of the picture, which no setting repairs."},{"slug":"colour-management","title":"Colour spaces, and why it looks different in the browser","url":"https://addaly.com/learn/video-editing/colour-management","api":"https://addaly.com/api/lesson/video-editing/colour-management","minutes":9,"keyIdea":"A pixel value only means a colour once you know the space, white point and transfer function, so the washed-out export is usually a full-range file being read as video range, and the browser mismatch is usually gamma 2.2 against 2.4."},{"slug":"building-a-look","title":"Building a look instead of downloading one","url":"https://addaly.com/learn/video-editing/building-a-look","api":"https://addaly.com/api/lesson/video-editing/building-a-look","minutes":8,"keyIdea":"A look is five deliberate decisions (contrast shape, a shadow-highlight colour split, saturation shaped by luminance, a hue shift or two, and grain) so build and save your own rather than applying a LUT that expects a log image it is not receiving."},{"slug":"legal-levels-and-qc","title":"Legal levels, and the check before you export","url":"https://addaly.com/learn/video-editing/legal-levels-and-qc","api":"https://addaly.com/api/lesson/video-editing/legal-levels-and-qc","minutes":8,"keyIdea":"Broadcast-legal means values between 16 and 235 in 8-bit video range, readable as lines on the waveform. And every quality-control check happens on the exported file in a normal player, because several classes of error exist only in the export."}]},{"slug":"text-and-graphics","title":"Text, captions and graphics","summary":"Text on video has constraints that text on a page does not: it moves, it sits over a background that changes every frame, it goes through a compressor that hates thin strokes, and most of the people reading it are doing so on a phone with the sound off. This block covers sizing and contrast for that reality, name supers and credits, keyframing inside a timeline, what free tools replace After Effects with, subtitle files as files, the specific breakage that Indic and other complex scripts suffer in video software, screen recordings, and putting numbers on screen honestly.","outcome":"Put text on a moving picture that survives platform compression on a phone (sized and weighted against a stated safe area, timed to a read-aloud test, animated with easing you chose) and ship both burnt-in captions and a sidecar subtitle file, including in a script your editor does not shape correctly.","lessons":[{"slug":"captions-and-titles","title":"Most of your audience has the sound off","url":"https://addaly.com/learn/video-editing/captions-and-titles","api":"https://addaly.com/api/lesson/video-editing/captions-and-titles","minutes":9,"keyIdea":"Burn captions in for feeds and upload a real subtitle file as well, and never publish an auto-transcript you have not read."},{"slug":"type-on-moving-pictures","title":"Type that survives a phone and a compressor","url":"https://addaly.com/learn/video-editing/type-on-moving-pictures","api":"https://addaly.com/api/lesson/video-editing/type-on-moving-pictures","minutes":9,"keyIdea":"Size text as a percentage of frame height with a floor around 2.5 per cent, never use a light weight because the compressor destroys thin strokes, give every line its own contrast mechanism against a changing background, and hold it long enough to read aloud twice."},{"slug":"name-supers-and-credits","title":"Names, supers and the end of the film","url":"https://addaly.com/learn/video-editing/name-supers-and-credits","api":"https://addaly.com/api/lesson/video-editing/name-supers-and-credits","minutes":8,"keyIdea":"A super answers 'who is this' two or three seconds after somebody starts speaking, its second line says why they matter rather than their job title, and every super in a piece comes from one duplicated template, while credits discharge real licence obligations from your log."},{"slug":"animating-in-the-timeline","title":"Keyframes, curves and the retime graph","url":"https://addaly.com/learn/video-editing/animating-in-the-timeline","api":"https://addaly.com/api/lesson/video-editing/animating-in-the-timeline","minutes":8,"keyIdea":"Two keyframes and an interpolation is all timeline animation is, so ease every move because nothing physical changes value at a constant rate, and remember that a speed ramp needs easing on the retime frame graph rather than steps on the speed graph."},{"slug":"motion-graphics-without-after-effects","title":"Graphics without a subscription","url":"https://addaly.com/learn/video-editing/motion-graphics-without-after-effects","api":"https://addaly.com/api/lesson/video-editing/motion-graphics-without-after-effects","minutes":9,"keyIdea":"Fusion inside Resolve, Blender for 3D, Inkscape for vector artwork and a browser for data-driven graphics cover every free route to motion graphics, and one title template you made and reuse beats a downloaded pack everybody else is also using."},{"slug":"subtitle-files-in-practice","title":"Subtitle files, as files","url":"https://addaly.com/learn/video-editing/subtitle-files-in-practice","api":"https://addaly.com/api/lesson/video-editing/subtitle-files-in-practice","minutes":8,"keyIdea":"A subtitle file is plain text with an index, two timecodes and up to two lines, which means find-and-replace fixes a recurring error in one action, and a constant sync offset can be shifted while a growing one means the video's frame rate needs conforming."},{"slug":"subtitles-in-indian-languages","title":"When your editor cannot render the script","url":"https://addaly.com/learn/video-editing/subtitles-in-indian-languages","api":"https://addaly.com/api/lesson/video-editing/subtitles-in-indian-languages","minutes":9,"keyIdea":"Indic and Arabic scripts need a shaping engine to reorder and combine glyphs, and many video editors do not have one, so test with a conjunct and a reordering vowel, and use libass through FFmpeg or a sidecar file rather than the title tool."},{"slug":"screen-recordings","title":"Editing a screen recording so it can be read","url":"https://addaly.com/learn/video-editing/screen-recordings","api":"https://addaly.com/api/lesson/video-editing/screen-recordings","minutes":8,"keyIdea":"Capture at the delivery resolution so interface elements stay large, punch in with an eased move rather than a cut whenever detail matters, ramp through every moment of waiting, and redact with a tracked solid box because blur on text is not reliably irreversible."},{"slug":"numbers-on-screen","title":"Putting numbers on screen honestly","url":"https://addaly.com/learn/video-editing/numbers-on-screen","api":"https://addaly.com/api/lesson/video-editing/numbers-on-screen","minutes":8,"keyIdea":"A chart on video carries one comparison, revealed in time so the animation directs attention, with labels on the elements rather than in a legend, and because a viewer cannot go back and check the axis, starting a bar chart anywhere but zero is a stronger deception on video than on a page."}]},{"slug":"effects-and-compositing","title":"Effects, compositing and repair","summary":"The shots you were not given, made from the ones you were. This block covers stabilisation and the crop it costs, retiming and the two ways of inventing frames, masks and rotoscoping, keying footage that was lit badly, tracking a point and a plane, removing an object from a moving shot, noise reduction and the honest limits of sharpening, transitions built rather than dropped in, and a diagnosis for a timeline that has stopped playing back.","outcome":"Choose between stabilisation, retiming, masking, keying, tracking, removal and denoise for a given repair, and state for each one the artefact it produces and the property of the source footage that determines whether it will work.","lessons":[{"slug":"stabilisation","title":"Stabilisation, and the crop it costs","url":"https://addaly.com/learn/video-editing/stabilisation","api":"https://addaly.com/api/lesson/video-editing/stabilisation","minutes":8,"keyIdea":"Stabilisation cancels frame movement and scales up to hide the empty edges, so it always costs 5 to 15 per cent of the frame, cannot remove motion blur already in each frame, and needs a separate rolling-shutter pass or it makes skew more visible rather than less."},{"slug":"speed-and-retiming","title":"Retiming, and the two ways of inventing frames","url":"https://addaly.com/learn/video-editing/speed-and-retiming","api":"https://addaly.com/api/lesson/video-editing/speed-and-retiming","minutes":9,"keyIdea":"Slowing a clip means inventing frames, and the three methods trade differently: duplication stutters but invents nothing, blending ghosts, and optical flow is seamless until its motion estimate is wrong and the image melts at the region it got wrong."},{"slug":"masks-and-rotoscoping","title":"Masks, and the honest cost of rotoscoping","url":"https://addaly.com/learn/video-editing/masks-and-rotoscoping","api":"https://addaly.com/api/lesson/video-editing/masks-and-rotoscoping","minutes":8,"keyIdea":"A mask is a shape with feather, expand and invert, and animating one by hand costs roughly one to four hours per five seconds of footage, so keyframe sparsely, split the subject into simple parts, and look for a solution that is not rotoscoping first."},{"slug":"keying-what-you-were-given","title":"Keying footage that was lit badly","url":"https://addaly.com/learn/video-editing/keying-what-you-were-given","api":"https://addaly.com/api/lesson/video-editing/keying-what-you-were-given","minutes":9,"keyIdea":"A keyer builds its matte from colour, so a garbage matte, an evening-out pass and a denoise before keying do more than any setting on the keyer itself; and a subject in 4:2:0 with green spill in their hair has a hard limit no tool removes."},{"slug":"tracking-and-match-move","title":"Tracking a point, a plane and a camera","url":"https://addaly.com/learn/video-editing/tracking-and-match-move","api":"https://addaly.com/api/lesson/video-editing/tracking-and-match-move","minutes":9,"keyIdea":"Point tracking gives position, planar tracking gives a whole surface and survives occlusion, and camera tracking needs real parallax and a rigid scene, so pick the cheapest one that solves the problem, and expect the composite to fail on matching rather than on the track."},{"slug":"object-removal","title":"Taking something out of a moving shot","url":"https://addaly.com/learn/video-editing/object-removal","api":"https://addaly.com/api/lesson/video-editing/object-removal","minutes":8,"keyIdea":"Removal means covering something with pixels that plausibly belong: try reframing first, patch from the same frame on a locked-off shot and from another frame on a moving one, and always match grain, because a patch that is too clean is what gives a removal away."},{"slug":"noise-and-sharpening","title":"Noise reduction, sharpening, and what neither can do","url":"https://addaly.com/learn/video-editing/noise-and-sharpening","api":"https://addaly.com/api/lesson/video-editing/noise-and-sharpening","minutes":9,"keyIdea":"Temporal denoise averages the same pixel across frames so noise cancels and detail survives, spatial denoise averages within a frame so detail goes with the noise: remove chroma noise aggressively and luminance gently, denoise before grading, and re-add grain at the end."},{"slug":"transitions-with-a-reason","title":"Transitions you build rather than drop in","url":"https://addaly.com/learn/video-editing/transitions-with-a-reason","api":"https://addaly.com/api/lesson/video-editing/transitions-with-a-reason","minutes":8,"keyIdea":"A hard cut is right most of the time and a dissolve means time passed: the transitions worth learning are match cuts, whip pans and masked reveals, which you build from what is in the frame rather than drag from a bin."},{"slug":"why-the-timeline-is-slow","title":"Diagnosing a timeline that has stopped playing","url":"https://addaly.com/learn/video-editing/why-the-timeline-is-slow","api":"https://addaly.com/api/lesson/video-editing/why-the-timeline-is-slow","minutes":8,"keyIdea":"Check in order (proxies on, effects bypassed, scopes closed, playback resolution reduced, background renders finished, disk fast enough) because slow playback is almost always one specific effect or one missing toggle rather than an inadequate machine."}]},{"slug":"delivery","title":"Delivery: the file that leaves the building","summary":"Containers, codecs, bitrate, chroma and bit depth; what a platform does to your upload; the settings for each destination; ffmpeg for the jobs your editor refuses; masters and textless versions; the seven ways an export goes wrong; and the check you run on the file rather than the timeline.","outcome":"Choose a container, codec, bitrate and colour tag for a named destination and justify each from the material and from what the platform's own encoder will do to it, render a master and textless version every later deliverable can be derived from, and diagnose a render that is washed out, drifting, juddering or failing at the same percentage by naming the mechanism responsible.","lessons":[{"slug":"codecs-and-export","title":"Why the upload looks worse than the file","url":"https://addaly.com/learn/video-editing/codecs-and-export","api":"https://addaly.com/api/lesson/video-editing/codecs-and-export","minutes":11,"keyIdea":"The platform re-encodes everything, so upload a generously encoded file at the source frame rate and mix near -14 LUFS rather than louder."},{"slug":"containers-and-codecs","title":"The box and the codec are two different decisions","url":"https://addaly.com/learn/video-editing/containers-and-codecs","api":"https://addaly.com/api/lesson/video-editing/containers-and-codecs","minutes":9,"keyIdea":"A filename tells you the container and nothing about the codec, so repack with a remux rather than a rename, and check a file with ffprobe before you send it anywhere."},{"slug":"bitrate-and-what-it-buys","title":"Bitrate, and why the same number is generous and stingy","url":"https://addaly.com/learn/video-editing/bitrate-and-what-it-buys","api":"https://addaly.com/api/lesson/video-editing/bitrate-and-what-it-buys","minutes":9,"keyIdea":"Compare bitrates as bits per pixel per second rather than as raw megabits, and expect motion, fine detail and grain to need several times what a static interview needs."},{"slug":"chroma-and-bit-depth","title":"4:2:0 and 8 bits: where the colour went","url":"https://addaly.com/learn/video-editing/chroma-and-bit-depth","api":"https://addaly.com/api/lesson/video-editing/chroma-and-bit-depth","minutes":9,"keyIdea":"Delivery formats keep one colour sample per four pixels and 256 levels per channel, which costs you saturated edges and smooth gradients, and a trace of added grain hides the banding that results."},{"slug":"the-platform-re-encode","title":"What the platform does to your upload","url":"https://addaly.com/learn/video-editing/the-platform-re-encode","api":"https://addaly.com/api/lesson/video-editing/the-platform-re-encode","minutes":9,"keyIdea":"Your upload is source material for a ladder of renditions you never see, so hand it something clean and uncompressed-twice, match the frame rate, and judge nothing until processing has finished."},{"slug":"export-settings-per-destination","title":"The numbers, destination by destination","url":"https://addaly.com/learn/video-editing/export-settings-per-destination","api":"https://addaly.com/api/lesson/video-editing/export-settings-per-destination","minutes":10,"keyIdea":"Save a named render preset per destination with the frame rate taken from the timeline rather than the preset, because the wrong frame rate is the mistake that survives every other check."},{"slug":"ffmpeg-for-editors","title":"Six ffmpeg commands worth knowing","url":"https://addaly.com/learn/video-editing/ffmpeg-for-editors","api":"https://addaly.com/api/lesson/video-editing/ffmpeg-for-editors","minutes":10,"keyIdea":"ffmpeg never modifies its input, so inspecting, remuxing, converting a variable frame rate recording and measuring the loudness of a finished file are all free experiments."},{"slug":"masters-and-intermediates","title":"The master, and the versions to make while the project is open","url":"https://addaly.com/learn/video-editing/masters-and-intermediates","api":"https://addaly.com/api/lesson/video-editing/masters-and-intermediates","minutes":9,"keyIdea":"Render a full-frame, textless, intra-frame master plus stems at the end of every project, because deriving a new deliverable from a file always works and deriving one from a project only works while the application, fonts, plugins and media all still resolve."},{"slug":"exports-that-go-wrong","title":"Seven ways a render lies to you","url":"https://addaly.com/learn/video-editing/exports-that-go-wrong","api":"https://addaly.com/api/lesson/video-editing/exports-that-go-wrong","minutes":10,"keyIdea":"Render a sixty-second test from the hardest minute of the timeline and open it in two players, because gamma shifts, hardware artefacts, sync drift and file size all declare themselves in a minute and cost an evening after four hours."},{"slug":"checking-the-export","title":"Checking the file, not the timeline","url":"https://addaly.com/learn/video-editing/checking-the-export","api":"https://addaly.com/api/lesson/video-editing/checking-the-export","minutes":9,"keyIdea":"Watch the rendered file once at speed without stopping, then measure its duration, loudness, codec and first and last frame, because every verification you did on the timeline was of something nobody receives."},{"slug":"fast-and-findable","title":"The project that still opens in six months","url":"https://addaly.com/learn/video-editing/fast-and-findable","api":"https://addaly.com/api/lesson/video-editing/fast-and-findable","minutes":9,"keyIdea":"Learn JKL and three-point editing, name folders by date and version, and back up the project file separately from the footage."}]}]},{"slug":"ai-video","title":"Video with AI","tagline":"Plan the shots, generate ten takes, throw eight away, and cut what is left in a real editor.","description":"Generative video taught as production work rather than a demo reel. Why clips are a few seconds long and what that does to your shot list, why image-to-video is the professional default, how to direct a camera move instead of describing a mood, what consistency across shots actually costs, the consent and labelling line on faces and voices, and how to price an afternoon of generating before you start.","level":"intermediate","track":"create","url":"https://addaly.com/learn/ai-video","lessons":66,"minutes":587,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/ai-video.pdf","pages":388,"bytes":4205743,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/ai-video.pdf","cover":"https://addaly.com/textbooks/look/ai-video/1.webp?v=2026-10-07-4205743"},"film":null,"modules":[{"slug":"how-video-models-work","title":"What the machine is actually doing","summary":"Before the shot list, the machinery. A video model compresses your clip roughly fifty times, denoises the whole block of time at once, and attends across every patch of every frame simultaneously. This block walks that path end to end (encoder, schedule, attention, decoder) and turns each stage into something you can act on: which setting changes the picture, which only changes the bill, why the last second loosens, and what it takes to run any of this on hardware you own.","outcome":"Trace a prompt and a first frame through a latent video model (encoder, noise schedule, attention across time, decoder) and use that path to predict which settings change the picture, which change only the cost, why the final second degrades, and what VRAM a given model needs before you download it.","lessons":[{"slug":"why-clips-are-short","title":"Nobody is hiding the long version from you","url":"https://addaly.com/learn/ai-video/why-clips-are-short","api":"https://addaly.com/api/lesson/ai-video/why-clips-are-short","minutes":8,"keyIdea":"Clip length is a memory-and-attention limit, not a product tier, so plan in shots and cut before the drift rather than trying to generate through it."},{"slug":"latent-space-for-video","title":"Your clip is compressed fifty times before anything happens","url":"https://addaly.com/learn/ai-video/latent-space-for-video","api":"https://addaly.com/api/lesson/ai-video/latent-space-for-video","minutes":10,"keyIdea":"A video autoencoder throws away roughly ninety-eight per cent of the pixel data before generation begins, so any detail finer than an eight-pixel block is being reinvented by the decoder rather than preserved."},{"slug":"denoising-a-block-of-time","title":"The whole clip is made at once, not frame by frame","url":"https://addaly.com/learn/ai-video/denoising-a-block-of-time","api":"https://addaly.com/api/lesson/ai-video/denoising-a-block-of-time","minutes":10,"keyIdea":"A video model denoises every frame of the clip simultaneously across a fixed number of steps, which is why nothing can be streamed out early, why step count hits diminishing returns fast, and why distilled turbo models trade motion range for speed."},{"slug":"attention-across-frames","title":"Why a chair stays a chair and a face does not","url":"https://addaly.com/learn/ai-video/attention-across-frames","api":"https://addaly.com/api/lesson/ai-video/attention-across-frames","minutes":10,"keyIdea":"Attention lets every patch of every frame see every other, which is what holds a scene together, but it costs the square of the token count and carries no object identity, so coherence is an emergent statistical effect, not a guarantee about any particular thing."},{"slug":"how-models-learned-motion","title":"The prompt vocabulary was written by whoever captioned the training clips","url":"https://addaly.com/learn/ai-video/how-models-learned-motion","api":"https://addaly.com/api/lesson/ai-video/how-models-learned-motion","minutes":9,"keyIdea":"Video models learned from automatically captioned clips filtered for aesthetics and motion, so the words that work are the words those captions used, and the model's defaults are the defaults of stock footage."},{"slug":"seeds-and-determinism","title":"Same settings, different clip, and why that is not a bug","url":"https://addaly.com/learn/ai-video/seeds-and-determinism","api":"https://addaly.com/api/lesson/ai-video/seeds-and-determinism","minutes":8,"keyIdea":"A seed fixes the starting noise, but reproducibility also requires the same weights, precision, batch shape and kernels, which is why local runs repeat exactly and hosted APIs usually will not promise it."},{"slug":"steps-guidance-and-samplers","title":"The four numbers, and which of them you should touch","url":"https://addaly.com/learn/ai-video/steps-guidance-and-samplers","api":"https://addaly.com/api/lesson/ai-video/steps-guidance-and-samplers","minutes":9,"keyIdea":"Guidance scale controls how hard the model is pushed toward your prompt and away from its unconditional prediction, so raising it past a narrow band burns contrast and freezes motion rather than improving adherence."},{"slug":"frame-rate-and-interpolation","title":"Generated at sixteen, delivered at twenty-four","url":"https://addaly.com/learn/ai-video/frame-rate-and-interpolation","api":"https://addaly.com/api/lesson/ai-video/frame-rate-and-interpolation","minutes":9,"keyIdea":"Many models generate at a low native frame rate and are interpolated up afterwards, which is cheap and usually invisible, except at occlusions and fast motion, where interpolation produces a specific smeared artefact worth recognising."},{"slug":"choosing-a-model","title":"The ranking will be wrong by the time you read this","url":"https://addaly.com/learn/ai-video/choosing-a-model","api":"https://addaly.com/api/lesson/ai-video/choosing-a-model","minutes":8,"keyIdea":"Benchmark models on one hard shot from your own list, because public rankings measure which clip looks nicer, not whether it did what you asked."},{"slug":"running-video-models-yourself","title":"What it takes to run one on your own card","url":"https://addaly.com/learn/ai-video/running-video-models-yourself","api":"https://addaly.com/api/lesson/ai-video/running-video-models-yourself","minutes":10,"keyIdea":"A video model's VRAM requirement is weights plus activations plus the decode, and quantisation and offloading trade speed for fit, which is why a 14-billion-parameter model can run on 8GB slowly or not at all on a phone."}]},{"slug":"the-first-frame","title":"The first frame, and everything decided in it","summary":"In image-to-video the still is the contract: framing, light, wardrobe, style and every flaw persist through the clip and then degrade. This block treats the frame as production work rather than a prompt result: composing for a move that has not happened yet, fixing the subject by hand in a free editor, compositing a real object in before any motion exists, controlling where the shot lands with an end frame, getting a camera move with no video model at all, and reading a frame in advance for the second it will fail.","outcome":"Produce a first frame at the model's native ratio and resolution with a stated light direction, a hand-repaired subject and any real object already composited in, predict from that frame alone which part of the clip will fail, and store it with enough provenance to rebuild the shot six weeks later.","lessons":[{"slug":"start-from-a-still","title":"The still frame is where the decisions belong","url":"https://addaly.com/learn/ai-video/start-from-a-still","api":"https://addaly.com/api/lesson/ai-video/start-from-a-still","minutes":9,"keyIdea":"Every decision you can make in a still costs a hundredth of what it costs to make in a clip, so fix the frame before you ever spend on motion."},{"slug":"composition-that-survives-motion","title":"Compose for the frame you will end on","url":"https://addaly.com/learn/ai-video/composition-that-survives-motion","api":"https://addaly.com/api/lesson/ai-video/composition-that-survives-motion","minutes":9,"keyIdea":"A camera move changes the framing, so the still has to be composed for where the shot ends rather than where it starts, and every edge of the frame is a place where the model has to invent what enters."},{"slug":"lighting-the-still","title":"One light direction per scene, written down","url":"https://addaly.com/learn/ai-video/lighting-the-still","api":"https://addaly.com/api/lesson/ai-video/lighting-the-still","minutes":9,"keyIdea":"Light direction is the strongest continuity signal an audience reads and the easiest one to lose between generations, so it should be decided once for a scene, written down, and put into every first frame before any motion is generated."},{"slug":"repairing-a-still-by-hand","title":"Fix the frame yourself instead of re-rolling it","url":"https://addaly.com/learn/ai-video/repairing-a-still-by-hand","api":"https://addaly.com/api/lesson/ai-video/repairing-a-still-by-hand","minutes":10,"keyIdea":"Repairing a still by hand is deterministic and costs one attempt, while re-generating is a fresh random draw that may fix one flaw and introduce two, which is why professionals reach for an editor long before they reach for the regenerate button."},{"slug":"compositing-the-real-thing","title":"Put the real object in before you animate it","url":"https://addaly.com/learn/ai-video/compositing-the-real-thing","api":"https://addaly.com/api/lesson/ai-video/compositing-the-real-thing","minutes":10,"keyIdea":"A model has no reference for your client's specific product or person, so the professional split is to generate the environment and the camera move and composite the real thing into the still, because a nearly-right label reads as a counterfeit rather than a stylisation."},{"slug":"start-and-end-frames","title":"Deciding where the shot lands","url":"https://addaly.com/learn/ai-video/start-and-end-frames","api":"https://addaly.com/api/lesson/ai-video/start-and-end-frames","minutes":9,"keyIdea":"Supplying both a first and last frame turns generation from an open-ended sample into an interpolation between two fixed points, which is the most underused control in the category and the one that fails hardest when the two frames are too different."},{"slug":"depth-parallax-and-fake-moves","title":"A camera move with no video model at all","url":"https://addaly.com/learn/ai-video/depth-parallax-and-fake-moves","api":"https://addaly.com/api/lesson/ai-video/depth-parallax-and-fake-moves","minutes":9,"keyIdea":"A depth map plus a 2.5D projection gives a camera move on a still image with perfect consistency and zero generation cost, which beats a generated clip outright whenever the subject must stay exactly itself."},{"slug":"reading-a-still-for-failure","title":"Predicting which second will break","url":"https://addaly.com/learn/ai-video/reading-a-still-for-failure","api":"https://addaly.com/api/lesson/ai-video/reading-a-still-for-failure","minutes":9,"keyIdea":"Most clip failures are visible in the still before any money is spent, because the same nine features (contact, thin structure, text, reflection, crowd, pattern, transparency, hair and count) fail for reasons you already know."},{"slug":"the-frame-library","title":"Every still you keep is a part you do not have to make again","url":"https://addaly.com/learn/ai-video/the-frame-library","api":"https://addaly.com/api/lesson/ai-video/the-frame-library","minutes":8,"keyIdea":"A still with its prompt, seed, model version and provenance stored beside it is a reusable part, and a project without that record cannot be revised six weeks later: it can only be redone."},{"slug":"where-it-actually-wins","title":"Where this is already the right tool","url":"https://addaly.com/learn/ai-video/where-it-actually-wins","api":"https://addaly.com/api/lesson/ai-video/where-it-actually-wins","minutes":8,"keyIdea":"Generative video is already the right tool for b-roll, impossible shots, pre-visualisation and short-form, and still the wrong tool wherever a specific person or object has to stay itself."}]},{"slug":"directing-the-shot","title":"Directing, not describing","summary":"The prompt is a light influence over a great deal of structure, so the words that steer are the ones a shot list uses: size, angle, lens, one move with a speed, a verb for the subject and a note on what stays still. This block builds that vocabulary properly, adds the controls that take motion out of language altogether, and finishes with an experimental protocol that tells you which of your instructions the model is actually following.","outcome":"Write a shot instruction naming size, angle, lens character, one camera move with a speed, the subject's verb and what stays still; choose between language, a motion brush and an explicit conditioning signal for a given move; and run a fixed-seed experiment that determines which parts of your instruction the model obeyed.","lessons":[{"slug":"directing-the-camera","title":"Cinematic, 8k, epic gets you the average of everything","url":"https://addaly.com/learn/ai-video/directing-the-camera","api":"https://addaly.com/api/lesson/ai-video/directing-the-camera","minutes":9,"keyIdea":"Name the shot size, one camera move, the subject's verb and what stays still: mood adjectives return the average of everything captioned that way."},{"slug":"shot-size-and-angle","title":"The two words that decide most of the frame","url":"https://addaly.com/learn/ai-video/shot-size-and-angle","api":"https://addaly.com/api/lesson/ai-video/shot-size-and-angle","minutes":9,"keyIdea":"Shot size and camera angle were named explicitly in the captions the model trained on, so they steer more reliably than any other words, and they carry meaning an audience reads without noticing."},{"slug":"lens-and-focus-language","title":"Focal length, depth of field, and the words that carry them","url":"https://addaly.com/learn/ai-video/lens-and-focus-language","api":"https://addaly.com/api/lesson/ai-video/lens-and-focus-language","minutes":9,"keyIdea":"Focal length changes the relationship between foreground and background rather than just the field of view, so naming a lens steers the geometry of the frame in a way that no amount of describing the subject can."},{"slug":"blocking-and-screen-direction","title":"Where people stand, and which way they face","url":"https://addaly.com/learn/ai-video/blocking-and-screen-direction","api":"https://addaly.com/api/lesson/ai-video/blocking-and-screen-direction","minutes":9,"keyIdea":"Screen direction is a continuity contract across a cut, and because a generated shot has no set and no camera position you have to enforce it in the first frame rather than discovering it on the day."},{"slug":"motion-strength-and-brushes","title":"Taking motion out of language","url":"https://addaly.com/learn/ai-video/motion-strength-and-brushes","api":"https://addaly.com/api/lesson/ai-video/motion-strength-and-brushes","minutes":9,"keyIdea":"Language is a poor way to specify a curve, so the controls that matter most are the ones that bypass it (a motion strength slider, a painted region, a drawn trajectory) and each of them fails in a way the prompt equivalent does not."},{"slug":"conditioned-motion-controls","title":"Depth, pose and flow as instructions","url":"https://addaly.com/learn/ai-video/conditioned-motion-controls","api":"https://addaly.com/api/lesson/ai-video/conditioned-motion-controls","minutes":10,"keyIdea":"A conditioning signal supplies the model with a per-frame structural target (depth, pose skeleton or optical flow) which is why it produces motion a prompt cannot describe, and why it also imports every flaw of the source video."},{"slug":"negative-prompts-and-their-limits","title":"What a negative prompt can and cannot remove","url":"https://addaly.com/learn/ai-video/negative-prompts-and-their-limits","api":"https://addaly.com/api/lesson/ai-video/negative-prompts-and-their-limits","minutes":8,"keyIdea":"A negative prompt is a second conditioning the model is pushed away from, which works well for qualities of rendering and badly for objects, because naming an object pulls it into the guided direction before the negation subtracts it."},{"slug":"one-variable-at-a-time","title":"An experiment protocol that fits on a card","url":"https://addaly.com/learn/ai-video/one-variable-at-a-time","api":"https://addaly.com/api/lesson/ai-video/one-variable-at-a-time","minutes":8,"keyIdea":"Because generation is stochastic, comparing two clips that differ in more than one respect tells you nothing, so every useful conclusion about a model comes from a fixed seed, one changed variable and a written record."},{"slug":"what-the-model-ignores","title":"The clauses that quietly do nothing","url":"https://addaly.com/learn/ai-video/what-the-model-ignores","api":"https://addaly.com/api/lesson/ai-video/what-the-model-ignores","minutes":9,"keyIdea":"Prompt adherence degrades with the number of independent requirements, and the ones dropped first are counts, spatial relations, negations and anything about timing, because a few hundred text tokens are steering a quarter of a million video tokens."}]},{"slug":"continuity-and-character","title":"Making separate shots belong to each other","summary":"Nothing in a video model remembers your character, your room or your look between generations, so continuity is something you impose from outside. This block works through every mechanism available (a character sheet, reference conditioning, a trained identity model, reusable plates, a written look file, and repair after the fact) and finishes with the arithmetic nobody quotes: what a per-shot success rate does to the odds of getting eight matching shots in a row.","outcome":"Hold a character, a location and a look across a multi-shot sequence using a character sheet, reference conditioning or a trained model as appropriate, decide which of those a given job justifies, and state the compounding probability of a matching sequence from a measured per-shot hit rate.","lessons":[{"slug":"consistency-across-shots","title":"A cut breaks on the light before it breaks on the face","url":"https://addaly.com/learn/ai-video/consistency-across-shots","api":"https://addaly.com/api/lesson/ai-video/consistency-across-shots","minutes":10,"keyIdea":"Identity holds because the first frame holds it, and a cut breaks on mismatched light and wardrobe long before it breaks on the face."},{"slug":"building-a-character-sheet","title":"The document you build before you generate anything","url":"https://addaly.com/learn/ai-video/building-a-character-sheet","api":"https://addaly.com/api/lesson/ai-video/building-a-character-sheet","minutes":9,"keyIdea":"A character sheet is a fixed set of images of one person under one light in one wardrobe, and it works because every later first frame is built from it rather than described afresh."},{"slug":"reference-and-element-conditioning","title":"What a reference image is actually doing","url":"https://addaly.com/learn/ai-video/reference-and-element-conditioning","api":"https://addaly.com/api/lesson/ai-video/reference-and-element-conditioning","minutes":9,"keyIdea":"Reference features condition on an embedding of the supplied images rather than storing the person, so they reliably reproduce a type (build, colouring, wardrobe, general impression) while the exact facial geometry keeps re-sampling within that type."},{"slug":"training-a-character-model","title":"When a LoRA is worth the afternoon","url":"https://addaly.com/learn/ai-video/training-a-character-model","api":"https://addaly.com/api/lesson/ai-video/training-a-character-model","minutes":10,"keyIdea":"Training a small adapter on twenty images teaches the base model one specific identity as a real concept, which is the strongest consistency tool available and only worth it when the character will appear across enough shots to repay a fixed setup cost."},{"slug":"location-and-set-continuity","title":"Building a room that stays the same room","url":"https://addaly.com/learn/ai-video/location-and-set-continuity","api":"https://addaly.com/api/lesson/ai-video/location-and-set-continuity","minutes":9,"keyIdea":"A location is easier to hold than a face because a plate can be literally reused: generate the space once, then derive every shot in that scene from the same image by cropping, reframing and compositing."},{"slug":"wardrobe-props-and-colour-continuity","title":"The blue that is not quite the same blue","url":"https://addaly.com/learn/ai-video/wardrobe-props-and-colour-continuity","api":"https://addaly.com/api/lesson/ai-video/wardrobe-props-and-colour-continuity","minutes":8,"keyIdea":"Audiences detect wardrobe and prop discontinuity faster than facial drift because clothing is a large area of uniform colour, and colour differences of a few per cent across a large area are exactly what human vision is built to notice."},{"slug":"post-hoc-identity-repair","title":"Fixing a face after the clip exists","url":"https://addaly.com/learn/ai-video/post-hoc-identity-repair","api":"https://addaly.com/api/lesson/ai-video/post-hoc-identity-repair","minutes":9,"keyIdea":"Face restoration and face replacement operate per frame on a finished clip, which makes them useful for small drift and dangerous for large changes. And the same tooling that rescues your own shot is the tooling behind non-consensual synthetic media."},{"slug":"the-look-file","title":"Deciding the look once, in writing","url":"https://addaly.com/learn/ai-video/the-look-file","api":"https://addaly.com/api/lesson/ai-video/the-look-file","minutes":8,"keyIdea":"A look is a set of decisions about colour, contrast, texture and lens that should be made once and written down, because a piece where every shot was styled individually reads as a collection rather than as a film."},{"slug":"the-compounding-hit-rate","title":"The arithmetic nobody puts in the demo reel","url":"https://addaly.com/learn/ai-video/the-compounding-hit-rate","api":"https://addaly.com/api/lesson/ai-video/the-compounding-hit-rate","minutes":9,"keyIdea":"Per-shot success rates multiply, so a hit rate that feels acceptable on one shot becomes a low probability across a sequence, which is why the professional response is to reduce the number of shots that must match rather than to improve the rate."},{"slug":"what-it-cannot-do","title":"Six things it cannot do, and the reason for each","url":"https://addaly.com/learn/ai-video/what-it-cannot-do","api":"https://addaly.com/api/lesson/ai-video/what-it-cannot-do","minutes":10,"keyIdea":"Each failure has a mechanism (no simulation, no symbols, no persistent objects, no reference for your specific thing) and the mechanism tells you whether to wait for a better model or change the shot."}]},{"slug":"sound-and-speech","title":"The half of video that is not picture","summary":"Sound is the cheapest quality upgrade in the pipeline and the one most people skip. This block covers the talking head honestly (what lip-sync is actually reshaping and where it fails, what performance transfer captures that phonemes do not) and then the audio nobody sees: cloned and recorded voice, room tone, spot effects, music licensing you can defend, and why a well-chosen sound makes a viewer forgive physics the model got wrong.","outcome":"Build the audio half of a generated video (a speaking character whose consent you can document, a voice recorded or synthesised with a stated quality trade-off, room tone and spot effects under every shot, and music whose licence you could show a platform) and explain why sound repairs perceived physical errors that no regeneration would fix.","lessons":[{"slug":"faces-voices-consent","title":"Lip-sync is easy; the permission is not","url":"https://addaly.com/learn/ai-video/faces-voices-consent","api":"https://addaly.com/api/lesson/ai-video/faces-voices-consent","minutes":10,"keyIdea":"Permission to film is not permission to synthesise, and the only label that survives a screenshot is the one burned into the frame."},{"slug":"lip-sync-mechanics","title":"What the model is actually reshaping","url":"https://addaly.com/learn/ai-video/lip-sync-mechanics","api":"https://addaly.com/api/lesson/ai-video/lip-sync-mechanics","minutes":9,"keyIdea":"Audio-driven lip-sync maps sound to a small set of visually distinct mouth shapes and inpaints the mouth region frame by frame, which is why it works at medium shots and falls apart on plosives, profiles and close-ups."},{"slug":"performance-transfer","title":"Acting is timing, and timing has to come from somewhere","url":"https://addaly.com/learn/ai-video/performance-transfer","api":"https://addaly.com/api/lesson/ai-video/performance-transfer","minutes":9,"keyIdea":"Performance transfer drives a generated face from a recorded one, capturing the pauses, emphasis and eyebrow movement that carry meaning, which is why it beats lip-sync on anything with emotional content and why the person in front of the webcam matters more than the model."},{"slug":"voice-cloning-and-synthetic-speech","title":"Synthetic voice, and where it stops being good enough","url":"https://addaly.com/learn/ai-video/voice-cloning-and-synthetic-speech","api":"https://addaly.com/api/lesson/ai-video/voice-cloning-and-synthetic-speech","minutes":9,"keyIdea":"Text-to-speech has solved pronunciation and timbre but not interpretation, so synthetic voice holds up for short informational lines and degrades over long-form narration where a listener starts noticing that nothing is being meant."},{"slug":"recording-a-real-voice","title":"A phone, a quiet room, and four minutes in Audacity","url":"https://addaly.com/learn/ai-video/recording-a-real-voice","api":"https://addaly.com/api/lesson/ai-video/recording-a-real-voice","minutes":9,"keyIdea":"Most of recorded voice quality comes from the room rather than the microphone, so a phone in soft furnishings beats an expensive microphone in a hard empty room, and a fixed four-step cleanup chain handles the rest."},{"slug":"room-tone-and-spot-effects","title":"Why silence is the worst sound","url":"https://addaly.com/learn/ai-video/room-tone-and-spot-effects","api":"https://addaly.com/api/lesson/ai-video/room-tone-and-spot-effects","minutes":8,"keyIdea":"Generated clips arrive with no sound at all, and true digital silence reads as broken, so a continuous ambience bed under every shot is the single cheapest thing that makes generated footage read as filmed."},{"slug":"music-and-its-licence","title":"Music you could defend if somebody asked","url":"https://addaly.com/learn/ai-video/music-and-its-licence","api":"https://addaly.com/api/lesson/ai-video/music-and-its-licence","minutes":9,"keyIdea":"Music is the easiest part of a soundtrack to obtain and the easiest to get legally wrong, because a licence has to cover the specific use, and AI-generated music sits on unresolved ground about ownership and training data."},{"slug":"sound-design-fixes-bad-physics","title":"The viewer believes the sound","url":"https://addaly.com/learn/ai-video/sound-design-fixes-bad-physics","api":"https://addaly.com/api/lesson/ai-video/sound-design-fixes-bad-physics","minutes":8,"keyIdea":"When sound and picture disagree, perception leans on the sound, which is why a well-synced impact makes a physically wrong collision read as correct and why sound design is a repair tool as well as a finishing one."},{"slug":"models-that-generate-their-own-audio","title":"When the model makes the sound too","url":"https://addaly.com/learn/ai-video/models-that-generate-their-own-audio","api":"https://addaly.com/api/lesson/ai-video/models-that-generate-their-own-audio","minutes":8,"keyIdea":"Native audio generation produces synchronised ambience and dialogue in one pass, which is remarkable and usually unusable as a final track, because you cannot separate, replace or adjust anything in it afterwards."}]},{"slug":"the-edit","title":"From generations to a finished piece","summary":"Most of the difference between footage and output happens after the last generation. This block is the post-production half in order: conforming mixed frame rates onto one timeline, selecting and assembling, hiding cuts where the eye is already moving, pulling thirty independent colour responses into one world, laying grain that replaces the texture the encoder removed, adding real text, retiming without exposing fake physics, and exporting to a spec that survives a platform's re-encode, including on a machine that cannot run a professional editor.","outcome":"Take a folder of mixed-rate generations to a delivered file (conformed, assembled, cut on motion, colour-matched under one grade and one grain pass, titled, sound-finished and exported to a named platform specification) and name the free tool that performs each step on the hardware you actually have.","lessons":[{"slug":"the-edit-is-the-work","title":"The generator makes footage; the editor makes the video","url":"https://addaly.com/learn/ai-video/the-edit-is-the-work","api":"https://addaly.com/api/lesson/ai-video/the-edit-is-the-work","minutes":10,"keyIdea":"Trim the settle and the drift, unify everything with one grade and one grain pass, and put real sound underneath: that is most of the difference between footage and output."},{"slug":"conforming-and-project-setup","title":"Decide the frame rate before you import anything","url":"https://addaly.com/learn/ai-video/conforming-and-project-setup","api":"https://addaly.com/api/lesson/ai-video/conforming-and-project-setup","minutes":9,"keyIdea":"A timeline has one frame rate and one resolution, and every clip that does not match is resampled to fit, so the settings you choose before importing determine whether your footage judders for the rest of the project."},{"slug":"selects-and-the-assembly","title":"Choosing takes before you start cutting","url":"https://addaly.com/learn/ai-video/selects-and-the-assembly","api":"https://addaly.com/api/lesson/ai-video/selects-and-the-assembly","minutes":8,"keyIdea":"Selecting takes and assembling a rough cut are separate passes with different judgements, and collapsing them is why edits stall: you cannot decide whether a shot works in the sequence while you are still deciding whether the shot works."},{"slug":"where-a-cut-hides","title":"Cut on motion, and one frame before the failure","url":"https://addaly.com/learn/ai-video/where-a-cut-hides","api":"https://addaly.com/api/lesson/ai-video/where-a-cut-hides","minutes":8,"keyIdea":"A cut placed while the eye is already tracking change is far less visible than one on a static frame, which gives you both a craft rule and a way to place every cut exactly where a generation stops working."},{"slug":"matching-colour-across-generations","title":"Thirty renders, one world","url":"https://addaly.com/learn/ai-video/matching-colour-across-generations","api":"https://addaly.com/api/lesson/ai-video/matching-colour-across-generations","minutes":10,"keyIdea":"Each generation makes its own independent decisions about colour and contrast, so a piece is unified by a two-stage process (shot matching to bring every clip to a neutral common ground, then one grade over all of it) and never by grading each clip to taste."},{"slug":"grain-texture-and-defocus","title":"Putting back the texture the encoder removed","url":"https://addaly.com/learn/ai-video/grain-texture-and-defocus","api":"https://addaly.com/api/lesson/ai-video/grain-texture-and-defocus","minutes":8,"keyIdea":"Generated frames are smooth because the autoencoder discarded high-frequency detail, so a single grain pass across the finished timeline replaces a missing surface property and unifies clips more effectively than any colour operation."},{"slug":"titles-text-and-the-label-card","title":"Real type, added afterwards","url":"https://addaly.com/learn/ai-video/titles-text-and-the-label-card","api":"https://addaly.com/api/lesson/ai-video/titles-text-and-the-label-card","minutes":8,"keyIdea":"Text belongs in the editor rather than in the generation, because a title is vector type that stays identical for every frame while generated letterforms are reinvented each frame from a latent that never held them."},{"slug":"retiming-and-speed-ramps","title":"Slow motion is where fake physics goes to be caught","url":"https://addaly.com/learn/ai-video/retiming-and-speed-ramps","api":"https://addaly.com/api/lesson/ai-video/retiming-and-speed-ramps","minutes":8,"keyIdea":"Slowing generated footage gives the viewer time to verify physics the model only approximated, so retiming should be used to speed things up and to find a moment, and almost never to dwell on a physical event."},{"slug":"export-codecs-and-delivery","title":"The last render, and what the platform does to it","url":"https://addaly.com/learn/ai-video/export-codecs-and-delivery","api":"https://addaly.com/api/lesson/ai-video/export-codecs-and-delivery","minutes":9,"keyIdea":"Every platform re-encodes what you upload, so your export should be a high-bitrate master that gives their encoder good material to work from rather than a small file that has already thrown away the detail."},{"slug":"editing-without-a-good-machine","title":"The whole pipeline on a phone or an old laptop","url":"https://addaly.com/learn/ai-video/editing-without-a-good-machine","api":"https://addaly.com/api/lesson/ai-video/editing-without-a-good-machine","minutes":9,"keyIdea":"Every step of post-production has a version that runs on modest hardware, and the constraint that actually bites is playback performance rather than capability, which proxies solve for free."}]},{"slug":"running-the-job","title":"Money, clients and running the job","summary":"Generative video is the first creative tool in years with a meter running, which changes how a project has to be planned, quoted and executed. This block builds the production apparatus: a shot list that can be batched, an animatic that gets approval before anything expensive happens, a draft-then-final discipline, queue management through an API, the arithmetic of subscription against top-up, a quote priced in shots with a stated attempt allowance, and the record that makes a revision six weeks later a small job rather than a reshoot.","outcome":"Plan, price and run a generative video job end to end: a shot list with durations and dependencies, an approved animatic before any final generation, a draft pass at the cheapest tier, a kill number per shot, a quote expressed in shots with included attempts, and a project record that makes a later revision cheap.","lessons":[{"slug":"cost-per-usable-second","title":"An afternoon of curiosity can cost more than a day of work","url":"https://addaly.com/learn/ai-video/cost-per-usable-second","api":"https://addaly.com/api/lesson/ai-video/cost-per-usable-second","minutes":9,"keyIdea":"Price your work in shots with a fixed number of included attempts, because the cost driver is generations thrown away, not hours spent."},{"slug":"writing-the-shot-list","title":"The document everything else is built from","url":"https://addaly.com/learn/ai-video/writing-the-shot-list","api":"https://addaly.com/api/lesson/ai-video/writing-the-shot-list","minutes":9,"keyIdea":"A shot list with a duration on every line converts an open-ended creative task into a countable one, which is what makes batching, quoting and stopping possible."},{"slug":"previsualisation-and-client-approval","title":"Get the yes before you spend the money","url":"https://addaly.com/learn/ai-video/previsualisation-and-client-approval","api":"https://addaly.com/api/lesson/ai-video/previsualisation-and-client-approval","minutes":9,"keyIdea":"An animatic made from stills costs almost nothing and carries the same approval as a finished cut, which moves the expensive client conversation to before generation rather than after it."},{"slug":"draft-passes-and-quality-ladders","title":"Test the idea at a tenth of the price","url":"https://addaly.com/learn/ai-video/draft-passes-and-quality-ladders","api":"https://addaly.com/api/lesson/ai-video/draft-passes-and-quality-ladders","minutes":8,"keyIdea":"A draft generation at low resolution on a distilled model answers whether a motion idea works, which is a different question from whether the shot is good, and answering it cheaply first is where most of the saving in a project lives."},{"slug":"batching-and-apis","title":"Queue everything, then judge it together","url":"https://addaly.com/learn/ai-video/batching-and-apis","api":"https://addaly.com/api/lesson/ai-video/batching-and-apis","minutes":9,"keyIdea":"Generating one clip at a time invites the just-one-more loop that destroys budgets, while queueing a batch and reviewing the results together produces better decisions and a countable spend."},{"slug":"subscription-or-top-up","title":"The arithmetic nobody does before subscribing","url":"https://addaly.com/learn/ai-video/subscription-or-top-up","api":"https://addaly.com/api/lesson/ai-video/subscription-or-top-up","minutes":8,"keyIdea":"Credits usually expire at the end of a billing period, so a subscription is cheaper per second only if you actually finish a project inside that window and is worse than useless in a month where you do not work."},{"slug":"quoting-in-shots","title":"Price the thing that actually costs money","url":"https://addaly.com/learn/ai-video/quoting-in-shots","api":"https://addaly.com/api/lesson/ai-video/quoting-in-shots","minutes":9,"keyIdea":"The cost driver in generative video is generations discarded rather than hours worked, so a quote expressed in shots with a stated attempt allowance puts the real variable where the client can see it and decide about it."},{"slug":"the-project-record","title":"What to keep, and the day it saves you","url":"https://addaly.com/learn/ai-video/the-project-record","api":"https://addaly.com/api/lesson/ai-video/the-project-record","minutes":8,"keyIdea":"A project record is what turns a later revision into a twenty-minute job instead of a reshoot, and it has to be assembled during production because most of it cannot be reconstructed afterwards."}]}]},{"slug":"motion-and-audio","title":"Motion, Sound and Music","tagline":"Why nothing in the world starts at full speed, and why a blanket beats a better microphone.","description":"Motion first: what a keyframe stores, why easing fixes most bad animation, and how timing, anticipation and overshoot give a logo weight. Then lower-thirds, Lottie handover, green-screen keying and exporting video that is not 40MB. Then sound: recording a voice in an untreated room, compression explained properly, EQ in three moves, music licensing and Content ID, and the consent rules for a cloned voice.","level":"intermediate","track":"create","url":"https://addaly.com/learn/motion-and-audio","lessons":72,"minutes":714,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/motion-and-audio.pdf","pages":448,"bytes":5165257,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/motion-and-audio.pdf","cover":"https://addaly.com/textbooks/look/motion-and-audio/1.webp?v=2026-10-07-5165257"},"film":null,"modules":[{"slug":"how-motion-reads-as-real","title":"How motion reads as real","summary":"Before any software, the part that decides whether animation looks expensive or amateur: what a frame rate actually commits you to, how to read a speed graph, why the default ease is a compromise nobody chose, what a spring buys and what it costs, and which of the old animation principles survive on a screen somebody looks at four hundred times.","outcome":"Diagnose a piece of flat or floaty animation by reading its timing and spacing (naming whether the fault is the easing curve's influence, the spacing between frames, a missing arc, or an absent anticipation) and correct it by editing the value graph rather than adding an effect on top.","lessons":[{"slug":"nothing-starts-at-speed","title":"Nothing in the world starts at full speed","url":"https://addaly.com/learn/motion-and-audio/nothing-starts-at-speed","api":"https://addaly.com/api/lesson/motion-and-audio/nothing-starts-at-speed","minutes":9,"keyIdea":"Ease-out for anything arriving or responding, ease-in for anything leaving, and linear only for motion that never starts or stops."},{"slug":"weight-comes-from-spacing","title":"Motion blur will not fix a floaty logo","url":"https://addaly.com/learn/motion-and-audio/weight-comes-from-spacing","api":"https://addaly.com/api/lesson/motion-and-audio/weight-comes-from-spacing","minutes":9,"keyIdea":"Weight is uneven distance-per-frame plus a small anticipation and settle; effects added afterwards cannot supply it."},{"slug":"frames-are-the-unit","title":"Frames, not seconds","url":"https://addaly.com/learn/motion-and-audio/frames-are-the-unit","api":"https://addaly.com/api/lesson/motion-and-audio/frames-are-the-unit","minutes":9,"keyIdea":"Frame rate is a commitment made before the first keyframe, because a duration in milliseconds only becomes a real animation once it has been rounded to whole frames, and changing the rate afterwards silently resamples everything you spaced by hand."},{"slug":"the-graph-editor","title":"The panel most people never open","url":"https://addaly.com/learn/motion-and-audio/the-graph-editor","api":"https://addaly.com/api/lesson/motion-and-audio/the-graph-editor","minutes":9,"keyIdea":"The speed graph is the derivative of the value graph, so the shape of one tells you what the motion is doing between keyframes, and a rectangular speed graph is the signature of the linear default that makes animation read as wrong."},{"slug":"why-ease-ease-still-looks-wrong","title":"Why pressing Easy Ease still looks wrong","url":"https://addaly.com/learn/motion-and-audio/why-ease-ease-still-looks-wrong","api":"https://addaly.com/api/lesson/motion-and-audio/why-ease-ease-still-looks-wrong","minutes":10,"keyIdea":"A keyframe handle has an angle and a length, and the one-key ease sets both to a symmetric default nobody chose: dragging the outgoing handle's influence to roughly three-quarters is what turns a mushy move into one that commits and then settles."},{"slug":"springs-instead-of-curves","title":"Springs, and what you give up for them","url":"https://addaly.com/learn/motion-and-audio/springs-instead-of-curves","api":"https://addaly.com/api/lesson/motion-and-audio/springs-instead-of-curves","minutes":10,"keyIdea":"A spring's duration is an output of stiffness, damping and mass rather than something you set, which is why it can be redirected mid-flight without a visible restart, and why it is the wrong tool for anything that must land on a beat or must never exceed its target value."},{"slug":"arcs-and-follow-through","title":"Straight lines and the things that lag behind","url":"https://addaly.com/learn/motion-and-audio/arcs-and-follow-through","api":"https://addaly.com/api/lesson/motion-and-audio/arcs-and-follow-through","minutes":9,"keyIdea":"Arcs and small two-to-four-frame offsets between parts are what separate animated motion from interpolated motion, but the element under the user's finger must never lag, because perceived responsiveness is measured from input to first visible change."},{"slug":"twelve-principles-filtered","title":"The old principles, filtered for a screen seen four hundred times","url":"https://addaly.com/learn/motion-and-audio/twelve-principles-filtered","api":"https://addaly.com/api/lesson/motion-and-audio/twelve-principles-filtered","minutes":10,"keyIdea":"Film motion is watched once and interface motion is watched hundreds of times, so anticipation, exaggeration and squash-and-stretch (the principles that make a single viewing memorable) are precisely the ones that must be reduced or dropped on a screen somebody uses every day."},{"slug":"where-the-eye-is","title":"Where the eye already is","url":"https://addaly.com/learn/motion-and-audio/where-the-eye-is","api":"https://addaly.com/api/lesson/motion-and-audio/where-the-eye-is","minutes":8,"keyIdea":"A viewer needs roughly 150–250ms to decide to look somewhere and another 20–40ms to get there, so a new element that appears far from where the last one left is missed for its first several frames: place the next point of interest where the eye already is, or hold a beat."}]},{"slug":"motion-that-carries-meaning","title":"Motion that carries meaning","summary":"Animation in an interface as a functional layer rather than decoration: what a transition claims, how long it should take, which properties the browser can animate cheaply, and what to do for the substantial number of people who are made ill by large-field motion.","outcome":"Specify the motion in an interface as something a second developer could build from a written brief (naming which element moves, for how many milliseconds, on which curve, in what order relative to its neighbours, what it does when the viewer has asked for reduced motion, and which CSS properties the browser can animate without re-running layout) and justify each number from the perceptual or rendering limit it comes from.","lessons":[{"slug":"motion-as-feedback","title":"The three jobs an animation can do","url":"https://addaly.com/learn/motion-and-audio/motion-as-feedback","api":"https://addaly.com/api/lesson/motion-and-audio/motion-as-feedback","minutes":9,"keyIdea":"Interface motion earns its place only by answering what just happened, where a thing came from, or whether the system is alive, and the causal reading depends on the movement starting within roughly a tenth of a second of the action that caused it."},{"slug":"how-long-should-it-take","title":"How long an animation should take","url":"https://addaly.com/learn/motion-and-audio/how-long-should-it-take","api":"https://addaly.com/api/lesson/motion-and-audio/how-long-should-it-take","minutes":9,"keyIdea":"Durations come from a small named set rather than from feel, exits run at roughly three-quarters of entrance time, and distance scales duration sub-linearly, but perceived length is set by the shape of the curve's tail more than by the number."},{"slug":"transition-as-explanation","title":"The transition is the explanation","url":"https://addaly.com/learn/motion-and-audio/transition-as-explanation","api":"https://addaly.com/api/lesson/motion-and-audio/transition-as-explanation","minutes":10,"keyIdea":"A shared-element transition measures an element before and after, inverts the difference with a transform and plays it off, which is why it can only describe a relationship that genuinely exists between the two states."},{"slug":"stagger-and-orchestration","title":"Staggering without making people wait","url":"https://addaly.com/learn/motion-and-audio/stagger-and-orchestration","api":"https://addaly.com/api/lesson/motion-and-audio/stagger-and-orchestration","minutes":9,"keyIdea":"A stagger works by overlapping heavily (20 to 60ms of offset per item with a capped total window) and starting the next element when the previous is roughly halfway, because the eye reads intent long before a movement settles."},{"slug":"lower-thirds-that-work","title":"Why your lower-third looks like a template","url":"https://addaly.com/learn/motion-and-audio/lower-thirds-that-work","api":"https://addaly.com/api/lesson/motion-and-audio/lower-thirds-that-work","minutes":10,"keyIdea":"Animation time is not reading time: budget two and a half to three seconds of still text first, then add the entrance and exit on top."},{"slug":"motion-tokens","title":"Naming the motion so it stops drifting","url":"https://addaly.com/learn/motion-and-audio/motion-tokens","api":"https://addaly.com/api/lesson/motion-and-audio/motion-tokens","minutes":8,"keyIdea":"Motion tokens are named by role rather than by value so the number can change without the name becoming a lie, and redefining them inside a reduced-motion query is the cheapest way to make every future component inherit the right behaviour."},{"slug":"waiting-states","title":"Spinners, skeletons and honest waiting","url":"https://addaly.com/learn/motion-and-audio/waiting-states","api":"https://addaly.com/api/lesson/motion-and-audio/waiting-states","minutes":9,"keyIdea":"Delay the indicator by 200 to 300ms so fast responses never flash a spinner, use an indeterminate indicator whenever you do not genuinely know the progress, and treat a skeleton as a promise about layout that will cost you twice if it is wrong."},{"slug":"prefers-reduced-motion","title":"Motion that makes people ill","url":"https://addaly.com/learn/motion-and-audio/prefers-reduced-motion","api":"https://addaly.com/api/lesson/motion-and-audio/prefers-reduced-motion","minutes":10,"keyIdea":"Large-area, parallax and zoom motion cause a visual-vestibular conflict that produces real nausea in a large minority of adults, so the media query should substitute a cross-fade rather than switch animation off, and the effects most likely to trigger it should not be in the default experience at all."},{"slug":"compositor-only-properties","title":"Why transform is cheap and width is not","url":"https://addaly.com/learn/motion-and-audio/compositor-only-properties","api":"https://addaly.com/api/lesson/motion-and-audio/compositor-only-properties","minutes":10,"keyIdea":"Transform and opacity describe how an already-painted layer is placed, so animating them skips layout and paint and can run on the compositor thread even while the main thread is blocked, which is why they survive a heavy script task and a width animation does not."}]},{"slug":"shipping-the-motion","title":"Shipping the motion","summary":"Getting an animation out of the tool it was made in and onto somebody else's screen: which of the five delivery technologies fits, what Lottie and SVG cannot carry, why a GIF costs twenty times what a video costs, how transparency actually works on the web, and what a developer needs in writing.","outcome":"Choose a delivery format for a given piece of motion by reasoning from whether it must respond to state, whether its content is vector or photographic, and who will edit it next; then produce that file with the right encoder settings, verify it on the target platform rather than in the authoring tool, and hand it over with a written specification covering trigger, interrupt, exit, responsive behaviour and reduced motion.","lessons":[{"slug":"which-technology","title":"Five ways to put motion on a screen","url":"https://addaly.com/learn/motion-and-audio/which-technology","api":"https://addaly.com/api/lesson/motion-and-audio/which-technology","minutes":10,"keyIdea":"The delivery format follows from three questions (does it respond to state, is the content vector or photographic, and how often will it change) and the first of those eliminates more options than the other two combined."},{"slug":"lottie-and-its-limits","title":"What Lottie carries and what it drops","url":"https://addaly.com/learn/motion-and-audio/lottie-and-its-limits","api":"https://addaly.com/api/lesson/motion-and-audio/lottie-and-its-limits","minutes":10,"keyIdea":"A Lottie file is a list of shapes with keyframed properties, so anything that is not expressible that way (effects, most expressions, motion blur, cameras) does not survive the export, and imported raster images are base64-inflated into the JSON rather than compressed."},{"slug":"svg-animation","title":"Animating a drawing that is also a document","url":"https://addaly.com/learn/motion-and-audio/svg-animation","api":"https://addaly.com/api/lesson/motion-and-audio/svg-animation","minutes":10,"keyIdea":"SVG elements sit in the DOM, so CSS and JavaScript animate them directly, and the two techniques worth memorising are stroke-dashoffset for a self-drawing line, normalised with pathLength, and transform-box: fill-box to stop a rotation swinging across the viewBox."},{"slug":"gif-is-not-a-video-format","title":"Why a GIF costs twenty times what a video costs","url":"https://addaly.com/learn/motion-and-audio/gif-is-not-a-video-format","api":"https://addaly.com/api/lesson/motion-and-audio/gif-is-not-a-video-format","minutes":9,"keyIdea":"GIF stores each frame as a palette of 256 colours with one bit of transparency and no motion compensation between frames, so a clip that a video codec describes as block movement has to be stored almost in full every frame."},{"slug":"alpha-on-the-web","title":"Transparent video, and why it is two files","url":"https://addaly.com/learn/motion-and-audio/alpha-on-the-web","api":"https://addaly.com/api/lesson/motion-and-audio/alpha-on-the-web","minutes":10,"keyIdea":"No single video file carries alpha everywhere: VP9 in WebM covers Chrome and Firefox, HEVC with the hvc1 tag covers Safari, and the luma-matte workaround doubles the frame width and requires WebGL, so the first question is whether the background is genuinely arbitrary."},{"slug":"sprite-sheets","title":"Frames in a grid, and the memory they cost","url":"https://addaly.com/learn/motion-and-audio/sprite-sheets","api":"https://addaly.com/api/lesson/motion-and-audio/sprite-sheets","minutes":9,"keyIdea":"A sprite sheet gives instant random access to any frame with steps() timing, but its cost is decoded memory (width times height times four bytes, regardless of how well the PNG compressed) which is why a 4096-square sheet can cost 67MB and evict everything else on the page."},{"slug":"interactive-motion","title":"Motion that responds to state","url":"https://addaly.com/learn/motion-and-audio/interactive-motion","api":"https://addaly.com/api/lesson/motion-and-audio/interactive-motion","minutes":10,"keyIdea":"Interactive motion is a state machine, and the hard part is interruption: a tool like Rive blends from the current position automatically, CSS transitions get this free from the browser, and a play-a-clip approach gets it not at all."},{"slug":"hand-over-a-file","title":"Send the developer a file, not a video","url":"https://addaly.com/learn/motion-and-audio/hand-over-a-file","api":"https://addaly.com/api/lesson/motion-and-audio/hand-over-a-file","minutes":9,"keyIdea":"If a developer cannot recolour it, pause it, or place it on a dark background, you exported the wrong format."},{"slug":"the-motion-spec","title":"The specification a developer can build from","url":"https://addaly.com/learn/motion-and-audio/the-motion-spec","api":"https://addaly.com/api/lesson/motion-and-audio/the-motion-spec","minutes":9,"keyIdea":"A recording shows one playthrough of the happy path, so the specification has to supply what it cannot (trigger, interrupt behaviour, exit, loop count, responsive numbers and reduced-motion substitution) and it should be reviewed at quarter speed on the oldest device available."}]},{"slug":"putting-two-images-together","title":"Putting two images together","summary":"Compositing from the arithmetic up: what a matte is and where one comes from, why a dark fringe means the alpha convention is wrong, what blend modes really compute, how a key is rescued by despill and light wrap rather than by better settings, and what a tracker and a camera solver can and cannot know.","outcome":"Combine two pieces of footage that were never filmed together so the seam does not show: building the matte by the cheapest route the shot allows, diagnosing an edge fringe from its colour, repairing spill and edge interaction rather than the matte's interior, attaching the insert with a track or solve whose error you have read, and matching black level, grain, focus and lens distortion in a defensible order.","lessons":[{"slug":"what-a-matte-is","title":"The greyscale image that decides everything","url":"https://addaly.com/learn/motion-and-audio/what-a-matte-is","api":"https://addaly.com/api/lesson/motion-and-audio/what-a-matte-is","minutes":10,"keyIdea":"A composite is one weighted mix per pixel, so the interesting work is in the grey edge values; and a difficult key is solved by splitting the frame into a garbage matte, a solid core and a narrow edge band rather than by finding better keyer settings."},{"slug":"alpha-and-premultiplication","title":"The dark fringe and what causes it","url":"https://addaly.com/learn/motion-and-audio/alpha-and-premultiplication","api":"https://addaly.com/api/lesson/motion-and-audio/alpha-and-premultiplication","minutes":10,"keyIdea":"Premultiplied RGB has already been multiplied by alpha, so compositing it with the straight formula multiplies the edges twice: a dark fringe means premultiplied treated as straight, a bright halo means the reverse, and colour correction belongs between an unpremultiply and a re-premultiply."},{"slug":"blend-modes-are-arithmetic","title":"Every blend mode is one line of arithmetic","url":"https://addaly.com/learn/motion-and-audio/blend-modes-are-arithmetic","api":"https://addaly.com/api/lesson/motion-and-audio/blend-modes-are-arithmetic","minutes":9,"keyIdea":"Multiply can only darken and drops white, Screen can only lighten and drops black, Add is physically correct for light and clips in 8-bit, and Difference is a measuring instrument rather than a look, which is why stock light elements are filmed on black and fail over a bright sky."},{"slug":"the-shoot-decides-the-key","title":"A green screen is fixed on set, not in the edit","url":"https://addaly.com/learn/motion-and-audio/the-shoot-decides-the-key","api":"https://addaly.com/api/lesson/motion-and-audio/the-shoot-decides-the-key","minutes":10,"keyIdea":"A keyer builds a matte out of colour information, so anything that degrades colour on set (uneven light, spill, subsampling) cannot be recovered afterwards."},{"slug":"despill-and-light-wrap","title":"Spill is real light, and light wrap is an honest fake","url":"https://addaly.com/learn/motion-and-audio/despill-and-light-wrap","api":"https://addaly.com/api/lesson/motion-and-audio/despill-and-light-wrap","minutes":10,"keyIdea":"Green bounce lands on the subject where alpha is one, so the matte cannot remove it: despill clamps green to the average of red and blue and therefore desaturates anything genuinely green, and light wrap replaces the missing interaction between subject and background by pushing a blurred copy of the background onto the edge band."},{"slug":"rotoscoping","title":"Drawing the matte by hand","url":"https://addaly.com/learn/motion-and-audio/rotoscoping","api":"https://addaly.com/api/lesson/motion-and-audio/rotoscoping","minutes":10,"keyIdea":"Roto is done by halving intervals rather than working forward frame by frame, with the subject split into simply-moving parts, and machine segmentation is best used to generate the garbage and core mattes in seconds while the hand work is spent only on the edge band it gets wrong."},{"slug":"tracking","title":"What a tracker can and cannot see","url":"https://addaly.com/learn/motion-and-audio/tracking","api":"https://addaly.com/api/lesson/motion-and-audio/tracking","minutes":10,"keyIdea":"A tracker correlates a patch of pixels against a search region, so a feature on a straight edge is unsolvable along that edge (the aperture problem) and every good feature is one with contrast in two directions."},{"slug":"camera-solve-and-parallax","title":"Solving for a camera, and when you cannot","url":"https://addaly.com/learn/motion-and-audio/camera-solve-and-parallax","api":"https://addaly.com/api/lesson/motion-and-audio/camera-solve-and-parallax","minutes":11,"keyIdea":"A camera solve triangulates depth from parallax, so a purely rotating camera carries no depth information at all and can only be solved as a nodal pan; and reprojection error in pixels, not the look of the point cloud, is the number that says whether the solve will hold."},{"slug":"matching-the-plate","title":"Black level, grain, focus, and the order to do them in","url":"https://addaly.com/learn/motion-and-audio/matching-the-plate","api":"https://addaly.com/api/lesson/motion-and-audio/matching-the-plate","minutes":11,"keyIdea":"A composite usually fails on black level first and grain second, both of which are measurable rather than matters of taste, and grain and lens distortion go last in the chain because they are properties of the camera, so anything applied after them is physically happening inside the lens."}]},{"slug":"codecs-colour-and-delivery","title":"Codecs, colour and delivery","summary":"What a compressor throws away and why, the difference between a frame you can seek to and one you cannot, how to hit a quality target or a size target on purpose, and the four colour and timing decisions behind most files that look washed out, banded or juddery when they arrive.","outcome":"Export a piece of video against a stated constraint (a size budget, a platform's requirements, an archival master, an editable intermediate) by choosing the codec class, rate-control mode, bit depth and colour tags from what the file is for; and diagnose a delivered file that looks milky, crushed, banded, juddery or twenty times too large by naming which of those decisions produced it.","lessons":[{"slug":"what-a-codec-discards","title":"What a codec throws away","url":"https://addaly.com/learn/motion-and-audio/what-a-codec-discards","api":"https://addaly.com/api/lesson/motion-and-audio/what-a-codec-discards","minutes":11,"keyIdea":"Compression exploits specific limits of vision (colour resolution first, then fine detail within blocks) so the bitrate a clip needs is set by how unpredictable its content is rather than by its resolution, and noise is expensive precisely because it cannot be predicted."},{"slug":"intra-vs-inter-frames","title":"Frames that stand alone, and frames that do not","url":"https://addaly.com/learn/motion-and-audio/intra-vs-inter-frames","api":"https://addaly.com/api/lesson/motion-and-audio/intra-vs-inter-frames","minutes":10,"keyIdea":"A P- or B-frame is defined in terms of its neighbours, so a decoder cannot show frame 43 without decoding from the last keyframe forward, which is why long-GOP material scrubs badly, why all-intra intermediates exist, and why a proxy beats a hardware upgrade."},{"slug":"crf-and-bitrate","title":"Quality target or size target","url":"https://addaly.com/learn/motion-and-audio/crf-and-bitrate","api":"https://addaly.com/api/lesson/motion-and-audio/crf-and-bitrate","minutes":10,"keyIdea":"CRF asks for a quality and lets the size fall where it may, two-pass asks for a size and distributes the bits; the preset changes how hard the encoder searches rather than the quality it aims at, and a change of about six in CRF roughly halves or doubles the file."},{"slug":"the-gamma-shift","title":"Why your export looks washed out","url":"https://addaly.com/learn/motion-and-audio/the-gamma-shift","api":"https://addaly.com/api/lesson/motion-and-audio/the-gamma-shift","minutes":10,"keyIdea":"Limited range puts black at 16 and white at 235 while full range uses the whole 0 to 255, so a milky, low-contrast export is limited data read as full, a crushed and over-contrasty one is full data read as limited, and untagged files leave every player to guess differently."},{"slug":"bit-depth-and-banding","title":"Counting the steps in a gradient","url":"https://addaly.com/learn/motion-and-audio/bit-depth-and-banding","api":"https://addaly.com/api/lesson/motion-and-audio/bit-depth-and-banding","minutes":10,"keyIdea":"An 8-bit channel has 256 levels, so a fifty-level sky across a 1080-pixel frame has steps 21 pixels wide and bands visibly. And dither works by turning a structured quantisation edge into random error the eye integrates as smooth."},{"slug":"log-and-luts","title":"Log footage and what a LUT is not","url":"https://addaly.com/learn/motion-and-audio/log-and-luts","api":"https://addaly.com/api/lesson/motion-and-audio/log-and-luts","minutes":11,"keyIdea":"Log encoding allocates code values roughly evenly per stop so a wide range survives a limited file, and a LUT is a fixed lookup table with a defined input domain, which is why a conversion LUT is decoding rather than grading, and why applying a look before exposure is corrected destroys detail permanently."},{"slug":"frame-rate-and-cadence","title":"Frame rates, shutter and judder","url":"https://addaly.com/learn/motion-and-audio/frame-rate-and-cadence","api":"https://addaly.com/api/lesson/motion-and-audio/frame-rate-and-cadence","minutes":10,"keyIdea":"Motion reads as continuous because each frame carries blur covering roughly half the interval to the next (the 180-degree rule) and judder comes from showing frames for unequal lengths of time, as 3:2 pulldown does when 24 is forced onto a 60Hz display."},{"slug":"exporting-without-a-huge-file","title":"Your hero video is why the page feels slow","url":"https://addaly.com/learn/motion-and-audio/exporting-without-a-huge-file","api":"https://addaly.com/api/lesson/motion-and-audio/exporting-without-a-huge-file","minutes":10,"keyIdea":"File size follows how much changes between frames, not how many pixels are in one, so bitrate and content, not resolution, are the levers."},{"slug":"ffmpeg-the-free-path","title":"The tool under most of the others","url":"https://addaly.com/learn/motion-and-audio/ffmpeg-the-free-path","api":"https://addaly.com/api/lesson/motion-and-audio/ffmpeg-the-free-path","minutes":10,"keyIdea":"Options before -i apply to reading and options after apply to writing, -c copy trims and joins with no decode and no loss, and -movflags +faststart moves the MP4 index to the front so a web video can start before it has finished downloading."}]},{"slug":"capturing-sound","title":"Capturing sound","summary":"Recording a voice in a room you cannot rebuild: what the two microphone constructions can and cannot do, why distance beats equipment, where the level should sit and why the two ends of that range are not symmetrical, what the noise floor costs you three steps later, and how to get two devices into sync and into phase.","outcome":"Record a usable voice in an ordinary room (choosing pattern and distance from what the room is doing rather than from a specification sheet, setting gain so peaks land with headroom you can justify, capturing room tone as a matter of routine, and bringing a second microphone or a second device in without comb filtering or drift) and say for any given capture fault whether it can be repaired afterwards or not.","lessons":[{"slug":"what-a-microphone-measures","title":"Pressure, gradient, and everything that follows","url":"https://addaly.com/learn/motion-and-audio/what-a-microphone-measures","api":"https://addaly.com/api/lesson/motion-and-audio/what-a-microphone-measures","minutes":10,"keyIdea":"A sealed capsule measures pressure and is omnidirectional with no proximity effect, while an open one measures the front-to-back difference and gains both directionality and a close-up bass lift. And a shotgun's interference tube only works where the tube length is comparable to the wavelength."},{"slug":"sound-is-half-the-picture","title":"People forgive a soft picture and leave over bad sound","url":"https://addaly.com/learn/motion-and-audio/sound-is-half-the-picture","api":"https://addaly.com/api/lesson/motion-and-audio/sound-is-half-the-picture","minutes":10,"keyIdea":"Distance and soft furnishings set the ratio of voice to room; the microphone's price is not on that list."},{"slug":"the-room-not-the-mic","title":"Direct sound, reverberant sound, and the distance between them","url":"https://addaly.com/learn/motion-and-audio/the-room-not-the-mic","api":"https://addaly.com/api/lesson/motion-and-audio/the-room-not-the-mic","minutes":11,"keyIdea":"Direct sound falls 6dB per doubling of distance while the reverberant field stays roughly constant, so the ratio that makes a recording sound professional is set by distance. And a porous absorber only works for frequencies whose quarter-wavelength is comparable to its thickness."},{"slug":"gain-structure-and-headroom","title":"Where the level should sit","url":"https://addaly.com/learn/motion-and-audio/gain-structure-and-headroom","api":"https://addaly.com/api/lesson/motion-and-audio/gain-structure-and-headroom","minutes":10,"keyIdea":"Clipping replaces the waveform's peak with a flat line carrying harmonics that were never in the source and cannot be recovered, while recording quietly only moves you closer to a noise floor that 24-bit has room to spare above, so the two ends of the meter are not symmetrical and headroom is cheap."},{"slug":"sample-rate-and-bit-depth","title":"Two numbers doing two different jobs","url":"https://addaly.com/learn/motion-and-audio/sample-rate-and-bit-depth","api":"https://addaly.com/api/lesson/motion-and-audio/sample-rate-and-bit-depth","minutes":10,"keyIdea":"Sample rate sets the frequency ceiling and anything above it folds back as an inharmonic alias, while bit depth sets dynamic range at about 6dB per bit, which is why 24-bit makes headroom cheap and why dither belongs only at the final reduction."},{"slug":"noise-floor","title":"What the noise floor costs you later","url":"https://addaly.com/learn/motion-and-audio/noise-floor","api":"https://addaly.com/api/lesson/motion-and-audio/noise-floor","minutes":11,"keyIdea":"Room noise is diffuse and roughly constant while the voice obeys the inverse square law, so every halving of distance buys 6dB of signal-to-noise for nothing; and spectral subtraction leaves a residue of isolated tonal bursts because the noise it subtracts is an average of something random."},{"slug":"phase-and-two-microphones","title":"Two microphones and a comb filter","url":"https://addaly.com/learn/motion-and-audio/phase-and-two-microphones","api":"https://addaly.com/api/lesson/motion-and-audio/phase-and-two-microphones","minutes":10,"keyIdea":"A path difference of d metres puts the first cancellation at 343/(2d) hertz and repeats at odd multiples, so a 34cm difference notches the speech band at 504Hz upward; and a polarity flip, being frequency-independent, cannot fix a difference caused by time."},{"slug":"latency-and-monitoring","title":"Latency, and why a speaker starts stumbling","url":"https://addaly.com/learn/motion-and-audio/latency-and-monitoring","api":"https://addaly.com/api/lesson/motion-and-audio/latency-and-monitoring","minutes":9,"keyIdea":"Buffer latency is buffer size divided by sample rate and is paid both ways, so a 512-sample buffer at 48kHz is over 20ms round trip (past the point where hearing your own voice late disrupts speech) and direct monitoring in hardware sidesteps the whole chain."},{"slug":"double-system-and-sync","title":"Two devices, one event","url":"https://addaly.com/learn/motion-and-audio/double-system-and-sync","api":"https://addaly.com/api/lesson/motion-and-audio/double-system-and-sync","minutes":10,"keyIdea":"Offset is a constant to be slid and drift is a rate error to be stretched, and the commonest reported drift is not a clock problem at all but a 1000/1001 frame-rate mismatch worth 3.6 seconds an hour, while timecode fixes the offset and does nothing about the drift."}]},{"slug":"shaping-and-mixing-sound","title":"Shaping and mixing sound","summary":"From a raw voice to a delivered mix: the three EQ moves that cover most speech, why compression makes sibilance worse, what pre-delay is really telling a listener, how a music bed and a voice stop competing, and the loudness and true-peak numbers a platform will measure you against.","outcome":"Take a raw voice recording to a delivered mix (filtering and cutting before boosting, ordering the chain so each stage is not re-creating work for the next, placing the voice in a space without losing intelligibility, sitting music under it by arrangement rather than by ducking alone, and hitting a named integrated loudness and true-peak ceiling with a gain change rather than a limiter) and predict what the mix will do on a phone speaker before hearing it there.","lessons":[{"slug":"eq-in-three-moves","title":"Three EQ moves that cover most voices","url":"https://addaly.com/learn/motion-and-audio/eq-in-three-moves","api":"https://addaly.com/api/lesson/motion-and-audio/eq-in-three-moves","minutes":10,"keyIdea":"High-pass below the speaker's fundamental, cut two to four decibels of mud between 200 and 400Hz, add a broad presence lift around 2 to 6kHz, and cut narrow while boosting wide, because problems are resonances and pleasantness is a shape."},{"slug":"turning-the-loud-bits-down","title":"Compression does not make anything louder","url":"https://addaly.com/learn/motion-and-audio/turning-the-loud-bits-down","api":"https://addaly.com/api/lesson/motion-and-audio/turning-the-loud-bits-down","minutes":11,"keyIdea":"A compressor only turns loud parts down; the make-up gain afterwards is what raises everything, including whatever noise sits in the gaps."},{"slug":"de-essing-and-plosives","title":"Wind, hiss, and why both are placement problems","url":"https://addaly.com/learn/motion-and-audio/de-essing-and-plosives","api":"https://addaly.com/api/lesson/motion-and-audio/de-essing-and-plosives","minutes":10,"keyIdea":"A plosive is a jet of air rather than a loud sound, so angling the microphone 15 to 30 degrees off axis prevents what no filter fully repairs. And a de-esser is a compressor with a filtered sidechain, which belongs after compression because compression is what raised the sibilance."},{"slug":"reverb-and-space","title":"Reverb is information about where","url":"https://addaly.com/learn/motion-and-audio/reverb-and-space","api":"https://addaly.com/api/lesson/motion-and-audio/reverb-and-space","minutes":10,"keyIdea":"Pre-delay corresponds to the distance of the first reflecting surface at about 34cm per millisecond, and increasing it separates the voice from its own tail, which is why a muddy dialogue reverb is fixed with pre-delay before it is fixed with level."},{"slug":"ducking-and-beds","title":"Music under speech","url":"https://addaly.com/learn/motion-and-audio/ducking-and-beds","api":"https://addaly.com/api/lesson/motion-and-audio/ducking-and-beds","minutes":10,"keyIdea":"A ducker can only react while a human automating the level can anticipate, so manual riding beats sidechain compression on edited material, and cutting a two to four decibel hole around 1.5 to 3kHz in the music costs less than the level drop it replaces."},{"slug":"three-unglamorous-layers","title":"Three boring sounds beat any filter","url":"https://addaly.com/learn/motion-and-audio/three-unglamorous-layers","api":"https://addaly.com/api/lesson/motion-and-audio/three-unglamorous-layers","minutes":10,"keyIdea":"Room tone plus one or two ordinary foley layers raises perceived quality more than any effect, and a Content ID claim is a match, not a verdict."},{"slug":"loudness-and-lufs","title":"The number every platform measures","url":"https://addaly.com/learn/motion-and-audio/loudness-and-lufs","api":"https://addaly.com/api/lesson/motion-and-audio/loudness-and-lufs","minutes":11,"keyIdea":"LUFS is a K-weighted, gated loudness measure, so platforms normalise playback and a master squashed 6dB louder than the target simply gets turned down 6dB, and the true-peak ceiling of −1 dBTP exists because the reconstructed waveform can exceed any stored sample."},{"slug":"small-speakers-and-translation","title":"What survives a phone speaker","url":"https://addaly.com/learn/motion-and-audio/small-speakers-and-translation","api":"https://addaly.com/api/lesson/motion-and-audio/small-speakers-and-translation","minutes":10,"keyIdea":"A phone speaker produces little below 500 to 700Hz, so bass is inferred from its harmonics through the missing-fundamental effect and a pure sine sub disappears entirely, which is why the 1 to 4kHz band, where intelligibility lives, is the one that has to be right."},{"slug":"the-order-of-operations","title":"The chain, and why the order is not arbitrary","url":"https://addaly.com/learn/motion-and-audio/the-order-of-operations","api":"https://addaly.com/api/lesson/motion-and-audio/the-order-of-operations","minutes":10,"keyIdea":"Each stage changes what the next one sees, so repair precedes processing, subtractive EQ precedes compression, de-essing follows it, and the master carries only loudness and safety: anything more there is a decision that belonged further up."}]},{"slug":"machines-that-make-sound-and-motion","title":"Machines that make sound and motion","summary":"Generative and analytic models in a motion and sound pipeline: what a text-to-speech system cannot read off the page, what a voice clone's embedding does and does not capture, why a five per cent word error rate lands on the words that matter, what a separator is estimating, and where copyright, licensing and disclosure are genuinely unresolved.","outcome":"Use a generative or analytic model inside a motion and sound pipeline (synthesised speech, a cloned voice, automatic captions, source separation, generated music, interpolated or upscaled frames) and state for each what it is estimating, which characteristic failure to look for and where, what consent or licence the use requires, and which parts of the surrounding law are unsettled rather than merely complicated.","lessons":[{"slug":"tts-and-prosody","title":"What a text-to-speech system cannot read","url":"https://addaly.com/learn/motion-and-audio/tts-and-prosody","api":"https://addaly.com/api/lesson/motion-and-audio/tts-and-prosody","minutes":10,"keyIdea":"Written text does not encode stress, and stress is meaning, so a synthesiser guesses prosody from statistical regularities and produces a convincing reading of the wrong sentence, which is why a pronunciation lexicon and SSML are quality control rather than decoration."},{"slug":"how-a-voice-is-cloned","title":"The vector that is supposed to be you","url":"https://addaly.com/learn/motion-and-audio/how-a-voice-is-cloned","api":"https://addaly.com/api/lesson/motion-and-audio/how-a-voice-is-cloned","minutes":11,"keyIdea":"A speaker embedding captures timbre (the resonances and average pitch that make a voice recognisable in a word) and not idiolect, the timing and stress habits of how a particular person speaks, which is why a clone convinces for three seconds and not for thirty."},{"slug":"a-cloned-voice-needs-consent","title":"A cloned voice needs a yes you can point to","url":"https://addaly.com/learn/motion-and-audio/a-cloned-voice-needs-consent","api":"https://addaly.com/api/lesson/motion-and-audio/a-cloned-voice-needs-consent","minutes":11,"keyIdea":"Consent for a voice is scoped (to a project, a set of uses, a period, and whether the model itself is kept) and disclosure to the audience is a separate duty on top of it."},{"slug":"captions-and-word-error-rate","title":"Five per cent, and which five per cent","url":"https://addaly.com/learn/motion-and-audio/captions-and-word-error-rate","api":"https://addaly.com/api/lesson/motion-and-audio/captions-and-word-error-rate","minutes":11,"keyIdea":"Word error rate is a uniform average over errors that are not uniformly distributed (they cluster on names, numbers and technical terms) and a generative recogniser can produce fluent sentences during silence, so no automatic transcript is publishable unread."},{"slug":"separating-a-mix","title":"Taking a mixture apart","url":"https://addaly.com/learn/motion-and-audio/separating-a-mix","api":"https://addaly.com/api/lesson/motion-and-audio/separating-a-mix","minutes":10,"keyIdea":"Separation estimates a mask per source per time-frequency bin, so where two sources had energy in the same bin the split is a learned guess rather than a recovery; and because the masks partition the mixture, the stems sum back cleanly, which is what makes separate-fix-recombine a gentler repair than processing the whole mix."},{"slug":"generated-music-and-unsettled-law","title":"Generated music, and three separate legal questions","url":"https://addaly.com/learn/motion-and-audio/generated-music-and-unsettled-law","api":"https://addaly.com/api/lesson/motion-and-audio/generated-music-and-unsettled-law","minutes":11,"keyIdea":"Whether training was lawful, whether an output infringes, and whether an output is owned are three different questions with different answers in different jurisdictions; and the practical response is records, terms, indemnities and checking the output, because the law is genuinely unsettled rather than merely complicated."},{"slug":"what-a-licence-covers","title":"What a music licence actually covers","url":"https://addaly.com/learn/motion-and-audio/what-a-licence-covers","api":"https://addaly.com/api/lesson/motion-and-audio/what-a-licence-covers","minutes":11,"keyIdea":"A recording needs both a sync licence for the composition and a master licence for the performance, royalty-free means no recurring royalty rather than no conditions, and a Creative Commons attribution requirement is a legal condition whose omission leaves you unlicensed."},{"slug":"generated-and-interpolated-frames","title":"Frames that were never photographed","url":"https://addaly.com/learn/motion-and-audio/generated-and-interpolated-frames","api":"https://addaly.com/api/lesson/motion-and-audio/generated-and-interpolated-frames","minutes":10,"keyIdea":"Interpolation assumes every pixel has a correspondence in the neighbouring frame, so it tears at occlusion boundaries and fragments thin structures; and an upscaler does not reveal detail but fabricates it, which makes upscaled output unusable as a record of anything."},{"slug":"provenance-and-disclosure","title":"Provenance, watermarks and what to tell people","url":"https://addaly.com/learn/motion-and-audio/provenance-and-disclosure","api":"https://addaly.com/api/lesson/motion-and-audio/provenance-and-disclosure","minutes":10,"keyIdea":"Provenance is a signed record of what cooperating tools reported doing and can be stripped by an ordinary re-encode, while detection is an inference that always trails the generators, so an absent credential or an undetected watermark is evidence of nothing, and disclosure is a separate question from either."}]}]},{"slug":"visual-storytelling","title":"Making It Say Something","tagline":"Clean work that communicates nothing is the commonest self-taught failure, and it is fixable.","description":"Craft and effect are different skills, and the second is rarely taught. This course covers extracting a real brief from a client who has none, ranking a design so one message survives a blur, joining story beats with but and therefore, what the first second must do and where attention-engineering crosses a line, a one-page brand system, designing for a reel, a flyer and a 150-pixel thumbnail, and building a body of work with a point of view.","level":"beginner","track":"create","url":"https://addaly.com/learn/visual-storytelling","lessons":64,"minutes":556,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/visual-storytelling.pdf","pages":374,"bytes":4123280,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/visual-storytelling.pdf","cover":"https://addaly.com/textbooks/look/visual-storytelling/1.webp?v=2026-10-07-4123280"},"film":null,"modules":[{"slug":"before-the-software","title":"Before you open the software","summary":"Most work that communicates nothing was doomed before the first file was created, because nobody wrote down who it was for or what it had to change. This block builds the document that every later decision is checked against: the one person who will see it, what they believe before they see it, what they should believe afterwards, the constraints that were true all along, and the measure everyone agreed to in advance.","outcome":"Turn a vague request into a written brief naming one specific viewer, their belief before and after, the seven constraints the work must survive, and an agreed measure of success, and defend a design decision by pointing at that document rather than at taste.","lessons":[{"slug":"clean-and-empty","title":"Nice work. What is it for?","url":"https://addaly.com/learn/visual-storytelling/clean-and-empty","api":"https://addaly.com/api/lesson/visual-storytelling/clean-and-empty","minutes":8,"keyIdea":"Before you open any software, write one sentence naming who sees this and what should be different in their head afterwards."},{"slug":"the-real-brief","title":"Nobody is going to hand you a real brief","url":"https://addaly.com/learn/visual-storytelling/the-real-brief","api":"https://addaly.com/api/lesson/visual-storytelling/the-real-brief","minutes":9,"keyIdea":"A request names an object; a brief names who sees it, what they believe now, and what should be different afterwards: write it down and get it confirmed."},{"slug":"audience-as-a-person","title":"\"Young urban professionals\" cannot be persuaded","url":"https://addaly.com/learn/visual-storytelling/audience-as-a-person","api":"https://addaly.com/api/lesson/visual-storytelling/audience-as-a-person","minutes":9,"keyIdea":"Replace the demographic with one written portrait naming the device, the posture, the emotional state and the past disappointment, because those four facts decide real design questions and age never does."},{"slug":"the-before-state","title":"You cannot move someone without knowing where they are standing","url":"https://addaly.com/learn/visual-storytelling/the-before-state","api":"https://addaly.com/api/lesson/visual-storytelling/the-before-state","minutes":9,"keyIdea":"Write the viewer's belief before and after in their own words, then check that every element shortens the distance between those two sentences; and diagnose a stalled piece by asking whether it failed at attention, comprehension or belief."},{"slug":"constraints-are-the-brief","title":"The constraints were true all along; you just found out late","url":"https://addaly.com/learn/visual-storytelling/constraints-are-the-brief","api":"https://addaly.com/api/lesson/visual-storytelling/constraints-are-the-brief","minutes":8,"keyIdea":"Write the seven constraints (format, viewing situation, production route, both deadlines, split budget, existing assets and the approver) before designing, because each one is a filter that rejects whole classes of idea in seconds rather than days."},{"slug":"discovery-questions","title":"Six questions, and what to do when they cannot answer","url":"https://addaly.com/learn/visual-storytelling/discovery-questions","api":"https://addaly.com/api/lesson/visual-storytelling/discovery-questions","minutes":9,"keyIdea":"Ask six specific questions (including what has been tried before, what will never be approved, and who else must say yes) and when the client cannot answer, write a draft brief for them to correct rather than pressing for invention."},{"slug":"using-reference-honestly","title":"Reference, and the line you actually cross","url":"https://addaly.com/learn/visual-storytelling/using-reference-honestly","api":"https://addaly.com/api/lesson/visual-storytelling/using-reference-honestly","minutes":9,"keyIdea":"Take structure, mechanism and constraint from reference and never surface (test it by asking whether someone who knows the original would recognise it in yours), and write under each board item what you are taking, because an unlabelled board drifts into copying by itself."},{"slug":"what-success-looks-like","title":"Agree the measure before you make the thing","url":"https://addaly.com/learn/visual-storytelling/what-success-looks-like","api":"https://addaly.com/api/lesson/visual-storytelling/what-success-looks-like","minutes":8,"keyIdea":"Agree one outcome measure and one diagnostic measure before production, build the attribution mechanism into the artwork itself, and state up front how noisy the result will be, because a limitation named in advance is a position and the same sentence afterwards is an excuse."}]},{"slug":"making-one-message-survive","title":"Making one message survive","summary":"A viewer gives you a glance, and a glance sees contrast, position and size, not your carefully written third line. This block is the mechanics of that glance: the five levers that create emphasis, why contrast rather than colour is the only thing the eye actually reports, how much each added element costs the rest, what space is doing when it looks like nothing, and the four cheap tests that break a design before an audience does.","outcome":"Rank a design into three levels using at most two emphasis levers per element, measure its contrast against a stated ratio, prove the hierarchy with a blur, greyscale, flip and distance test, and delete the element you like most when it competes with the message.","lessons":[{"slug":"one-message","title":"A design that says four things says none","url":"https://addaly.com/learn/visual-storytelling/one-message","api":"https://addaly.com/api/lesson/visual-storytelling/one-message","minutes":8,"keyIdea":"Rank every element into three levels and check by blurring the design: if more than one thing survives the blur, nothing does."},{"slug":"the-five-levers","title":"There are only five ways to make something look important","url":"https://addaly.com/learn/visual-storytelling/the-five-levers","api":"https://addaly.com/api/lesson/visual-storytelling/the-five-levers","minutes":9,"keyIdea":"Emphasis comes from five levers (size, weight, contrast, position and isolation) and each element should use at most two, because every lever spent consumes contrast the lower levels need to stay distinguishable."},{"slug":"contrast-makes-meaning","title":"The eye reports differences, never values","url":"https://addaly.com/learn/visual-storytelling/contrast-makes-meaning","api":"https://addaly.com/api/lesson/visual-storytelling/contrast-makes-meaning","minutes":9,"keyIdea":"The visual system reports differences rather than values, so legibility is a measurable relationship (at least 4.5:1 for body text) and a hierarchy built on hue alone vanishes in greyscale, in one-colour print and for anyone with colour vision deficiency."},{"slug":"where-the-eye-goes","title":"You see far less at once than you think","url":"https://addaly.com/learn/visual-storytelling/where-the-eye-goes","api":"https://addaly.com/api/lesson/visual-storytelling/where-the-eye-goes","minutes":9,"keyIdea":"Detailed vision covers only about two degrees, so viewers navigate by coarse peripheral cues (contrast, shape and especially motion) which is why a blur simulates what pulls the next glance and why the F-pattern describes pages with no hierarchy rather than prescribing one."},{"slug":"the-cost-of-an-element","title":"Every element you add taxes the ones already there","url":"https://addaly.com/learn/visual-storytelling/the-cost-of-an-element","api":"https://addaly.com/api/lesson/visual-storytelling/the-cost-of-an-element","minutes":8,"keyIdea":"Elements cost n(n−1)/2 relationships plus the viewer's decision time, so subtract before rearranging and group what cannot be removed: density is only a problem when it is unstructured."},{"slug":"negative-space","title":"The empty part is doing the most work","url":"https://addaly.com/learn/visual-storytelling/negative-space","api":"https://addaly.com/api/lesson/visual-storytelling/negative-space","minutes":8,"keyIdea":"Gaps are grouping instructions: keep space within a group smaller than the space around it, work in multiples of one base unit, and when space is unaffordable switch to small consistent gaps rather than abandoning the system."},{"slug":"checks-that-break-a-design","title":"Four cheap tests that fail a design before an audience does","url":"https://addaly.com/learn/visual-storytelling/checks-that-break-a-design","api":"https://addaly.com/api/lesson/visual-storytelling/checks-that-break-a-design","minutes":8,"keyIdea":"Degrade your own vision on purpose (blur, greyscale, flip, and view at true size and distance) because after two hours you read your layout from memory, and these four tests plus a three-second stranger restore something like a first glance."},{"slug":"killing-the-favourite-part","title":"The bit you are proudest of is usually the bit in the way","url":"https://addaly.com/learn/visual-storytelling/killing-the-favourite-part","api":"https://addaly.com/api/lesson/visual-storytelling/killing-the-favourite-part","minutes":8,"keyIdea":"The element you invested most in competes hardest for the first glance, so judge it against the written message rather than against its cost, and demote it to level three before you consider deleting it."}]},{"slug":"the-shape-of-a-story","title":"The shape of a story","summary":"A sequence of true statements is not a story, and most brand films are exactly that. This block covers the minimum unit (a change of state) and then the structure built on it: how a ninety-second piece actually divides, why one concrete detail buys more belief than ten adjectives, why a piece with nothing at stake cannot hold anyone, who the story is allowed to be about, and how to end without either trailing off or stacking four requests.","outcome":"Build a short piece as a chain of state changes joined by but and therefore, allocate its seconds to a stated structure, name the protagonist and the cost they carry, replace generic claims with checkable detail, and land one ask the piece has earned.","lessons":[{"slug":"but-and-therefore","title":"\"And then\" is the weakest word you own","url":"https://addaly.com/learn/visual-storytelling/but-and-therefore","api":"https://addaly.com/api/lesson/visual-storytelling/but-and-therefore","minutes":9,"keyIdea":"Between any two beats, if the honest joining word is \"and then\", the second beat is deletable: rewrite until it is \"but\" or \"therefore\"."},{"slug":"the-first-second","title":"The first second is a promise, and you have to pay it","url":"https://addaly.com/learn/visual-storytelling/the-first-second","api":"https://addaly.com/api/lesson/visual-storytelling/the-first-second","minutes":9,"keyIdea":"The opening has one job (answer \"what is this and is it for me\") and it is only craft rather than bait if the rest of the piece pays what it promised."},{"slug":"change-is-the-unit","title":"If nothing changes, it is not a story","url":"https://addaly.com/learn/visual-storytelling/change-is-the-unit","api":"https://addaly.com/api/lesson/visual-storytelling/change-is-the-unit","minutes":8,"keyIdea":"A story is a state, an event, and a different state; if the start and end states match you have a description, which must earn attention through usefulness or beauty rather than suspense."},{"slug":"the-ninety-second-shape","title":"Where the ninety seconds actually go","url":"https://addaly.com/learn/visual-storytelling/the-ninety-second-shape","api":"https://addaly.com/api/lesson/visual-storytelling/the-ninety-second-shape","minutes":9,"keyIdea":"Give the turn the largest share of the running time and the setup the smallest, check the script against 140 to 160 words per minute before recording, and test the structure as seven plain sentences while changes are still free."},{"slug":"specific-beats-general","title":"One checkable detail outperforms ten adjectives","url":"https://addaly.com/learn/visual-storytelling/specific-beats-general","api":"https://addaly.com/api/lesson/visual-storytelling/specific-beats-general","minutes":8,"keyIdea":"A specific detail is believed because it could be contradicted, so replace adjectives with checkable nouns and numbers, but only true ones, because precision makes a false claim worse rather than merely wrong."},{"slug":"show-the-cost","title":"Nothing is at stake, so nobody is watching","url":"https://addaly.com/learn/visual-storytelling/show-the-cost","api":"https://addaly.com/api/lesson/visual-storytelling/show-the-cost","minutes":8,"keyIdea":"Attention attaches to unresolved questions, so name what was risked, given up or went wrong: a real admission makes the surrounding claims believable, while invented adversity is detectable by its vagueness against a concrete resolution."},{"slug":"who-is-the-protagonist","title":"The person who changes is the one it is about","url":"https://addaly.com/learn/visual-storytelling/who-is-the-protagonist","api":"https://addaly.com/api/lesson/visual-storytelling/who-is-the-protagonist","minutes":8,"keyIdea":"The protagonist is whoever is different at the end: test a script by deleting the brand name and seeing whether a story remains, and put the brand at the turning point rather than in the leading role."},{"slug":"the-ending-problem","title":"Endings, and the four asks that cancel each other out","url":"https://addaly.com/learn/visual-storytelling/the-ending-problem","api":"https://addaly.com/api/lesson/visual-storytelling/the-ending-problem","minutes":8,"keyIdea":"An ending must resolve, land the meaning and ask once: four simultaneous asks force a choice at the moment attention is lowest, and an ask larger than the piece earned reframes everything before it as a pitch."}]},{"slug":"getting-the-material","title":"Getting the material","summary":"Interviews, footage, photographs, archive and numbers are the raw material a structure is built from. This module covers how to ask questions that produce usable answers, which images carry meaning and which are wallpaper, what consent actually has to cover, how anonymity fails, how licences work, and how to audit what you have before you start building.","outcome":"Gather the material a planned piece needs: run an interview that yields self-contained answers, distinguish images that carry meaning from images that decorate, obtain consent whose scope matches the intended use, protect a subject against jigsaw identification, clear found material against its actual licence, present a number with its denominator, and audit every beat against the asset that will carry it before building begins.","lessons":[{"slug":"ugly-boxes","title":"Draw ugly boxes now or pay for it later","url":"https://addaly.com/learn/visual-storytelling/ugly-boxes","api":"https://addaly.com/api/lesson/visual-storytelling/ugly-boxes","minutes":8,"keyIdea":"Plan in throwaway frames while changes still cost thirty seconds, and get consent in writing before the camera comes out, not after."},{"slug":"interviewing-for-usable-answers","title":"Most interview footage is unusable, and the question is why","url":"https://addaly.com/learn/visual-storytelling/interviewing-for-usable-answers","api":"https://addaly.com/api/lesson/visual-storytelling/interviewing-for-usable-answers","minutes":9,"keyIdea":"Your question is absent from the finished piece, so ask for self-contained answers and for specific moments rather than summaries, and check every number, because memory reconstructs rather than replays."},{"slug":"images-that-carry","title":"Half your footage is wallpaper","url":"https://addaly.com/learn/visual-storytelling/images-that-carry","api":"https://addaly.com/api/lesson/visual-storytelling/images-that-carry","minutes":8,"keyIdea":"Every image should illustrate, prove or bridge: cover the picture and then the words, and if understanding is unchanged either way the image is carrying nothing, while an image that contradicts the words quietly overrides them."},{"slug":"consent-release-and-withdrawal","title":"Consent is a scope, not a signature","url":"https://addaly.com/learn/visual-storytelling/consent-release-and-withdrawal","api":"https://addaly.com/api/lesson/visual-storytelling/consent-release-and-withdrawal","minutes":9,"keyIdea":"A release fails on scope rather than signature, so state in plain words what the material is for, where it will appear, for how long and that it may be edited, and agree a withdrawal route before anyone needs it."},{"slug":"anonymity-and-harm","title":"Anonymity fails by combination, not by name","url":"https://addaly.com/learn/visual-storytelling/anonymity-and-harm","api":"https://addaly.com/api/lesson/visual-storytelling/anonymity-and-harm","minutes":9,"keyIdea":"Anonymity fails through the combination of details rather than the name, so count how many people each detail still fits, prefer subtractive protection over blur or pitch-shift, strip metadata, and tell the person plainly that identification can be made harder but never impossible."},{"slug":"found-material-and-licences","title":"Free to download is not free to use","url":"https://addaly.com/learn/visual-storytelling/found-material-and-licences","api":"https://addaly.com/api/lesson/visual-storytelling/found-material-and-licences","minutes":9,"keyIdea":"A licence answers whether you may use it commercially, must credit it, may change it, and what it obliges your own work to become. And ShareAlike and NonCommercial are the two clauses that reach furthest into work you thought was yours."},{"slug":"data-as-material","title":"A number is a claim with the argument removed","url":"https://addaly.com/learn/visual-storytelling/data-as-material","api":"https://addaly.com/api/lesson/visual-storytelling/data-as-material","minutes":9,"keyIdea":"Every number carries hidden choices of base, window and definition, so state the absolute alongside the relative, name the window, and label the axis, because no chart is neutral and the honest move is making your choices visible rather than claiming not to have made any."},{"slug":"the-material-audit","title":"Find the missing shot now, not in the edit","url":"https://addaly.com/learn/visual-storytelling/the-material-audit","api":"https://addaly.com/api/lesson/visual-storytelling/the-material-audit","minutes":8,"keyIdea":"List every beat against the specific file that carries it, so that a missing asset becomes a shopping list and an impossible beat becomes a rewrite, and then mark what you will not use, because selection cost grows with the number of pairs you could compare, not with the number of takes."}]},{"slug":"words-that-carry","title":"Words that carry the picture","summary":"Almost every visual piece contains words: a headline, a caption, a subtitle, a voiceover, the line before the fold. They are usually written last and badly. This module covers what a headline is for, where text is cut off, how writing for the ear differs from writing for the eye, how to caption properly, and how to cut your own work.","outcome":"Write the words around a visual piece so they do the work the pictures cannot: a headline that earns the first line, an opening that survives truncation, narration that can be followed without rewinding, subtitles inside real reading-speed limits, a caption that adds rather than restates, and a draft cut by a third without losing an idea.","lessons":[{"slug":"the-headline-does-one-job","title":"A headline is not a summary","url":"https://addaly.com/learn/visual-storytelling/the-headline-does-one-job","api":"https://addaly.com/api/lesson/visual-storytelling/the-headline-does-one-job","minutes":8,"keyIdea":"A headline's only job is to get the next line read, so favour photographable nouns, put the most specific word first because text is always cut from the right, and write twenty before keeping one, but never promise something the piece does not pay."},{"slug":"writing-before-the-fold","title":"Everything you write has a fold in it","url":"https://addaly.com/learn/visual-storytelling/writing-before-the-fold","api":"https://addaly.com/api/lesson/visual-storytelling/writing-before-the-fold","minutes":8,"keyIdea":"Every surface truncates and offers a more link, and the reader decides at that cut, so make the pre-fold text a complete statement rather than a tease, delete the throat-clearing, and check the cut on a real phone rather than in a preview."},{"slug":"writing-for-the-ear","title":"A listener cannot go back","url":"https://addaly.com/learn/visual-storytelling/writing-for-the-ear","api":"https://addaly.com/api/lesson/visual-storytelling/writing-for-the-ear","minutes":9,"keyIdea":"A listener cannot backtrack, so finish each grammatical thought before starting the next, round numbers for the ear and put the exact figure on screen, and read the script aloud to find the sentence where you run out of breath."},{"slug":"captions-and-subtitles","title":"Most of your audience has the sound off","url":"https://addaly.com/learn/visual-storytelling/captions-and-subtitles","api":"https://addaly.com/api/lesson/visual-storytelling/captions-and-subtitles","minutes":10,"keyIdea":"Captions are limited by reading speed rather than screen space (two lines, around 17 characters a second, broken at clause boundaries) and because a viewer reading text cannot study the picture at the same time, captioning is a structural decision rather than a final step."},{"slug":"image-and-caption-together","title":"The caption decides what the photograph means","url":"https://addaly.com/learn/visual-storytelling/image-and-caption-together","api":"https://addaly.com/api/lesson/visual-storytelling/image-and-caption-together","minutes":8,"keyIdea":"A caption either fixes which of an image's possible meanings applies or adds a fact the image cannot contain, and the second is what earns its space, while alt text is a separate job describing the image for someone who cannot see it."},{"slug":"cutting-your-own-words","title":"Your first draft contains the route, not the destination","url":"https://addaly.com/learn/visual-storytelling/cutting-your-own-words","api":"https://addaly.com/api/lesson/visual-storytelling/cutting-your-own-words","minutes":8,"keyIdea":"A first draft records the thinking rather than the conclusion, so a third can usually go (delete the opening paragraph, run the mechanical passes, and cut against a stated limit) but stop before you remove the redundancy that lets a distracted reader catch up."},{"slug":"curse-of-knowledge","title":"You cannot un-know the thing you are explaining","url":"https://addaly.com/learn/visual-storytelling/curse-of-knowledge","api":"https://addaly.com/api/lesson/visual-storytelling/curse-of-knowledge","minutes":8,"keyIdea":"Knowing something changes how the signal seems from the inside, so you cannot audit your own work for clarity: write down what the reader already knows, define in passing on first use, and show it to one person who genuinely does not know."},{"slug":"writing-for-second-language-readers","title":"Most people reading your English did not grow up in it","url":"https://addaly.com/learn/visual-storytelling/writing-for-second-language-readers","api":"https://addaly.com/api/lesson/visual-storytelling/writing-for-second-language-readers","minutes":9,"keyIdea":"The cost for a second-language reader sits in phrasal verbs, idiom, stacked negation and elegant variation rather than in complex ideas, so use the same word for the same thing, prefer single-word verbs, and treat readability scores as a smoke alarm rather than a target."}]},{"slug":"materials-of-meaning","title":"Type, colour and image as meaning","summary":"Typefaces, colours and pictures carry meaning before anybody reads a word, and most of that meaning is learned rather than intrinsic. This module covers what a typeface actually says and why, what makes type readable at small sizes, how colour meaning changes across cultures while legibility does not, designing for eyes unlike your own, and choosing between a photograph, an illustration and a diagram.","outcome":"Choose type, colour and image for what they say rather than for taste: justify a typeface by its associations and its script coverage, set a measure and line-height that can actually be read, keep meaning out of hue alone, meet a stated contrast ratio, and say what a photograph, an illustration and a diagram each assert that the others cannot.","lessons":[{"slug":"brand-is-a-system","title":"Your brand is not the logo, it is what you repeat","url":"https://addaly.com/learn/visual-storytelling/brand-is-a-system","api":"https://addaly.com/api/lesson/visual-storytelling/brand-is-a-system","minutes":10,"keyIdea":"Write your type scale, colour roles, spacing unit and voice on one page with actual values, because in six weeks you will not remember them and the drift is what looks amateur."},{"slug":"what-a-typeface-says","title":"A typeface means where you have seen it before","url":"https://addaly.com/learn/visual-storytelling/what-a-typeface-says","api":"https://addaly.com/api/lesson/visual-storytelling/what-a-typeface-says","minutes":9,"keyIdea":"A typeface means what the reader has been trained by exposure to expect, so associations are local and changeable, and before committing to one for multilingual work, check its script coverage, because a missing glyph renders as tofu."},{"slug":"type-that-can-be-read","title":"Point size is the wrong number to argue about","url":"https://addaly.com/learn/visual-storytelling/type-that-can-be-read","api":"https://addaly.com/api/lesson/visual-storytelling/type-that-can-be-read","minutes":9,"keyIdea":"Readability is set by x-height, measure and line height rather than by point size (45 to 75 characters a line, 1.4 to 1.6 line height) and capitals cost reading speed because they flatten the word shapes readers use as cues."},{"slug":"colour-means-locally","title":"Red is not danger everywhere","url":"https://addaly.com/learn/visual-storytelling/colour-means-locally","api":"https://addaly.com/api/lesson/visual-storytelling/colour-means-locally","minutes":9,"keyIdea":"Colour meaning is learned by cultural pairing and varies accordingly, while contrast, attention and colour vision are physiological and do not, so never carry information in hue alone, and check the design in greyscale."},{"slug":"designing-for-eyes-not-yours","title":"One in twelve men cannot see the difference you just used","url":"https://addaly.com/learn/visual-storytelling/designing-for-eyes-not-yours","api":"https://addaly.com/api/lesson/visual-storytelling/designing-for-eyes-not-yours","minutes":9,"keyIdea":"Colour vision deficiency, poor screens and sunlight make the impaired case the ordinary case, so measure contrast rather than eyeballing luminance, never encode meaning in hue alone, and honour reduced-motion, while knowing the 4.5:1 threshold is a contested floor rather than a guarantee."},{"slug":"the-photograph-is-an-argument","title":"Every photograph is mostly the part you cut off","url":"https://addaly.com/learn/visual-storytelling/the-photograph-is-an-argument","api":"https://addaly.com/api/lesson/visual-storytelling/the-photograph-is-an-argument","minutes":9,"keyIdea":"A photograph's edges, height, lens and chosen instant are all claims made before any editing, so cropping can mislead more than retouching does: the useful test is whether the person who was there would call it a fair account."},{"slug":"why-stock-images-fail","title":"The photograph that fits anywhere belongs nowhere","url":"https://addaly.com/learn/visual-storytelling/why-stock-images-fail","api":"https://addaly.com/api/lesson/visual-storytelling/why-stock-images-fail","minutes":8,"keyIdea":"A stock image is built to fit many contexts and therefore carries information about none, so readers skip it: replace it with a mediocre photograph of the actual thing, a diagram, or nothing at all, and reserve stock for abstraction and for protecting a real person."},{"slug":"illustration-diagram-or-photo","title":"Three pictures, three different promises","url":"https://addaly.com/learn/visual-storytelling/illustration-diagram-or-photo","api":"https://addaly.com/api/lesson/visual-storytelling/illustration-diagram-or-photo","minutes":8,"keyIdea":"A photograph claims this existed, an illustration claims this is the kind of thing, and a diagram claims these are the parts and their relations: choose by what the reader must do with the picture, and say what a diagram simplified, because boxes assert boundaries the world may not have."}]},{"slug":"surface-and-distribution","title":"The surface and the system carrying it","summary":"A piece is never seen in the conditions it was made in. It appears at a particular size, in a particular shape, with the sound off, next to other things, ranked by a system whose objective is not yours. This module covers safe areas and crop chains, the still that recruits the play, designing for silence, the feed as context, what recommender systems actually optimise, and which numbers answer which question.","outcome":"Deliver a piece into the conditions it will actually meet: survive the crop chain and interface overlays, set a cover frame and link preview deliberately, carry meaning with the sound off and on a phone speaker, mock a design up inside a real feed, distinguish the platform's objective from your own, and read a retention curve to name the specific failure it records.","lessons":[{"slug":"designing-for-the-surface","title":"The same design fails in five different ways","url":"https://addaly.com/learn/visual-storytelling/designing-for-the-surface","api":"https://addaly.com/api/lesson/visual-storytelling/designing-for-the-surface","minutes":10,"keyIdea":"Design for the physical size and distance the piece will actually be seen at, because every surface has a different smallest legible element and resizing tools do not change what the piece says."},{"slug":"thumbnail-and-title","title":"The thumbnail and the title are one thing","url":"https://addaly.com/learn/visual-storytelling/thumbnail-and-title","api":"https://addaly.com/api/lesson/visual-storytelling/thumbnail-and-title","minutes":9,"keyIdea":"Title and thumbnail are two channels of one message: make them complementary rather than redundant, and only promise what the piece actually pays."},{"slug":"platform-shapes-and-safe-areas","title":"Something is always sitting on top of your picture","url":"https://addaly.com/learn/visual-storytelling/platform-shapes-and-safe-areas","api":"https://addaly.com/api/lesson/visual-storytelling/platform-shapes-and-safe-areas","minutes":9,"keyIdea":"The visible frame is smaller than the exported one and its boundaries change without notice, so compose for the intersection of every crop you will need, keep text out of the bottom fifth, and archive a wide master so a new shape is an export rather than a reshoot."},{"slug":"the-first-frame-is-a-still","title":"The still is what recruits the play","url":"https://addaly.com/learn/visual-storytelling/the-first-frame-is-a-still","api":"https://addaly.com/api/lesson/visual-storytelling/the-first-frame-is-a-still","minutes":8,"keyIdea":"Every moving piece is recruited by a still (cover, poster, link preview, paused first frame) so set each one deliberately, shoot a still rather than grabbing a frame, and get the preview right before the link is shared because the card is cached."},{"slug":"sound-off-and-silent-meaning","title":"It has to work silent and reward being unmuted","url":"https://addaly.com/learn/visual-storytelling/sound-off-and-silent-meaning","api":"https://addaly.com/api/lesson/visual-storytelling/sound-off-and-silent-meaning","minutes":9,"keyIdea":"Autoplay is muted by policy, so sound-on is an earned state (the silent version must carry the whole meaning and the sound must add something different), and a phone speaker reproduces almost nothing below about 300 Hz, so any effect you built from low frequencies is not there."},{"slug":"the-feed-is-the-context","title":"Nothing is ever seen on a white wall","url":"https://addaly.com/learn/visual-storytelling/the-feed-is-the-context","api":"https://addaly.com/api/lesson/visual-storytelling/the-feed-is-the-context","minutes":8,"keyIdea":"Conspicuousness is a relationship with whatever is beside your work, not a property of it, so mock designs up inside a real screenshot of the feed in both light and dark themes, and remember that adjacency you do not control changes the tone of anything not self-contained."},{"slug":"the-algorithm-is-not-your-audience","title":"The system is optimising something, and it is not your work","url":"https://addaly.com/learn/visual-storytelling/the-algorithm-is-not-your-audience","api":"https://addaly.com/api/lesson/visual-storytelling/the-algorithm-is-not-your-audience","minutes":9,"keyIdea":"Ranking systems maximise a proxy for a proxy, so optimising hard against a metric drifts the work away from what the metric stood for: optimise form, never the promise, treat algorithm folklore as survivorship, and own a route to your audience that nobody can switch off."},{"slug":"reading-the-numbers","title":"Which number answers which question","url":"https://addaly.com/learn/visual-storytelling/reading-the-numbers","api":"https://addaly.com/api/lesson/visual-storytelling/reading-the-numbers","minutes":9,"keyIdea":"Each stage of a piece has its own number and the retention curve is the only one that points at a place in the file, but small samples are mostly noise, so pick the success number before publishing, look for patterns across many pieces, and remember that the outcomes that matter most are frequently the ones nothing counts."}]},{"slug":"judgement-and-the-body-of-work","title":"Judgement, and the work that accumulates","summary":"The last skills are the ones that decide whether the others get used: testing on people who are not you, translating feedback into problems, defending a decision from the brief, knowing where persuasion becomes manipulation, representing people you are not, using AI tools honestly, and building a practice that improves rather than repeats.","outcome":"Take a piece from private judgement into public responsibility: run a five-second and an explain-back test on strangers, separate a client's observation from their prescription, defend a decision from the agreed brief and concede what is not load-bearing, identify manipulation by whether it survives being explained, represent people you are not without using them as decoration, disclose AI use, and construct the feedback that deliberate practice needs.","lessons":[{"slug":"showing-work-to-strangers","title":"Three tests, no budget, twenty minutes","url":"https://addaly.com/learn/visual-storytelling/showing-work-to-strangers","api":"https://addaly.com/api/lesson/visual-storytelling/showing-work-to-strangers","minutes":9,"keyIdea":"Comprehension can only be measured on somebody who does not already know, so run a five-second test, an explain-back and a first-click on five strangers: hand it over in silence and never ask whether they like it."},{"slug":"taking-feedback-without-drowning","title":"\"Make the logo bigger\" is a symptom, not an instruction","url":"https://addaly.com/learn/visual-storytelling/taking-feedback-without-drowning","api":"https://addaly.com/api/lesson/visual-storytelling/taking-feedback-without-drowning","minutes":9,"keyIdea":"People are reliable about what they noticed and unreliable about why, so never argue with an observation and never simply execute a prescription: ask what they were doing when they noticed it, batch the feedback, and spend your credibility only on what the message depends on."},{"slug":"defending-a-decision","title":"Argue from the document, not from taste","url":"https://addaly.com/learn/visual-storytelling/defending-a-decision","api":"https://addaly.com/api/lesson/visual-storytelling/defending-a-decision","minutes":8,"keyIdea":"Defend decisions from the agreed brief rather than from taste, in four sentences (goal, mechanism, evidence, cost of the alternative) then concede everything the message does not depend on, and when overruled state the risk once in writing and execute it properly."},{"slug":"persuasion-and-manipulation","title":"If explaining it would stop it working, it is manipulation","url":"https://addaly.com/learn/visual-storytelling/persuasion-and-manipulation","api":"https://addaly.com/api/lesson/visual-storytelling/persuasion-and-manipulation","minutes":10,"keyIdea":"Persuasion supplies reasons a person could evaluate while manipulation exploits a process they cannot inspect, so ask whether the technique would survive being explained; and remember that a fake scarcity claim works once per person and the damage never appears in the conversion figure."},{"slug":"representing-people-you-are-not","title":"Somebody is in this piece, and it is not you","url":"https://addaly.com/learn/visual-storytelling/representing-people-you-are-not","api":"https://addaly.com/api/lesson/visual-storytelling/representing-people-you-are-not","minutes":9,"keyIdea":"Work about people you are not fails through the single story, decoration, backdrop and composite; ask whether the subject would recognise it as fair, consult early and pay for it, and remember that consultation surfaces what you did not know rather than transferring the responsibility."},{"slug":"ai-in-the-pipeline-honestly","title":"What the tool can be trusted with, and what it cannot","url":"https://addaly.com/learn/visual-storytelling/ai-in-the-pipeline-honestly","api":"https://addaly.com/api/lesson/visual-storytelling/ai-in-the-pipeline-honestly","minutes":10,"keyIdea":"Sort AI tasks by what a mistake costs and whether you would notice, because these tools fail fluently and remove the uncertainty signal you normally rely on: disclosure only survives if it is visible in the frame, the copyright position differs by country and is unresolved, and the name on the piece owns every frame."},{"slug":"learning-by-deconstruction","title":"Take apart the thing that worked on you","url":"https://addaly.com/learn/visual-storytelling/learning-by-deconstruction","api":"https://addaly.com/api/lesson/visual-storytelling/learning-by-deconstruction","minutes":9,"keyIdea":"Study the pieces that actually worked on you by writing out the promise, the beats, the joining words and above all what was left out, and construct the feedback that practice needs, because creative work returns an aggregated number too late to connect to any decision you made."},{"slug":"a-body-of-work","title":"Fifteen pieces with a point of view beat fifty with a filter","url":"https://addaly.com/learn/visual-storytelling/a-body-of-work","api":"https://addaly.com/api/lesson/visual-storytelling/a-body-of-work","minutes":10,"keyIdea":"A portfolio is a prediction someone is making about you, so a small body of work with a visible repeated question is worth more than a large one with none."}]}]},{"slug":"independent-creative","title":"Working for Yourself","tagline":"Six portfolio pieces, twelve cold emails, a rate with arithmetic behind it, and a deposit before you start.","description":"How to make a living from creative work with no capital, no contacts and possibly no degree. Building a portfolio of six pieces instead of forty, finding first clients without a network, the pricing arithmetic that shows your real rate is roughly three times the number you guessed, scoping revisions so a fair price stays fair, contracts and when copyright actually transfers, getting paid across borders without losing eight percent to fees, and keeping the work sustainable.","level":"intermediate","track":"create","url":"https://addaly.com/learn/independent-creative","lessons":84,"minutes":774,"review":"draft","book":{"pdf":"https://addaly.com/textbooks/independent-creative.pdf","pages":504,"bytes":5378116,"edition":"2026-10-07","sampler":"https://addaly.com/textbooks/samplers/independent-creative.pdf","cover":"https://addaly.com/textbooks/look/independent-creative/1.webp?v=2026-10-07-5378116"},"film":null,"modules":[{"slug":"whether-there-is-a-business","title":"Whether there is a business here","summary":"Most independent creative careers end in the first nine months, and almost always for a reason that was visible before they started: no evidence of demand, no runway, no idea what was being sold, and an income built on one kind of work. This block does the arithmetic and the positioning before anything is quit, so the decision rests on figures rather than nerve.","outcome":"Decide whether to go independent on evidence rather than nerve (three paid jobs at your target rate, a runway in months you can state, a narrow market you can name in one sentence, and a written income map) and say which of the five income shapes you are actually starting with and which you are only hoping for.","lessons":[{"slug":"is-there-a-business-here","title":"Three paid jobs before you quit anything","url":"https://addaly.com/learn/independent-creative/is-there-a-business-here","api":"https://addaly.com/api/lesson/independent-creative/is-there-a-business-here","minutes":9,"keyIdea":"Validate with three paid jobs from three strangers at close to your target rate while you still have other income, because the route to each one, not the work itself, is what you are actually testing."},{"slug":"the-runway-number","title":"The number of months you can be wrong for","url":"https://addaly.com/learn/independent-creative/the-runway-number","api":"https://addaly.com/api/lesson/independent-creative/the-runway-number","minutes":10,"keyIdea":"Runway is spendable cash divided by bad-month survival cost, and it must cover your ten-week cash cycle on top of your living costs, because a short runway makes you accept the work that consumes the time you needed to find better work."},{"slug":"what-you-are-actually-selling","title":"Nobody wants a logo","url":"https://addaly.com/learn/independent-creative/what-you-are-actually-selling","api":"https://addaly.com/api/lesson/independent-creative/what-you-are-actually-selling","minutes":8,"keyIdea":"The file is the mechanism and the change in the client's situation is the purchase, which is why the question that matters in a first conversation is what made them start looking now, not what they want made."},{"slug":"choosing-a-narrow-thing","title":"Narrow enough to be remembered","url":"https://addaly.com/learn/independent-creative/choosing-a-narrow-thing","api":"https://addaly.com/api/lesson/independent-creative/choosing-a-narrow-thing","minutes":9,"keyIdea":"Narrow on craft and market together so your position is a sentence somebody else can repeat, and remember that positioning governs what you publish and pursue, never what you are allowed to accept."},{"slug":"who-you-are-competing-with","title":"Your competitor is a template and a nephew","url":"https://addaly.com/learn/independent-creative/who-you-are-competing-with","api":"https://addaly.com/api/lesson/independent-creative/who-you-are-competing-with","minutes":8,"keyIdea":"Most lost work goes to doing nothing, an internal amateur, a template or a cheaper professional, and since each loses to a different argument, the useful exercise is tallying which one actually took your last five jobs."},{"slug":"the-income-map","title":"Five ways money arrives, and only one of them is a job","url":"https://addaly.com/learn/independent-creative/the-income-map","api":"https://addaly.com/api/lesson/independent-creative/the-income-map","minutes":9,"keyIdea":"Income arrives as project work, retainers, licensing, products or teaching, each with a different structural weakness, and the figure to watch across all of them is the share coming from your largest client."},{"slug":"the-market-and-the-currency","title":"Local rates, remote rates, and the honest gap","url":"https://addaly.com/learn/independent-creative/the-market-and-the-currency","api":"https://addaly.com/api/lesson/independent-creative/the-market-and-the-currency","minutes":9,"keyIdea":"Remote clients pay their local market rate minus a discount for friction and risk, so the work of earning it is removing friction rather than finding buyers who will overpay, and pricing should follow scope and usage, never your own cost of living."},{"slug":"being-legal-enough","title":"Legal enough to invoice, and no more than that","url":"https://addaly.com/learn/independent-creative/being-legal-enough","api":"https://addaly.com/api/lesson/independent-creative/being-legal-enough","minutes":9,"keyIdea":"Operate in the simplest legal form your turnover allows, keep business money in a separate account from the first invoice, and know that consumption-tax thresholds are measured on turnover rather than profit; then buy one hour of local professional advice rather than guessing."},{"slug":"the-ninety-day-start","title":"The first ninety days, written down","url":"https://addaly.com/learn/independent-creative/the-ninety-day-start","api":"https://addaly.com/api/lesson/independent-creative/the-ninety-day-start","minutes":9,"keyIdea":"Write the first ninety days as thirty-day end states (findable, contacted, delivered) and measure only contacts made, conversations had and money received, because the first two are inputs you fully control."}]},{"slug":"work-you-can-show","title":"Work you can show","summary":"A portfolio is the only asset an independent creative owns outright, and most of them are assembled wrong: too many pieces, no constraints named, no outcome, unlabelled concept work, images that take eight seconds to load on the phone where they will actually be seen. This block builds the evidence (the pieces, the write-ups, the site, the portable file) and the twenty-minute habit that stops it rotting.","outcome":"Assemble a portfolio that argues rather than merely displays (six to eight pieces chosen on whether you want more work like them, case studies naming the situation, constraint, one decision and an honestly-sourced outcome, self-initiated work labelled as such, and a site and a portable file that load and travel) and say for any given piece which of the two reader types it is aimed at and what would have to be removed for it to work.","lessons":[{"slug":"six-pieces-not-forty","title":"Nobody is going to look at your fortieth piece","url":"https://addaly.com/learn/independent-creative/six-pieces-not-forty","api":"https://addaly.com/api/lesson/independent-creative/six-pieces-not-forty","minutes":9,"keyIdea":"A portfolio is judged on its weakest visible piece, so cut until every piece is one you want more work like."},{"slug":"the-case-study","title":"A picture cannot argue","url":"https://addaly.com/learn/independent-creative/the-case-study","api":"https://addaly.com/api/lesson/independent-creative/the-case-study","minutes":9,"keyIdea":"A case study earns its place by naming the constraint and one decision a different designer would have made differently, and an honestly-sourced outcome beats an invented percentage because one unearned number makes a reader discount the whole page."},{"slug":"no-clients-no-problem","title":"Making work when nobody has hired you","url":"https://addaly.com/learn/independent-creative/no-clients-no-problem","api":"https://addaly.com/api/lesson/independent-creative/no-clients-no-problem","minutes":9,"keyIdea":"Self-initiated work fails not because it is unpaid but because it usually has no constraint, no audience and no failure condition, so the job is to manufacture a real brief and label the piece honestly rather than to imitate a client project."},{"slug":"showing-the-process","title":"How much process to show, and to whom","url":"https://addaly.com/learn/independent-creative/showing-the-process","api":"https://addaly.com/api/lesson/independent-creative/showing-the-process","minutes":8,"keyIdea":"Keep a process image only when it explains a decision the finished work does not explain by itself, put the finished work first because that is what earns the scroll, and never publish a rejected route you would not want to be hired to repeat."},{"slug":"mockups-and-honesty","title":"Mockups, and where they start lying","url":"https://addaly.com/learn/independent-creative/mockups-and-honesty","api":"https://addaly.com/api/lesson/independent-creative/mockups-and-honesty","minutes":9,"keyIdea":"A mockup may show the work as it would appear if implemented as specified and not as it would appear if something else were also true, which is why showing the highest scale a client plausibly operates at reads as competence while a Times Square billboard reads as a student."},{"slug":"the-one-page-site","title":"The site that has four jobs","url":"https://addaly.com/learn/independent-creative/the-one-page-site","api":"https://addaly.com/api/lesson/independent-creative/the-one-page-site","minutes":9,"keyIdea":"A portfolio site converts attention that came from elsewhere rather than generating it, so it should be built in a weekend around four jobs (show the work, say what you do and for whom, and make starting a conversation obvious) with a domain you own as the only thing worth paying for."},{"slug":"platforms-and-their-economics","title":"Five platforms, five different currencies","url":"https://addaly.com/learn/independent-creative/platforms-and-their-economics","api":"https://addaly.com/api/lesson/independent-creative/platforms-and-their-economics","minutes":9,"keyIdea":"Choose a platform by asking what a viewer is in a position to do after seeing your work there, not by audience size, and convert whatever attention it gives you into an email list you own, because reach on a borrowed account can be cut overnight with no appeal."},{"slug":"work-you-cannot-show","title":"The third of your work that is locked","url":"https://addaly.com/learn/independent-creative/work-you-cannot-show","api":"https://addaly.com/api/lesson/independent-creative/work-you-cannot-show","minutes":9,"keyIdea":"Ownership and permission to display are separate questions, so read the clause, ask a narrow question at handover while the relationship is warm, and put a portfolio clause in your own contract because the request is nearly always granted at the start and nearly always awkward at the end."},{"slug":"the-deck-and-the-reel","title":"The file that gets forwarded","url":"https://addaly.com/learn/independent-creative/the-deck-and-the-reel","api":"https://addaly.com/api/lesson/independent-creative/the-deck-and-the-reel","minutes":8,"keyIdea":"Links get visited and files get forwarded, so keep a PDF under about 5MB with a searchable filename and a reel that opens on its strongest three seconds, because most viewers who stop watching stop within the first ten."},{"slug":"keeping-it-current","title":"Twenty minutes at handover","url":"https://addaly.com/learn/independent-creative/keeping-it-current","api":"https://addaly.com/api/lesson/independent-creative/keeping-it-current","minutes":8,"keyIdea":"Portfolio rot is a scheduling loop rather than a discipline failure, and the break in it is a twenty-minute ritual at delivery (export images, write four sentences, ask for the quote and the permission, record the real hours) because assembling prepared material takes an evening and reconstructing it takes a fortnight."}]},{"slug":"finding-work","title":"Where the work comes from","summary":"Almost all independent creative income arrives through four channels that behave nothing like each other: referral converts best and cannot be switched on, subcontracting is fastest from a standing start, outreach is the only one you control, and inbound compounds over years. This block works each of them properly, including the half of the job nobody teaches: deciding which enquiries to stop spending time on.","outcome":"Run a pipeline deliberately rather than hopefully (pick the channel that matches your runway, get onto an agency roster with a rate and a date, ask for a referral in a form somebody can actually answer, qualify an enquiry on outcome, timing, budget and decision-maker before writing a proposal, follow up three times and stop) and say for any given channel what its lag is and what it costs you when it fails.","lessons":[{"slug":"where-the-work-is","title":"Four channels, not forty tactics","url":"https://addaly.com/learn/independent-creative/where-the-work-is","api":"https://addaly.com/api/lesson/independent-creative/where-the-work-is","minutes":9,"keyIdea":"The channels that convert best are the ones you control least and every channel has a lag, so a person who needs money within six weeks has only outreach and subcontracting available, whatever the advice about building an audience says."},{"slug":"first-clients-no-network","title":"You do not need a network, you need twelve specific emails","url":"https://addaly.com/learn/independent-creative/first-clients-no-network","api":"https://addaly.com/api/lesson/independent-creative/first-clients-no-network","minutes":10,"keyIdea":"Twelve mails that each took ten minutes beat two hundred that took one, because a specific message costs something to ignore."},{"slug":"the-referral-ask","title":"Asking in a form somebody can answer","url":"https://addaly.com/learn/independent-creative/the-referral-ask","api":"https://addaly.com/api/lesson/independent-creative/the-referral-ask","minutes":9,"keyIdea":"A referral request fails when it is computationally expensive, so name a specific client type and a specific trigger, attach the ask to handover rather than to a quiet month, and always tell the referrer the outcome because that is the only evidence they get that referring you worked."},{"slug":"subcontracting","title":"Working for people who already have the client","url":"https://addaly.com/learn/independent-creative/subcontracting","api":"https://addaly.com/api/lesson/independent-creative/subcontracting","minutes":10,"keyIdea":"Agencies pay a third to a half less because they carry the client, the risk and the payment, and the email that gets you onto a roster contains four things including an actual rate and a date, but the channel is a strong source of income and a weak source of career, because everything goes out under somebody else's name."},{"slug":"marketplaces-honestly","title":"What a marketplace is actually selling","url":"https://addaly.com/learn/independent-creative/marketplaces-honestly","api":"https://addaly.com/api/lesson/independent-creative/marketplaces-honestly","minutes":10,"keyIdea":"Prices on marketplaces fall because the interface cannot display quality, so competing on being better does not work in generic categories, but a narrow, technically specified service where the buyer can verify the result restores quality as a visible axis."},{"slug":"the-follow-up","title":"Converting silence into information","url":"https://addaly.com/learn/independent-creative/the-follow-up","api":"https://addaly.com/api/lesson/independent-creative/the-follow-up","minutes":8,"keyIdea":"Most enquiries die by being dropped rather than declined, so three follow-ups over a month (each with a reason to exist and the last one closing the file) convert silence into an answer you can act on, and a no is a good outcome because it returns your attention."},{"slug":"qualifying-an-enquiry","title":"Four things to know before you write anything","url":"https://addaly.com/learn/independent-creative/qualifying-an-enquiry","api":"https://addaly.com/api/lesson/independent-creative/qualifying-an-enquiry","minutes":9,"keyIdea":"Find out the outcome, the date and what it is attached to, the budget territory, and who else has to be happy, and give a range first rather than demanding a budget, because most small-business clients genuinely do not know what the work costs and are embarrassed to say so."},{"slug":"saying-no","title":"What a bad project actually costs","url":"https://addaly.com/learn/independent-creative/saying-no","api":"https://addaly.com/api/lesson/independent-creative/saying-no","minutes":10,"keyIdea":"A wrong project costs the hours, the overrun, the slot a better one would have filled and the appetite for the outreach that fills next month, so when the budget is the only problem, reduce the scope rather than the price."},{"slug":"free-work-and-pitches","title":"Unpaid work, and the test that sorts it","url":"https://addaly.com/learn/independent-creative/free-work-and-pitches","api":"https://addaly.com/api/lesson/independent-creative/free-work-and-pitches","minutes":10,"keyIdea":"Ask whether the unpaid effort is bounded and whether you keep the asset, which separates a proposal and self-initiated work from speculative creative routes the client keeps, and offer a paid pilot that comes off the full fee, because that answers the client's real worry about risk."},{"slug":"being-findable","title":"Two different searches, two different jobs","url":"https://addaly.com/learn/independent-creative/being-findable","api":"https://addaly.com/api/lesson/independent-creative/being-findable","minutes":9,"keyIdea":"Winning your own name is an afternoon's work and protects every referral you already earned, while winning a problem-based search is only possible on a long specific phrase searched a handful of times a month by people with exactly your problem."},{"slug":"the-slow-channels","title":"Teaching, writing, speaking, being useful","url":"https://addaly.com/learn/independent-creative/the-slow-channels","api":"https://addaly.com/api/lesson/independent-creative/the-slow-channels","minutes":9,"keyIdea":"These channels solve the trust problem in advance and at scale, which is why the buyer arrives already decided, but the fuse is a year or more, the material that gets clients is about the client's tedious industry problems rather than about creativity, and the return is unattributable by nature."}]},{"slug":"the-money","title":"The money","summary":"Pricing is arithmetic, and everything after it is plumbing: the document that fixes a scope, the model that decides who carries the risk of the unknown, the increase nobody will offer you, the discount that tells a client your first number was fiction, the invoice that fails inside somebody's accounts system, and the share of every payment that was never yours. This block covers the whole route from a number in your head to money in an account, and out again to the tax authority.","outcome":"Take a project from quote to cleared payment without losing the rate: issue a quote whose exclusions and revision count are explicit, choose the pricing model that matches who controls the scope, raise prices with notice and without apology, trade scope for any reduction, form an invoice that survives an accounts department, run a dated escalation ladder on a late payment, and say where the three separate costs in a cross-border payment occur and which one is invisible.","lessons":[{"slug":"the-arithmetic","title":"Your rate is about three times the number you first thought","url":"https://addaly.com/learn/independent-creative/the-arithmetic","api":"https://addaly.com/api/lesson/independent-creative/the-arithmetic","minutes":10,"keyIdea":"Your floor is annual take-home plus all costs, divided by ten months of realistic billable hours, not twelve months of working hours."},{"slug":"the-quote-document","title":"The document that fixes what you agreed","url":"https://addaly.com/learn/independent-creative/the-quote-document","api":"https://addaly.com/api/lesson/independent-creative/the-quote-document","minutes":9,"keyIdea":"A quote states the problem in the client's words, what is included, what is explicitly not, the revision count, the dated dependencies and how long it stands. And three options that differ in scope rather than in quality turn a yes-or-no question into a which question."},{"slug":"saying-the-number","title":"What is your rate is not really a question about money","url":"https://addaly.com/learn/independent-creative/saying-the-number","api":"https://addaly.com/api/lesson/independent-creative/saying-the-number","minutes":9,"keyIdea":"Default to project pricing, say the number and then stop talking, and treat a near-perfect win rate as proof you are too cheap."},{"slug":"day-rate-project-retainer","title":"Four pricing models, and who carries the risk","url":"https://addaly.com/learn/independent-creative/day-rate-project-retainer","api":"https://addaly.com/api/lesson/independent-creative/day-rate-project-retainer","minutes":9,"keyIdea":"Choose the model by asking who controls the scope (price time when the client directs the work day to day; price the project when you define the deliverable), because fix-pricing work whose direction somebody else changes is how a rate quietly halves."},{"slug":"the-retainer-that-works","title":"Designing a retainer that survives six months","url":"https://addaly.com/learn/independent-creative/the-retainer-that-works","api":"https://addaly.com/api/lesson/independent-creative/the-retainer-that-works","minutes":9,"keyIdea":"Decide whether you are selling a block of time, a quantity of output or priority access, then defend it with a stated ceiling, a monthly written summary of what was used and a review date, because retainer drift is a design failure, not a discipline failure, and most overreach is genuinely invisible to the client."},{"slug":"raising-your-prices","title":"The increase nobody will offer you","url":"https://addaly.com/learn/independent-creative/raising-your-prices","api":"https://addaly.com/api/lesson/independent-creative/raising-your-prices","minutes":9,"keyIdea":"For new clients an increase is not an event (you quote the new number) and for existing ones it is a dated notification six to eight weeks ahead that does not apply to work already quoted, kept short because a long justification invites negotiation."},{"slug":"discounts-and-what-they-buy","title":"What a discount tells a client","url":"https://addaly.com/learn/independent-creative/discounts-and-what-they-buy","api":"https://addaly.com/api/lesson/independent-creative/discounts-and-what-they-buy","minutes":9,"keyIdea":"An unconditional reduction tells the client the first number was not the real number, and that inference is permanent, so never lower the price without lowering something else, and ask whether the problem is the total, the timing or the scope, because only one of those needs the price to move."},{"slug":"getting-paid","title":"The deposit is the only real protection you have","url":"https://addaly.com/learn/independent-creative/getting-paid","api":"https://addaly.com/api/lesson/independent-creative/getting-paid","minutes":10,"keyIdea":"You cannot enforce payment legally, so structure the work so you are never far ahead of the money, and never release source files before the final payment lands."},{"slug":"the-invoice","title":"The document that has to survive an accounts system","url":"https://addaly.com/learn/independent-creative/the-invoice","api":"https://addaly.com/api/lesson/independent-creative/the-invoice","minutes":9,"keyIdea":"Most late payments in small creative practices are caused by an invoice that could not be processed rather than by a client who would not pay, so the client's legal entity name, their reference number, a sequential invoice number and the accounts payable address matter more than the wording."},{"slug":"chasing-late-payment","title":"An escalation ladder run on dates","url":"https://addaly.com/learn/independent-creative/chasing-late-payment","api":"https://addaly.com/api/lesson/independent-creative/chasing-late-payment","minutes":9,"keyIdea":"Decide the sequence in advance and run it on dates so no individual message carries a month of stored irritation, and at day ten ask what is blocking the invoice rather than repeating the request, because that question surfaces the missing purchase order or wrong entity name that is usually the actual cause."},{"slug":"money-across-borders","title":"Three places a foreign payment loses value","url":"https://addaly.com/learn/independent-creative/money-across-borders","api":"https://addaly.com/api/lesson/independent-creative/money-across-borders","minutes":10,"keyIdea":"The transfer fee is visible, intermediary bank charges are not, and the exchange-rate margin is the largest and is never presented as a fee at all, so compare the rate you were given against the mid-market rate for that day to see what the conversion actually cost."},{"slug":"tax-and-the-books","title":"The share that was never yours","url":"https://addaly.com/learn/independent-creative/tax-and-the-books","api":"https://addaly.com/api/lesson/independent-creative/tax-and-the-books","minutes":9,"keyIdea":"Move a fixed percentage of every payment to an account you never spend from on the day it arrives, before the money is mentally converted into income, because underpricing produces a bad year while spending your tax money produces a liability with penalties and an authority with stronger collection powers than any client."}]},{"slug":"running-the-job","title":"Running the job","summary":"Between the signed quote and the cleared invoice is the part that decides whether you are rehired: a kickoff that dates the client's own dependencies, a presentation that asks for a judgement rather than a preference, feedback that has to be translated before it can be used, an estimate built from records rather than imagination, and a handover pack somebody can open in two years. Most projects that go badly were decided in the first week.","outcome":"Run a project from kickoff to handover without losing the schedule or the rate (write the kickoff record with dated client dependencies, present one direction against restated criteria, convert a prescription like 'make it bigger' into a diagnosis, estimate from your own measured multiplier rather than from imagination, deliver a documented handover pack with fonts named and not sent, and put a stalled project formally on hold) and say for any delay whether it is your estimating error or a scope change, because those have different remedies.","lessons":[{"slug":"the-kickoff","title":"The hour that decides the project","url":"https://addaly.com/learn/independent-creative/the-kickoff","api":"https://addaly.com/api/lesson/independent-creative/the-kickoff","minutes":9,"keyIdea":"Write the kickoff record within a day (what we are making, what is excluded, the stages, and above all what you need from the client with a date and a stated consequence) because most freelance relationships erode through small unspoken adjustments rather than one large betrayal."},{"slug":"presenting-work","title":"Asking for a judgement, not a preference","url":"https://addaly.com/learn/independent-creative/presenting-work","api":"https://addaly.com/api/lesson/independent-creative/presenting-work","minutes":9,"keyIdea":"Restate the problem and the criteria before showing anything, because that moves the client from do-I-like-this to does-this-solve-that, and show one direction rather than three, since three invites a client to combine elements into the compromise nobody would have chosen."},{"slug":"scope-and-revisions","title":"Unbounded revisions turn a fair price into an unfair one","url":"https://addaly.com/learn/independent-creative/scope-and-revisions","api":"https://addaly.com/api/lesson/independent-creative/scope-and-revisions","minutes":9,"keyIdea":"Scope creep is invisible arithmetic, so make the total visible with a priced change note every time, including the small requests."},{"slug":"translating-feedback","title":"The complaint is real, the diagnosis is not","url":"https://addaly.com/learn/independent-creative/translating-feedback","api":"https://addaly.com/api/lesson/independent-creative/translating-feedback","minutes":10,"keyIdea":"Client feedback is reliable evidence that something is wrong and nearly worthless as a description of what, so ask what they expect the change to fix, but take at face value anything they tell you about their own customers, market or production constraints."},{"slug":"estimating-time","title":"Estimating from records, not imagination","url":"https://addaly.com/learn/independent-creative/estimating-time","api":"https://addaly.com/api/lesson/independent-creative/estimating-time","minutes":9,"keyIdea":"When you estimate you imagine the work going as intended and omit the waiting, the reopened brief and the admin, so ask instead how long the last three jobs like this actually took, which is why the hours column in your project record is worth more than any task breakdown."},{"slug":"files-and-handover","title":"The last four hours","url":"https://addaly.com/learn/independent-creative/files-and-handover","api":"https://addaly.com/api/lesson/independent-creative/files-and-handover","minutes":10,"keyIdea":"Clients cannot judge your craft with confidence but can judge immediately whether your files worked, so ship a structured pack with a README, outline type in print artwork, and name the typefaces rather than sending the font files, because most commercial licences prohibit transferring them."},{"slug":"working-with-suppliers","title":"When you are the middle of the chain","url":"https://addaly.com/learn/independent-creative/working-with-suppliers","api":"https://addaly.com/api/lesson/independent-creative/working-with-suppliers","minutes":10,"keyIdea":"Decide before anything is commissioned whether the client contracts the supplier or you do, because contracting them yourself means you pay the printer whether or not the client pays you. And call the printer before you draw anything, since ten minutes of their specifications is free and expensive to discover afterwards."},{"slug":"the-committee","title":"Five people are not five opinions","url":"https://addaly.com/learn/independent-creative/the-committee","api":"https://addaly.com/api/lesson/independent-creative/the-committee","minutes":9,"keyIdea":"Group feedback tends toward the least objectionable option because agreement is easiest on what nobody actively dislikes, so establish one consolidator and one decision-maker, name conflicting instructions rather than trying to satisfy both, and price the extra rounds a committee will need rather than absorbing them."},{"slug":"the-project-that-stalls","title":"Silence, holds and kill fees","url":"https://addaly.com/learn/independent-creative/the-project-that-stalls","api":"https://addaly.com/api/lesson/independent-creative/the-project-that-stalls","minutes":9,"keyIdea":"Projects stall for dull reasons that have nothing to do with the work, so chase for information rather than action, name the scheduling consequence of the delay, and put a long pause formally on hold in writing, and invoice every completed stage as it completes rather than letting unbilled work accumulate in somebody else's silence."},{"slug":"after-delivery","title":"The month after the files go","url":"https://addaly.com/learn/independent-creative/after-delivery","api":"https://addaly.com/api/lesson/independent-creative/after-delivery","minutes":9,"keyIdea":"Ask for the testimonial and the display permission in the delivery email, because that is the point of maximum goodwill and your contact may be gone in six months; then state a support window that distinguishes your errors, fixed free, from their new requests, quoted."}]},{"slug":"ownership-and-risk","title":"Ownership, rights and risk","summary":"Copyright arises the moment you draw something and protects less than your client assumes; a logo's real protection is a registration only they can obtain; fonts and stock are licensed in categories you cannot pass on; music carries two separate copyrights; and the AI questions are being argued in several courts at once. This block covers what you own, what you can sell, what you must not promise, and where the law genuinely has not decided.","outcome":"Handle the rights side of a project without over-promising (state ownership explicitly in writing rather than relying on a default rule, price a licence across medium, territory, duration and exclusivity, name typefaces rather than sending font files, get written permission from identifiable people, decline to warrant trade mark clearance while recommending a search in writing, cap your liability and get written proof approval) and set out the shape of the AI training and output disagreements without resolving either.","lessons":[{"slug":"copyright-for-creatives","title":"What you own the moment you draw it","url":"https://addaly.com/learn/independent-creative/copyright-for-creatives","api":"https://addaly.com/api/lesson/independent-creative/copyright-for-creatives","minutes":10,"keyIdea":"Copyright arises automatically and protects expression rather than ideas, style or technique, and the default rule on who owns commissioned work differs sharply by country, so write the ownership terms into every engagement instead of relying on a default you half-remember."},{"slug":"licensing-not-selling","title":"Medium, territory, duration, exclusivity","url":"https://addaly.com/learn/independent-creative/licensing-not-selling","api":"https://addaly.com/api/lesson/independent-creative/licensing-not-selling","minutes":9,"keyIdea":"A licence has four independent dials and each is a price lever, which gives you something to trade that is not the fee and creates renewal income, but a logo should be assigned outright, because a brand cannot be built on a licence that expires."},{"slug":"fonts-and-stock","title":"The licence categories nobody reads","url":"https://addaly.com/learn/independent-creative/fonts-and-stock","api":"https://addaly.com/api/lesson/independent-creative/fonts-and-stock","minutes":10,"keyIdea":"Desktop, web, app and broadcast font licences are separate products and yours cannot be passed to a client, so outline type in print artwork and name the faces, and for a small business that will never buy a foundry licence, specifying an open licensed face is better practice than specifying one they will use unlicensed."},{"slug":"music-and-sound","title":"Two copyrights in every recording","url":"https://addaly.com/learn/independent-creative/music-and-sound","api":"https://addaly.com/api/lesson/independent-creative/music-and-sound","minutes":10,"keyIdea":"Using a specific recording generally needs a synchronisation licence for the composition and a master use licence for the recording, from two different rights-holders, which is why re-recording a cover solves nothing, and why a temp track the client falls in love with is a self-inflicted problem."},{"slug":"releases-and-permissions","title":"Owning the photograph is not enough","url":"https://addaly.com/learn/independent-creative/releases-and-permissions","api":"https://addaly.com/api/lesson/independent-creative/releases-and-permissions","minutes":9,"keyIdea":"Copyright settles who may copy an image while privacy, publicity and property rights settle whether it may advertise something, which is why the editorial-versus-commercial line matters, and why what you licensed from a contributor must be checked against what you promised the client."},{"slug":"the-contract","title":"A contract is a document about the week things go wrong","url":"https://addaly.com/learn/independent-creative/the-contract","api":"https://addaly.com/api/lesson/independent-creative/the-contract","minutes":11,"keyIdea":"Write that all rights transfer only on receipt of final payment in full, and never assume \"work for hire\" means the same thing in your country as in theirs."},{"slug":"trademark-vs-copyright","title":"What a logo client is actually buying","url":"https://addaly.com/learn/independent-creative/trademark-vs-copyright","api":"https://addaly.com/api/lesson/independent-creative/trademark-vs-copyright","minutes":9,"keyIdea":"You supply copyright in artwork and only the client can obtain a trade mark registration, by class and by territory, so never warrant originality or clearance, and put the recommendation to get a search before spending on signage in writing."},{"slug":"client-supplied-material","title":"The risk that arrives in an email","url":"https://addaly.com/learn/independent-creative/client-supplied-material","api":"https://addaly.com/api/lesson/independent-creative/client-supplied-material","minutes":9,"keyIdea":"An indemnity clause allocates responsibility for client-supplied material but is worth only what the client is worth, so the working half is asking at kickoff where each asset came from and keeping the email in which they told you."},{"slug":"when-someone-takes-it","title":"Your work will be stolen and the courts are not the answer","url":"https://addaly.com/learn/independent-creative/when-someone-takes-it","api":"https://addaly.com/api/lesson/independent-creative/when-someone-takes-it","minutes":9,"keyIdea":"Copyright exists automatically but enforces nothing; low-resolution proofs, withheld source files and a platform takedown do more real work than registration or watermarks."},{"slug":"liability-and-insurance","title":"A small fee and a large exposure","url":"https://addaly.com/learn/independent-creative/liability-and-insurance","api":"https://addaly.com/api/lesson/independent-creative/liability-and-insurance","minutes":10,"keyIdea":"Your exposure on a job is unrelated to what you were paid for it unless you cap it, so exclude consequential loss, get explicit written approval of the final proof for anything produced at volume, and understand that most professional indemnity policies are claims-made rather than covering the year the work was done."},{"slug":"the-ai-question","title":"The client will ask, so decide your answer before they do","url":"https://addaly.com/learn/independent-creative/the-ai-question","api":"https://addaly.com/api/lesson/independent-creative/the-ai-question","minutes":9,"keyIdea":"Disclose AI use in the agreement, never promise exclusivity over a purely generated element, and layer human authorship you can prove into anything that must be owned."},{"slug":"ai-and-the-unsettled-law","title":"Two open questions and one you can answer today","url":"https://addaly.com/learn/independent-creative/ai-and-the-unsettled-law","api":"https://addaly.com/api/lesson/independent-creative/ai-and-the-unsettled-law","minutes":10,"keyIdea":"Whether training was lawful and whether generated output attracts copyright are both genuinely unresolved and diverging between countries, but the provider's current commercial terms are readable today; so keep documented human authorship in anything that must be owned exclusively."}]},{"slug":"beyond-hours","title":"Income that is not hours","summary":"Selling time has a ceiling you can calculate: billable hours times rate, and both terms have limits that arrive around year four. The alternatives are not passive, and each has a threshold below which it returns nothing at all: a productised service pays within weeks, a digital product needs an audience that takes a year, stock needs a library that takes three. This block works the arithmetic of each, in the order they can actually be attempted.","outcome":"Choose and build a second income stream on evidence rather than hope (calculate your own hours ceiling from measured billable time, productise a service you have already delivered five times, size a product honestly as audience times conversion times price less the platform's cut, and allocate one defended day a week to a single channel until it passes its threshold) and say for any channel what its threshold is, when its first money arrives, and what it costs to maintain once built.","lessons":[{"slug":"the-ceiling-on-hours","title":"Calculating the ceiling","url":"https://addaly.com/learn/independent-creative/the-ceiling-on-hours","api":"https://addaly.com/api/lesson/independent-creative/the-ceiling-on-hours","minutes":9,"keyIdea":"Billable time runs at roughly half to two-thirds of working time, so your ceiling is about a thousand hours a year times your rate, and the strongest argument for non-hourly income is not the money but that it buys the ability to refuse a bad project, which raises the rate anyway."},{"slug":"productising-a-service","title":"The same work, with edges","url":"https://addaly.com/learn/independent-creative/productising-a-service","api":"https://addaly.com/api/lesson/independent-creative/productising-a-service","minutes":9,"keyIdea":"A fixed scope, fixed price, fixed timeline version of work you have already done five times removes the quoting cycle and makes your growing efficiency pay you instead of the client, but it only holds if the extras have published prices rather than a negotiation."},{"slug":"digital-products","title":"Audience times conversion times price","url":"https://addaly.com/learn/independent-creative/digital-products","api":"https://addaly.com/api/lesson/independent-creative/digital-products","minutes":10,"keyIdea":"Creative digital products convert an engaged audience at low single-digit percentages, so the audience is the binding constraint rather than the product; and a marketplace commission of 30% to 50% is rent on their traffic, which is worth paying only while you have none of your own."},{"slug":"teaching-and-workshops","title":"Two years ahead is enough","url":"https://addaly.com/learn/independent-creative/teaching-and-workshops","api":"https://addaly.com/api/lesson/independent-creative/teaching-and-workshops","minutes":9,"keyIdea":"You need to be two years ahead of the learner and able to remember being where they are, and the most profitable teaching is usually to the people who buy creative work rather than to peers, because they have budgets and you end up in front of thirty potential clients who just watched you be competent."},{"slug":"stock-and-royalties","title":"Cumulative, lagging, and volume-driven","url":"https://addaly.com/learn/independent-creative/stock-and-royalties","api":"https://addaly.com/api/lesson/independent-creative/stock-and-royalties","minutes":10,"keyIdea":"Stock income is roughly library size times age, so the first year looks like failure by design, and within a library's quality threshold, volume beats perfection because buyers search for a subject and take the first adequate result, which makes local specificity the strongest advantage most contributors have."},{"slug":"print-on-demand","title":"Somebody else holds the stock","url":"https://addaly.com/learn/independent-creative/print-on-demand","api":"https://addaly.com/api/lesson/independent-creative/print-on-demand","minutes":9,"keyIdea":"Base cost consumes most of the retail price so margins are thin and volume governs, which means marketplace success runs on searchable text designs while artists selling to their own audience do better on prints through their own shop, and you must order samples, because you never see what the customer receives."},{"slug":"audience-and-patronage","title":"One to five per cent","url":"https://addaly.com/learn/independent-creative/audience-and-patronage","api":"https://addaly.com/api/lesson/independent-creative/audience-and-patronage","minutes":9,"keyIdea":"Audiences convert to paying supporters at roughly one to five per cent, so patronage is an outcome of years of audience-building rather than a plan, and what converts is access to process and early access rather than promises of additional monthly output, which turn patronage into an obligation that grows heavier as income grows linearly."},{"slug":"hiring-and-subcontracting","title":"The first person you pay","url":"https://addaly.com/learn/independent-creative/hiring-and-subcontracting","api":"https://addaly.com/api/lesson/independent-creative/hiring-and-subcontracting","minutes":9,"keyIdea":"Work out which shortage you have (too much of the work you like, time spent below your rate, or time spent outside the craft) because the management cost is front-loaded and amortises only with repetition, which makes one regular subcontractor worth far more than five occasional ones."},{"slug":"becoming-a-studio","title":"A different job with the same name","url":"https://addaly.com/learn/independent-creative/becoming-a-studio","api":"https://addaly.com/api/lesson/independent-creative/becoming-a-studio","minutes":9,"keyIdea":"Hiring staff replaces variable costs with fixed ones, makes utilisation the governing number and makes sales a permanent job, which is why the middle positions (regular subcontractors, a collective, or staying one person at a higher rate) are under-used rather than lesser."},{"slug":"diversifying-without-diluting","title":"Thresholds, and one at a time","url":"https://addaly.com/learn/independent-creative/diversifying-without-diluting","api":"https://addaly.com/api/lesson/independent-creative/diversifying-without-diluting","minutes":9,"keyIdea":"Every channel has a minimum effort below which it returns nothing rather than proportionally less, so effort spread across five sits below all five thresholds at once. Take one past its threshold with a defended day a week, and set the stopping condition before you start."}]},{"slug":"staying-in-it","title":"Staying in it","summary":"Most independent creative careers do not end in a disaster; they end in drift, concentration and exhaustion, each of which was visible in numbers nobody was looking at. This block covers the five figures that tell you what turnover hides, the client who quietly became your employer without the protections, the conditions that actually produce burnout, and the annual half-day that stops a fine year repeating itself indefinitely.","outcome":"Keep a practice alive over years rather than months (compute effective hourly rate, utilisation, concentration, pipeline and runway from your own records and act on the specific figure rather than the feeling, end a client relationship cleanly rather than letting it decay, name the structural conditions producing burnout instead of treating it as a motivation problem, defend slots for personal work and learning, and run an annual review that produces three dated decisions) and say why rest is downstream of pricing.","lessons":[{"slug":"the-numbers-that-matter","title":"Five figures turnover hides","url":"https://addaly.com/learn/independent-creative/the-numbers-that-matter","api":"https://addaly.com/api/lesson/independent-creative/the-numbers-that-matter","minutes":9,"keyIdea":"Effective hourly rate, utilisation, client concentration, pipeline and months of runway describe the mechanisms that turnover conceals, and the effective rate is almost always well below the rate you believe you charge, because the denominator includes quoting, admin, revisions and the trip to the printer."},{"slug":"client-concentration","title":"Employment without the protections","url":"https://addaly.com/learn/independent-creative/client-concentration","api":"https://addaly.com/api/lesson/independent-creative/client-concentration","minutes":9,"keyIdea":"A client above a third of income has disproportionate influence and above a half determines whether you continue, and the danger arrives before anything goes wrong: your rate stops moving, your standards slip and your portfolio narrows, all while the year feels like it is going well."},{"slug":"firing-a-client","title":"Ending it without a decay","url":"https://addaly.com/learn/independent-creative/firing-a-client","api":"https://addaly.com/api/lesson/independent-creative/firing-a-client","minutes":9,"keyIdea":"Freelancers let relationships decay rather than end them, which reads as unreliability and damages more than an honest ending, so try the adjustment first, then finish the current project, give notice, say it once without a list of grievances, and offer a replacement you would not be embarrassed to have recommended."},{"slug":"feast-famine-rest","title":"The empty month was caused by the busy month","url":"https://addaly.com/learn/independent-creative/feast-famine-rest","api":"https://addaly.com/api/lesson/independent-creative/feast-famine-rest","minutes":10,"keyIdea":"Keep a fixed two-hour pipeline slot during your busiest weeks, because the month with no work was created by the month with too much."},{"slug":"how-burnout-works","title":"Conditions, not character","url":"https://addaly.com/learn/independent-creative/how-burnout-works","api":"https://addaly.com/api/lesson/independent-creative/how-burnout-works","minutes":10,"keyIdea":"Burnout is exhaustion plus cynicism plus a collapsed sense of effectiveness, produced by sustained demand, low control, insufficient reward, unfairness and values conflict, which is why a runway buffer and an enforced payment term are anti-burnout measures, and why a great deal of creative burnout is downstream of underpricing."},{"slug":"personal-work","title":"The work nobody commissioned","url":"https://addaly.com/learn/independent-creative/personal-work","api":"https://addaly.com/api/lesson/independent-creative/personal-work","minutes":9,"keyIdea":"Personal work is where technique develops, because nobody experiments on a job that must ship, so it needs a small defended weekly slot rather than a free weekend that never arrives, and the permission to make something bad is the entire mechanism."},{"slug":"skills-and-learning","title":"Nobody is sending you on a course","url":"https://addaly.com/learn/independent-creative/skills-and-learning","api":"https://addaly.com/api/lesson/independent-creative/skills-and-learning","minutes":10,"keyIdea":"Learn what clients asked for and you declined, what makes existing work faster, the adjacent discipline and the fundamentals that do not decay, and when a tool automates part of your job, absorb it or move up to the judgement, because competing on being cheaper than software has never worked."},{"slug":"the-unpaid-day","title":"Rest is downstream of pricing","url":"https://addaly.com/learn/independent-creative/the-unpaid-day","api":"https://addaly.com/api/lesson/independent-creative/the-unpaid-day","minutes":9,"keyIdea":"If the rate was calculated on 52 weeks then every day off is funded from income already committed, so holiday and sickness allowances belong in the arithmetic, and the runway buffer is the instrument that turns an illness from a crisis into an inconvenience, which is the same instrument that lets you refuse bad work."},{"slug":"isolation-and-colleagues","title":"The infrastructure that leaves with the job","url":"https://addaly.com/learn/independent-creative/isolation-and-colleagues","api":"https://addaly.com/api/lesson/independent-creative/isolation-and-colleagues","minutes":9,"keyIdea":"Leaving employment removes calibration, pre-delivery feedback and any reality check on how the trade works, which is the mechanism behind a great deal of freelance underpricing. And other freelancers in your discipline are the most productive relationship available, not competitors, because no one practice can absorb a city's work."},{"slug":"the-year-and-the-exit","title":"The half-day that stops the drift","url":"https://addaly.com/learn/independent-creative/the-year-and-the-exit","api":"https://addaly.com/api/lesson/independent-creative/the-year-and-the-exit","minutes":9,"keyIdea":"Independence removes the annual review, so years repeat without anyone asking whether this is working: the defence is half a day of numbers, five written questions and three dated decisions, and returning to employment is one legitimate outcome of that review rather than a failure of it."}]}]}]}