<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Brian Pfeil</title>
    <description>The latest articles on DEV Community by Brian Pfeil (@pfeilbr).</description>
    <link>https://dev.to/pfeilbr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F32799%2F8d8fa1ac-9528-4df4-9fd1-bb8ba11eccbe.jpg</url>
      <title>DEV Community: Brian Pfeil</title>
      <link>https://dev.to/pfeilbr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pfeilbr"/>
    <language>en</language>
    <item>
      <title>Study computer science, university-style: 15 free resources</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 21:38:06 +0000</pubDate>
      <link>https://dev.to/pfeilbr/study-computer-science-university-style-15-free-resources-148</link>
      <guid>https://dev.to/pfeilbr/study-computer-science-university-style-15-free-resources-148</guid>
      <description>&lt;p&gt;Real university courses, lectures and full curricula, free.&lt;/p&gt;

&lt;p&gt;I keep a directory of free ways to learn at &lt;a href="https://brianpfeil.com/learn/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn&lt;/a&gt;, sorted by goal, and every link opens without signing in. This is one of its paths: 15 resources, with the ones I'd start with marked ⭐.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ocw.mit.edu/" rel="noopener noreferrer"&gt;OpenCourseWare&lt;/a&gt;&lt;/strong&gt;, by MIT ⭐: Lecture notes, videos and exams from 2,500+ real MIT courses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://learn.mit.edu/c/unit/mitx" rel="noopener noreferrer"&gt;MITx&lt;/a&gt;&lt;/strong&gt;, by MIT: MIT's online courses, free to audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://openlearning.mit.edu/courses-programs/open-learning-library" rel="noopener noreferrer"&gt;Open Learning Library&lt;/a&gt;&lt;/strong&gt;, by MIT: Self-paced MIT course material you can work through any time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://oli.cmu.edu/" rel="noopener noreferrer"&gt;Open Learning Initiative&lt;/a&gt;&lt;/strong&gt;, by Carnegie Mellon: Carnegie Mellon's research-backed courses that adapt as you learn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://online.stanford.edu/free-courses" rel="noopener noreferrer"&gt;Free courses&lt;/a&gt;&lt;/strong&gt;, by Stanford Online: Stanford's free courses and recorded lectures, computer science included.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.coursera.org/" rel="noopener noreferrer"&gt;Coursera&lt;/a&gt;&lt;/strong&gt;: University courses you can audit for free; you pay only for a certificate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.edx.org/" rel="noopener noreferrer"&gt;edX&lt;/a&gt;&lt;/strong&gt;: Courses from Harvard, MIT and more, free to audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ossu/computer-science" rel="noopener noreferrer"&gt;OSSU Computer Science&lt;/a&gt;&lt;/strong&gt; ⭐: A complete computer science degree assembled from free courses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://teachyourselfcs.com/" rel="noopener noreferrer"&gt;Teach Yourself Computer Science&lt;/a&gt;&lt;/strong&gt;: The nine subjects every software engineer should know, with one book and one lecture series for each.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Developer-Y/cs-video-courses" rel="noopener noreferrer"&gt;CS video courses&lt;/a&gt;&lt;/strong&gt;: A huge index of university computer science courses with free lecture videos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.openculture.com/freeonlinecourses" rel="noopener noreferrer"&gt;Free online courses&lt;/a&gt;&lt;/strong&gt;, by Open Culture: 1,700+ free courses from top universities, across every subject.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://neetcode.io/" rel="noopener noreferrer"&gt;NeetCode&lt;/a&gt;&lt;/strong&gt;: Coding-interview practice, with a clear video explanation for each problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Made here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/ebpf/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;eBPF&lt;/a&gt;&lt;/strong&gt;: See inside the running Linux kernel — observability and tracing with eBPF and bpftrace, taught from an app-developer starting point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/macos-kernel-extensions/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;macOS Kernel &amp;amp; System Extensions&lt;/a&gt;&lt;/strong&gt;: Demystify how third parties extend macOS — from legacy kexts to modern user-space System Extensions — and build, install, and watch your own one run on Apple Silicon, all from the CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/nix/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Nix&lt;/a&gt;&lt;/strong&gt;: Reproducible builds and dev environments with Nix — derivations, the store, and flakes.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The up-to-date list, and the other paths (code, cloud, AI, kids and more), is at &lt;a href="https://brianpfeil.com/learn/university/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn/university/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>learning</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Understand how AI works: 15 free resources</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 21:36:22 +0000</pubDate>
      <link>https://dev.to/pfeilbr/understand-how-ai-works-15-free-resources-3i5m</link>
      <guid>https://dev.to/pfeilbr/understand-how-ai-works-15-free-resources-3i5m</guid>
      <description>&lt;p&gt;From the maths of a neuron to building your own language model.&lt;/p&gt;

&lt;p&gt;I keep a directory of free ways to learn at &lt;a href="https://brianpfeil.com/learn/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn&lt;/a&gt;, sorted by goal, and every link opens without signing in. This is one of its paths: 15 resources, with the ones I'd start with marked ⭐.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://karpathy.ai/zero-to-hero.html" rel="noopener noreferrer"&gt;Neural Networks: Zero to Hero&lt;/a&gt;&lt;/strong&gt;, by Andrej Karpathy ⭐: Build neural networks from scratch in code, all the way up to GPT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.3blue1brown.com/?topic=neural-networks" rel="noopener noreferrer"&gt;Neural networks&lt;/a&gt;&lt;/strong&gt;, by 3Blue1Brown ⭐: The best visual explanation of how neural networks and transformers work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://course.fast.ai/" rel="noopener noreferrer"&gt;Practical Deep Learning&lt;/a&gt;&lt;/strong&gt;, by fast.ai: A top-down, code-first deep learning course for people who can already program.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.google.com/machine-learning/crash-course" rel="noopener noreferrer"&gt;Machine Learning Crash Course&lt;/a&gt;&lt;/strong&gt;, by Google: Google's fast-paced, practical introduction to machine learning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://introtodeeplearning.com/" rel="noopener noreferrer"&gt;Introduction to Deep Learning (6.S191)&lt;/a&gt;&lt;/strong&gt;, by MIT: MIT's intro to deep learning, with lectures and labs posted free each year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.deeplearning.ai/courses" rel="noopener noreferrer"&gt;Courses&lt;/a&gt;&lt;/strong&gt;, by DeepLearning.AI: Andrew Ng's platform, with dozens of free one-hour short courses on LLMs and agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://huggingface.co/learn/llm-course" rel="noopener noreferrer"&gt;LLM Course&lt;/a&gt;&lt;/strong&gt;, by Hugging Face: Transformers, fine-tuning and LLMs with the Hugging Face libraries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://huggingface.co/learn/agents-course" rel="noopener noreferrer"&gt;AI Agents Course&lt;/a&gt;&lt;/strong&gt;, by Hugging Face: Build AI agents, from the fundamentals to frameworks, with a certificate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://d2l.ai/" rel="noopener noreferrer"&gt;Dive into Deep Learning&lt;/a&gt;&lt;/strong&gt;: An interactive deep learning textbook with runnable code; used at 500+ universities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="http://neuralnetworksanddeeplearning.com/" rel="noopener noreferrer"&gt;Neural Networks and Deep Learning&lt;/a&gt;&lt;/strong&gt;, by Michael Nielsen: The clearest free book on how neural networks learn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.statlearning.com/" rel="noopener noreferrer"&gt;An Introduction to Statistical Learning&lt;/a&gt;&lt;/strong&gt;: The classic statistical learning textbook, free as a PDF, with labs in R and Python.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.deeplearningbook.org/" rel="noopener noreferrer"&gt;Deep Learning&lt;/a&gt;&lt;/strong&gt;, by Goodfellow, Bengio &amp;amp; Courville: The deep learning textbook, free to read online.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="http://incompleteideas.net/book/the-book-2nd.html" rel="noopener noreferrer"&gt;Reinforcement Learning: An Introduction&lt;/a&gt;&lt;/strong&gt;, by Sutton &amp;amp; Barto: The standard reinforcement learning textbook, free online.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://a16z.com/ai-canon/" rel="noopener noreferrer"&gt;AI Canon&lt;/a&gt;&lt;/strong&gt;, by a16z: A curated reading list for getting up to speed on modern AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Made here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/pytorch/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;PyTorch&lt;/a&gt;&lt;/strong&gt;: Become fluent reading and writing real PyTorch — tensors, autograd, and the training loop — from first principles, with every example runnable on Apple Silicon (MPS).&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The up-to-date list, and the other paths (code, cloud, AI, kids and more), is at &lt;a href="https://brianpfeil.com/learn/ai/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn/ai/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>Get good with a specific AI model: 19 free resources</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 19:12:09 +0000</pubDate>
      <link>https://dev.to/pfeilbr/get-good-with-a-specific-ai-model-19-free-resources-4kc5</link>
      <guid>https://dev.to/pfeilbr/get-good-with-a-specific-ai-model-19-free-resources-4kc5</guid>
      <description>&lt;p&gt;Each lab's own courses, cookbooks and docs — Claude, ChatGPT, Gemini, Llama, Mistral — and how to run open models yourself.&lt;/p&gt;

&lt;p&gt;I keep a directory of free ways to learn at &lt;a href="https://brianpfeil.com/learn/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn&lt;/a&gt;, sorted by goal, and every link opens without signing in. This is one of its paths: 19 resources, with the ones I'd start with marked ⭐.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anthropic · Claude
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://anthropic.skilljar.com/" rel="noopener noreferrer"&gt;Anthropic Academy&lt;/a&gt;&lt;/strong&gt; ⭐: Anthropic's free courses: Claude 101, Claude Code, the API and MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/anthropics/courses" rel="noopener noreferrer"&gt;Courses on GitHub&lt;/a&gt;&lt;/strong&gt;: Anthropic's notebook courses: API fundamentals, prompting, evaluations and tool use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/anthropics/prompt-eng-interactive-tutorial" rel="noopener noreferrer"&gt;Interactive prompt engineering tutorial&lt;/a&gt;&lt;/strong&gt;: A nine-chapter, hands-on course in prompt engineering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/anthropics/claude-cookbooks" rel="noopener noreferrer"&gt;Claude Cookbooks&lt;/a&gt;&lt;/strong&gt;: Copyable recipes for building with Claude: RAG, tools, agents and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://platform.claude.com/docs/en/home" rel="noopener noreferrer"&gt;Claude docs&lt;/a&gt;&lt;/strong&gt;: The Claude API documentation, guides and prompt library.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://code.claude.com/docs/en/overview" rel="noopener noreferrer"&gt;Claude Code docs&lt;/a&gt;&lt;/strong&gt;: How to use Claude Code, Anthropic's coding agent, in your terminal and editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OpenAI · ChatGPT
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://academy.openai.com/" rel="noopener noreferrer"&gt;OpenAI Academy&lt;/a&gt;&lt;/strong&gt;: OpenAI's free courses, livestreams and events for every level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.openai.com/cookbook" rel="noopener noreferrer"&gt;OpenAI Cookbook&lt;/a&gt;&lt;/strong&gt;: Example code and guides for building with OpenAI's models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.openai.com/api/docs" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;&lt;/strong&gt;: OpenAI's API guides and reference.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Google · Gemini
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;Gemini API docs&lt;/a&gt;&lt;/strong&gt;: Guides and quickstarts for building with Google's Gemini models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt;&lt;/strong&gt;: Try Gemini models in the browser, free, and export working code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/google-gemini/cookbook" rel="noopener noreferrer"&gt;Gemini Cookbook&lt;/a&gt;&lt;/strong&gt;: Notebooks and examples for the Gemini API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Meta · Llama
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/meta-llama/llama-cookbook" rel="noopener noreferrer"&gt;Llama Cookbook&lt;/a&gt;&lt;/strong&gt;: Meta's recipes for running, fine-tuning and building with Llama models.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mistral AI
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.mistral.ai/" rel="noopener noreferrer"&gt;Mistral docs&lt;/a&gt;&lt;/strong&gt;: Guides for Mistral's open and commercial models.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run models on your own machine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;&lt;/strong&gt;: The easiest way to run open models on your own laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ml-explore/mlx-lm" rel="noopener noreferrer"&gt;MLX LM&lt;/a&gt;&lt;/strong&gt;: Run and fine-tune language models fast on Apple silicon Macs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ggml-org/llama.cpp" rel="noopener noreferrer"&gt;llama.cpp&lt;/a&gt;&lt;/strong&gt;: The engine that makes local models run on everyday hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Made here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/agentic-loop-engineering/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Agentic Loop Engineering&lt;/a&gt;&lt;/strong&gt;: Designing tight, verifiable agent loops with Claude Code — the verify step, tools, and feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/mlx-lm/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;mlx-lm&lt;/a&gt;&lt;/strong&gt;: Run, quantize, serve, and fine-tune LLMs locally on Apple Silicon with Apple's mlx-lm — the CLI and Python surfaces, from first principles, every example verified on an M4 Pro.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The up-to-date list, and the other paths (code, cloud, AI, kids and more), is at &lt;a href="https://brianpfeil.com/learn/models/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn/models/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>claude</category>
      <category>learning</category>
    </item>
    <item>
      <title>Help a kid start coding: 13 free resources</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 19:11:58 +0000</pubDate>
      <link>https://dev.to/pfeilbr/help-a-kid-start-coding-13-free-resources-3j5o</link>
      <guid>https://dev.to/pfeilbr/help-a-kid-start-coding-13-free-resources-3j5o</guid>
      <description>&lt;p&gt;Block coding, games and first apps for young learners.&lt;/p&gt;

&lt;p&gt;I keep a directory of free ways to learn at &lt;a href="https://brianpfeil.com/learn/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn&lt;/a&gt;, sorted by goal, and every link opens without signing in. This is one of its paths: 13 resources, with the ones I'd start with marked ⭐.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://scratch.mit.edu/" rel="noopener noreferrer"&gt;Scratch&lt;/a&gt;&lt;/strong&gt;, by MIT ⭐: MIT's drag-and-drop coding for kids, with millions of shared projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://code.org/" rel="noopener noreferrer"&gt;Code.org&lt;/a&gt;&lt;/strong&gt;: Hour of Code and full courses for every grade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://learn.khanacademy.org/khan-academy-kids/" rel="noopener noreferrer"&gt;Khan Academy Kids&lt;/a&gt;&lt;/strong&gt;: A free learning app for ages 2 to 8.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://lightbot.com/" rel="noopener noreferrer"&gt;Lightbot&lt;/a&gt;&lt;/strong&gt;: A puzzle game that teaches programming logic without typing any code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://appinventor.mit.edu/" rel="noopener noreferrer"&gt;App Inventor&lt;/a&gt;&lt;/strong&gt;, by MIT: Build real phone apps with blocks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.apple.com/swift-playground/" rel="noopener noreferrer"&gt;Swift Playgrounds&lt;/a&gt;&lt;/strong&gt;, by Apple: Apple's app for learning to code in Swift on an iPad or Mac.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://create.roblox.com/docs" rel="noopener noreferrer"&gt;Roblox Creator Hub&lt;/a&gt;&lt;/strong&gt;, by Roblox: Learn to make Roblox games in Lua, straight from Roblox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://education.minecraft.net/" rel="noopener noreferrer"&gt;Minecraft Education&lt;/a&gt;&lt;/strong&gt;: Coding and STEM lessons inside Minecraft.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://codeclub.org/en/coderdojo-community" rel="noopener noreferrer"&gt;CoderDojo&lt;/a&gt;&lt;/strong&gt;: Free, volunteer-led coding clubs for young people around the world.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Made here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/projects/pokemon-game/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Mathmon Battle League&lt;/a&gt;&lt;/strong&gt;: A creature-collecting card battler where every attack is a maths problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/projects/animal-fun/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Animal Fun&lt;/a&gt;&lt;/strong&gt;: iPhone and iPad app to help kids learn about animals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/projects/alpha-sound/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Alpha Sound&lt;/a&gt;&lt;/strong&gt;: A simple ABC's learning program for children.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/projects/vehicle-fun-for-kids/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Vehicle Fun for Kids&lt;/a&gt;&lt;/strong&gt;: Interactive vehicle app with real pictures and sounds for young children.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The up-to-date list, and the other paths (code, cloud, AI, kids and more), is at &lt;a href="https://brianpfeil.com/learn/kids/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn/kids/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>education</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>Read the papers behind it: 7 free resources</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 19:11:47 +0000</pubDate>
      <link>https://dev.to/pfeilbr/read-the-papers-behind-it-7-free-resources-32kb</link>
      <guid>https://dev.to/pfeilbr/read-the-papers-behind-it-7-free-resources-32kb</guid>
      <description>&lt;p&gt;The original ideas, straight from the source.&lt;/p&gt;

&lt;p&gt;I keep a directory of free ways to learn at &lt;a href="https://brianpfeil.com/learn/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn&lt;/a&gt;, sorted by goal, and every link opens without signing in. This is one of its paths: 7 resources, with the ones I'd start with marked ⭐.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/1706.03762" rel="noopener noreferrer"&gt;Attention Is All You Need&lt;/a&gt;&lt;/strong&gt;, by Vaswani et al., 2017 ⭐: The 2017 paper that introduced the transformer behind every modern AI model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf" rel="noopener noreferrer"&gt;Dynamo: Amazon's Highly Available Key-value Store&lt;/a&gt;&lt;/strong&gt;, by DeCandia et al., 2007 ⭐: The 2007 paper that shaped a generation of distributed databases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/papers-we-love/papers-we-love" rel="noopener noreferrer"&gt;Papers We Love&lt;/a&gt;&lt;/strong&gt;: A community-curated library of computer science papers worth reading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://blog.acolyer.org/" rel="noopener noreferrer"&gt;The Morning Paper&lt;/a&gt;&lt;/strong&gt;, by Adrian Colyer: Years of accessible write-ups of important CS papers, one each weekday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;&lt;/strong&gt;: Where new AI and computer science research appears first, free to read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://martinfowler.com/" rel="noopener noreferrer"&gt;martinfowler.com&lt;/a&gt;&lt;/strong&gt;, by Martin Fowler: Decades of clear writing on software design, refactoring and architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://highscalability.com/" rel="noopener noreferrer"&gt;High Scalability&lt;/a&gt;&lt;/strong&gt;: Case studies of how real companies built systems at scale.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The up-to-date list, and the other paths (code, cloud, AI, kids and more), is at &lt;a href="https://brianpfeil.com/learn/papers/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn/papers/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>ai</category>
      <category>distributedsystems</category>
      <category>learning</category>
    </item>
    <item>
      <title>Learn to code from zero: 11 free resources</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 19:11:38 +0000</pubDate>
      <link>https://dev.to/pfeilbr/learn-to-code-from-zero-11-free-resources-5560</link>
      <guid>https://dev.to/pfeilbr/learn-to-code-from-zero-11-free-resources-5560</guid>
      <description>&lt;p&gt;Never written a line of code? Start here.&lt;/p&gt;

&lt;p&gt;I keep a directory of free ways to learn at &lt;a href="https://brianpfeil.com/learn/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn&lt;/a&gt;, sorted by goal, and every link opens without signing in. This is one of its paths: 11 resources, with the ones I'd start with marked ⭐.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://cs50.harvard.edu/x/" rel="noopener noreferrer"&gt;CS50x&lt;/a&gt;&lt;/strong&gt;, by Harvard ⭐: Harvard's intro to computer science, the most popular course of its kind. Scratch, C, Python, SQL and the web.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.freecodecamp.org/" rel="noopener noreferrer"&gt;freeCodeCamp&lt;/a&gt;&lt;/strong&gt;: Thousands of hours of interactive lessons and projects, with free certifications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.theodinproject.com/" rel="noopener noreferrer"&gt;The Odin Project&lt;/a&gt;&lt;/strong&gt;: A full-stack web curriculum where you build real projects on your own machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.khanacademy.org/computing" rel="noopener noreferrer"&gt;Computing&lt;/a&gt;&lt;/strong&gt;, by Khan Academy: Gentle, interactive programming and computer science lessons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn_web_development" rel="noopener noreferrer"&gt;Learn web development&lt;/a&gt;&lt;/strong&gt;, by MDN: HTML, CSS and JavaScript taught by the people who write the web's reference docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://missing.csail.mit.edu/" rel="noopener noreferrer"&gt;The Missing Semester&lt;/a&gt;&lt;/strong&gt;, by MIT ⭐: The shell, git, editors and debugging — the tools school never teaches.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Made here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/auth/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Web Authentication&lt;/a&gt;&lt;/strong&gt;: A mental model of modern web auth — sessions vs tokens, OAuth2/OIDC, passwordless and passkeys — built concept-first but always landing on how you'd wire it into a real app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/v8-javascript-engine/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;V8 JavaScript Engine&lt;/a&gt;&lt;/strong&gt;: How V8 turns JavaScript into fast machine code — parsing, the JIT pipeline, and hidden classes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/cpp-standard-library/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;C++ Standard Library&lt;/a&gt;&lt;/strong&gt;: A practical, category-by-category tour of the most-used C++ standard library classes — containers, strings, smart pointers, algorithms, and more — so you reach for the right one by reflex.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/playground/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Browser-Testing Playground&lt;/a&gt;&lt;/strong&gt;: Claude Code as an autonomous E2E/UI tester — driving a browser and verifying behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://brianpfeil.com/courses/stripe/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/strong&gt;: Hand-build payment integrations that sell digital products — checkout, webhooks, subscriptions.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The up-to-date list, and the other paths (code, cloud, AI, kids and more), is at &lt;a href="https://brianpfeil.com/learn/code/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn/code/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Learn from the people I follow: 8 free resources</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 19:09:04 +0000</pubDate>
      <link>https://dev.to/pfeilbr/learn-from-the-people-i-follow-8-free-resources-e2i</link>
      <guid>https://dev.to/pfeilbr/learn-from-the-people-i-follow-8-free-resources-e2i</guid>
      <description>&lt;p&gt;The builders and thinkers I read and listen to most, and where they teach for free.&lt;/p&gt;

&lt;p&gt;I keep a directory of free ways to learn at &lt;a href="https://brianpfeil.com/learn/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn&lt;/a&gt;, sorted by goal, and every link opens without signing in. This is one of its paths: 8 resources, with the ones I'd start with marked ⭐.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simon Willison
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://simonwillison.net/" rel="noopener noreferrer"&gt;Simon Willison's Weblog&lt;/a&gt;&lt;/strong&gt; ⭐: Daily, hands-on notes on using LLMs to build software. The best single place to keep up with AI as an engineer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://llm.datasette.io/" rel="noopener noreferrer"&gt;LLM&lt;/a&gt;&lt;/strong&gt;: A command-line tool for talking to almost any model, local or hosted. Its docs double as a tutorial.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lex Fridman
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://lexfridman.com/podcast/" rel="noopener noreferrer"&gt;Lex Fridman Podcast&lt;/a&gt;&lt;/strong&gt;: Long-form conversations with AI researchers, engineers and scientists. Full episodes with transcripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Andrew Huberman
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.hubermanlab.com/podcast" rel="noopener noreferrer"&gt;Huberman Lab&lt;/a&gt;&lt;/strong&gt;: How the brain and body work, and science-based habits for sleep, focus and learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Addy Osmani
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.patterns.dev/" rel="noopener noreferrer"&gt;Patterns.dev&lt;/a&gt;&lt;/strong&gt; ⭐: Design, rendering and performance patterns for modern web apps, free, including his JavaScript design patterns book.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://addyosmani.com/blog/" rel="noopener noreferrer"&gt;AddyOsmani.com&lt;/a&gt;&lt;/strong&gt;: Essays from a Google engineering lead on AI-assisted coding, working with agents and web performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mitchell Hashimoto
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mitchellh.com/writing" rel="noopener noreferrer"&gt;Writing&lt;/a&gt;&lt;/strong&gt;: The HashiCorp co-founder on building Ghostty, systems programming in Zig and how he works with AI agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pieter Levels (&lt;a class="mentioned-user" href="https://dev.to/levelsio"&gt;@levelsio&lt;/a&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://levels.io/" rel="noopener noreferrer"&gt;levels.io&lt;/a&gt;&lt;/strong&gt;: How one person ships and runs profitable products alone: building in public, keeping the stack simple, launching fast.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The up-to-date list, and the other paths (code, cloud, AI, kids and more), is at &lt;a href="https://brianpfeil.com/learn/people/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=learn" rel="noopener noreferrer"&gt;brianpfeil.com/learn/people/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>programming</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Architecture Review Checklist: 41 Questions I Ask</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 10:43:18 +0000</pubDate>
      <link>https://dev.to/pfeilbr/the-architecture-review-checklist-41-questions-i-ask-1o5n</link>
      <guid>https://dev.to/pfeilbr/the-architecture-review-checklist-41-questions-i-ask-1o5n</guid>
      <description>&lt;p&gt;I've sat on the reviewing side of a few hundred cloud architecture reviews.&lt;br&gt;
Different teams, vendors and business problems — but the same forty-odd&lt;br&gt;
questions come up again and again. Here they are, grouped the way I think&lt;br&gt;
about them.&lt;/p&gt;

&lt;p&gt;Use it two ways: &lt;strong&gt;if you're presenting&lt;/strong&gt;, answer every question before the&lt;br&gt;
meeting and the review becomes a conversation instead of an interrogation.&lt;br&gt;
&lt;strong&gt;If you're reviewing&lt;/strong&gt;, it's a starting point; add the questions your&lt;br&gt;
organisation keeps having to ask.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point:&lt;/strong&gt; The goal of a review isn't to catch a team out. It's to make sure the&lt;br&gt;
architecture that gets &lt;strong&gt;built&lt;/strong&gt; is the one everyone &lt;strong&gt;agreed&lt;/strong&gt; to, and that&lt;br&gt;
nobody is surprised six months later by a bill, an outage or an audit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. Compute: why not something more managed?
&lt;/h2&gt;

&lt;p&gt;My default order of preference is SaaS, then serverless, then containers, then&lt;br&gt;
servers (&lt;a href="https://brianpfeil.com/architecture/compute-ladder/" rel="noopener noreferrer"&gt;more on that ladder&lt;/a&gt;). Most of these&lt;br&gt;
questions are about moving one rung up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;Could this be SaaS?&lt;/strong&gt; If not, write down why not.&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Why not serverless?&lt;/strong&gt; The burden of proof is on the less-managed option.&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;If it needs containers, why not a serverless container platform&lt;/strong&gt; rather than a self-managed cluster?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is the workload really stateless&lt;/strong&gt;, or does it quietly depend on local disk?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is this a lift-and-shift?&lt;/strong&gt; Where's the chance to move up the stack later?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;What starts each process?&lt;/strong&gt; Could a cron job or a poller become an event?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Will anything hit a limit?&lt;/strong&gt; Function timeouts, payload sizes, header sizes, API quotas. Check the service quotas &lt;em&gt;before&lt;/em&gt; you design around a service.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Vendor and ownership
&lt;/h2&gt;

&lt;p&gt;Vendor products show up in a lot of reviews, and the questions are always&lt;br&gt;
about who does the work after go-live.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;Who installs, patches and upgrades it&lt;/strong&gt;, and on what cadence?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;How does the vendor ship updates?&lt;/strong&gt; Are their images and packages scanned?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Who supports it in production&lt;/strong&gt;, and what does that support actually cover?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;What's the exact split of responsibility&lt;/strong&gt; between you, the vendor and the cloud provider?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Identity, access and secrets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;How do people sign in?&lt;/strong&gt; Does it support single sign-on over SAML or OIDC?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;For each component: what authenticates to it?&lt;/strong&gt; If it isn't native cloud IAM, why not?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Where do credentials, keys and tokens live&lt;/strong&gt;, who can read them, and is rotation automatic?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is any automation running on a person's credentials?&lt;/strong&gt; That's an anti-pattern — use a role.&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Does every function and task have its own least-privilege role?&lt;/strong&gt; Prefer narrow custom policies over broad managed ones.&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;For a public endpoint with no auth, what stops abuse?&lt;/strong&gt; A web application firewall, throttling, API keys, all three?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Data and compliance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;What's the data classification and business criticality?&lt;/strong&gt; Is any of it regulated?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;How is data encrypted at rest and in transit?&lt;/strong&gt; Does anything need encrypting on the client side?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;How long is data kept?&lt;/strong&gt; Can it move to cheaper storage tiers, or be deleted?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Are there audit requirements&lt;/strong&gt;, and could you produce the evidence tomorrow?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is sensitive data kept out of the logs?&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Does it matter where the data physically lives?&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Networking
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;Which ports and protocols does it need?&lt;/strong&gt; Anything inbound other than 443 needs a reason.&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;What has to be public, and why?&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;How does it connect to other environments, on-premises and partners?&lt;/strong&gt; Who provides and who consumes each private link?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;How is DNS handled?&lt;/strong&gt; Put a stable name in front of generated endpoints.&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Why does the application care about IP addresses at all?&lt;/strong&gt; Identity beats IP allow-lists.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Resilience, high availability and disaster recovery
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;What are the recovery time and recovery point objectives?&lt;/strong&gt; Is DR even required?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is it multi-AZ?&lt;/strong&gt; For anything that isn't, what compensates?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is anything stateful sitting in the recovery path?&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Can lost data be rebuilt or replayed&lt;/strong&gt; from another source?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Are handlers idempotent&lt;/strong&gt;, so a retry is safe? Where do failures go — a dead-letter queue — and who replays them?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Observability and operations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;Which logs and metrics exist, and which ones alarm?&lt;/strong&gt; Every error metric should either page someone or trigger self-healing. An error nobody hears about isn't monitored.&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Are logs structured&lt;/strong&gt;, with metrics derived from them?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is there distributed tracing&lt;/strong&gt; across the serverless pieces?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Can it be built, deployed and run without anyone clicking in the console?&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Delivery and cost
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☐ &lt;strong&gt;Is all of the infrastructure versioned as code&lt;/strong&gt;, with a pipeline that runs on every commit?&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Is there one account per environment?&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;Are the required tags applied?&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;☐ &lt;strong&gt;What will it cost&lt;/strong&gt; — including the idle cost and data transfer, which are the two numbers most estimates leave out?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What gets a team sent back
&lt;/h2&gt;

&lt;p&gt;In my experience it's rarely a bad idea that sinks a review. It's a &lt;strong&gt;missing&lt;br&gt;
answer&lt;/strong&gt;. The usual gaps are failover, backups, alarms, the support model and&lt;br&gt;
cost. If your diagrams and docs cover those, you're most of the way there —&lt;br&gt;
&lt;a href="https://brianpfeil.com/architecture/prepare-for-an-architecture-review/" rel="noopener noreferrer"&gt;here's how I'd prepare&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Watch out:&lt;/strong&gt; A concession is fine — every real system has some. But write it down with&lt;br&gt;
&lt;strong&gt;a date to fix it&lt;/strong&gt;. An undated exception is a permanent one.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://brianpfeil.com/architecture/architecture-review-checklist/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=guide" rel="noopener noreferrer"&gt;brianpfeil.com&lt;/a&gt;, part of a series of cloud architecture guides drawn from the reviews I run.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>architecturereview</category>
      <category>aws</category>
      <category>serverless</category>
    </item>
    <item>
      <title>How to Prepare for an Architecture Review</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 10:43:08 +0000</pubDate>
      <link>https://dev.to/pfeilbr/how-to-prepare-for-an-architecture-review-1j8o</link>
      <guid>https://dev.to/pfeilbr/how-to-prepare-for-an-architecture-review-1j8o</guid>
      <description>&lt;p&gt;Most architecture reviews that go badly go badly for the same reason: the team&lt;br&gt;
arrives with a good design and an incomplete story. The reviewers spend the&lt;br&gt;
hour discovering gaps instead of discussing trade-offs, and everyone books a&lt;br&gt;
second meeting.&lt;/p&gt;

&lt;p&gt;This is what I'd tell any team preparing for one. None of it is specific to a&lt;br&gt;
company; it's what reviewers everywhere are trying to find out.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;📐 Diagram — Review flow: pre-read, review, recommendations, target-state document, build (&lt;a href="https://brianpfeil.com/architecture/prepare-for-an-architecture-review/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=guide" rel="noopener noreferrer"&gt;see it in the original&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Meet the entry criteria
&lt;/h2&gt;

&lt;p&gt;Before anyone looks at a diagram, reviewers want five facts. If any are&lt;br&gt;
missing, that's the first thing they'll ask about.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bring&lt;/th&gt;
&lt;th&gt;Why they ask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The business need and a short executive summary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every trade-off is judged against what the system is &lt;em&gt;for&lt;/em&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The proposed architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Obviously — but as diagrams, not prose (see below).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Whether it's regulated&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Changes the controls, the evidence and sometimes the region.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The data classification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drives encryption, access, retention and logging.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The business criticality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drives availability targets and whether DR is needed at all.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  2. Bring diagrams reviewers can read
&lt;/h2&gt;

&lt;p&gt;A good diagram answers questions before they're asked. Draw it in your cloud&lt;br&gt;
provider's reference-architecture style, number the steps of the main flow,&lt;br&gt;
and show the boundaries: internet, your company, on-premises, other clouds,&lt;br&gt;
partners and SaaS; accounts, regions, networks, availability zones and&lt;br&gt;
subnets; devices and users.&lt;/p&gt;

&lt;p&gt;One diagram can't show everything. I ask for four:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The core solution&lt;/strong&gt; — the request and data flow, numbered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build and deploy&lt;/strong&gt; — the pipeline, from commit to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability, backup and recovery&lt;/strong&gt; — what fails over to where.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The vendor or partner lifecycle&lt;/strong&gt;, if there is one — who ships updates and how they arrive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's more on this in &lt;a href="https://brianpfeil.com/architecture/diagrams-and-decision-records/" rel="noopener noreferrer"&gt;Diagrams and decision records reviewers trust&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Cover the cross-cutting concerns
&lt;/h2&gt;

&lt;p&gt;These are the topics teams leave out, and each one is a reason to be sent back.&lt;br&gt;
Put an answer to every row on a page or a diagram.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concern&lt;/th&gt;
&lt;th&gt;The question behind it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure as code&lt;/td&gt;
&lt;td&gt;Can the whole thing be rebuilt from a repository?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD&lt;/td&gt;
&lt;td&gt;What happens on every commit?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM, per component&lt;/td&gt;
&lt;td&gt;What can each piece do, and nothing more?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secrets&lt;/td&gt;
&lt;td&gt;Where are they, and do they rotate?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App configuration&lt;/td&gt;
&lt;td&gt;Where does it live, and how does it change safely?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logs, metrics, alarms&lt;/td&gt;
&lt;td&gt;Who finds out when it breaks?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backups&lt;/td&gt;
&lt;td&gt;What's backed up, how often, and has a restore been tested?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-healing&lt;/td&gt;
&lt;td&gt;What recovers without a human?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disaster recovery&lt;/td&gt;
&lt;td&gt;Recovery time and point objectives, and how you'd meet them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versioning&lt;/td&gt;
&lt;td&gt;APIs, schemas, artefacts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit&lt;/td&gt;
&lt;td&gt;What evidence exists, and where?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Including idle cost and data transfer.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Mark every service's status
&lt;/h2&gt;

&lt;p&gt;If your organisation keeps a list of approved cloud services, mark each service&lt;br&gt;
on the diagram as &lt;strong&gt;approved&lt;/strong&gt;, &lt;strong&gt;approved with conditions&lt;/strong&gt;, &lt;strong&gt;not approved&lt;/strong&gt;&lt;br&gt;
or &lt;strong&gt;not yet requested&lt;/strong&gt;, and bring a list of the gaps. It turns a vague worry&lt;br&gt;
("are we allowed to use that?") into a tracked action.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Justify anything that isn't managed
&lt;/h2&gt;

&lt;p&gt;Reviewers will push anything that isn't fully managed and pay-per-use up the&lt;br&gt;
ladder: servers toward containers, containers toward serverless, custom code&lt;br&gt;
toward a managed service. That's fine — sometimes there's a real reason. But&lt;br&gt;
come ready to show you understand your workload in detail: its traffic shape,&lt;br&gt;
its state, its runtime, its limits. "We've always run it on a VM" is not a reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Leave with decisions, not just notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep &lt;strong&gt;a shared parking lot&lt;/strong&gt; for questions nobody can answer in the room,
and a chat channel for follow-ups, so the meeting doesn't stall.&lt;/li&gt;
&lt;li&gt;Expect &lt;strong&gt;recommendations in two tiers&lt;/strong&gt;: the primary target, and an interim
step you can ship now on the way there.&lt;/li&gt;
&lt;li&gt;Once you've picked an option, write the &lt;strong&gt;target-state architecture
document&lt;/strong&gt; and get it approved &lt;em&gt;before&lt;/em&gt; you build. Come back only when
something significant changes.&lt;/li&gt;
&lt;li&gt;Record the big choices as &lt;a href="https://brianpfeil.com/architecture/diagrams-and-decision-records/#decision-records" rel="noopener noreferrer"&gt;architecture decision records&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Store every artefact, versioned, in one predictable place linked to the
ticket that tracks the work.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point:&lt;/strong&gt; The more completely your diagrams and documents capture the agreed&lt;br&gt;
architecture, the more likely it is that the thing that gets built matches it.&lt;br&gt;
That's the whole point of the exercise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Before you send the invite
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☐ Executive summary, business need, regulation, data classification, criticality&lt;/li&gt;
&lt;li&gt;☐ Core, CI/CD, availability/DR and (if relevant) vendor diagrams, numbered and bounded&lt;/li&gt;
&lt;li&gt;☐ An answer for every cross-cutting concern in the table above&lt;/li&gt;
&lt;li&gt;☐ Every service marked with its approval status; gaps listed&lt;/li&gt;
&lt;li&gt;☐ A reason for everything that isn't managed and pay-per-use&lt;/li&gt;
&lt;li&gt;☐ A cost estimate with idle cost and data transfer&lt;/li&gt;
&lt;li&gt;☐ The &lt;a href="https://brianpfeil.com/architecture/architecture-review-checklist/" rel="noopener noreferrer"&gt;review checklist&lt;/a&gt; answered&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://brianpfeil.com/architecture/prepare-for-an-architecture-review/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=guide" rel="noopener noreferrer"&gt;brianpfeil.com&lt;/a&gt;, part of a series of cloud architecture guides drawn from the reviews I run.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>architecturereview</category>
      <category>diagrams</category>
      <category>career</category>
    </item>
    <item>
      <title>The Compute Ladder: Serverless-First, Then Work Backwards</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 10:42:53 +0000</pubDate>
      <link>https://dev.to/pfeilbr/the-compute-ladder-serverless-first-then-work-backwards-314i</link>
      <guid>https://dev.to/pfeilbr/the-compute-ladder-serverless-first-then-work-backwards-314i</guid>
      <description>&lt;p&gt;When a team asks "where should this run?", I don't start with their stack. I&lt;br&gt;
start at the top of a ladder and ask what stops us from staying there.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;📐 Diagram — The compute ladder: SaaS at the top, then serverless, containers, and servers at the bottom. Higher rungs mean less to operate. (&lt;a href="https://brianpfeil.com/architecture/compute-ladder/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=guide" rel="noopener noreferrer"&gt;see it in the original&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Design the ideal, most-managed version first. Then work backwards, one rung&lt;br&gt;
at a time, and only for a constraint you can name.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The mistake I see most often is the reverse: start from what the team already&lt;br&gt;
runs, and only move up if someone insists. That produces architectures shaped&lt;br&gt;
by habit rather than by the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why each rung up is worth it
&lt;/h2&gt;

&lt;p&gt;Every step up the ladder hands a whole category of work to someone else:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Moving from…&lt;/th&gt;
&lt;th&gt;…to&lt;/th&gt;
&lt;th&gt;You stop owning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Servers&lt;/td&gt;
&lt;td&gt;Containers&lt;/td&gt;
&lt;td&gt;OS images, most patching, bin-packing by hand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Containers&lt;/td&gt;
&lt;td&gt;Serverless&lt;/td&gt;
&lt;td&gt;Cluster capacity, scaling policy, idle cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serverless&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;td&gt;The code itself&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's why I treat less-managed options as the ones that need justifying. The&lt;br&gt;
burden of proof sits with the servers, not the functions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Within each rung, there's a ladder too
&lt;/h2&gt;

&lt;p&gt;The same thinking applies inside a rung.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Serverless functions&lt;/strong&gt;, most managed first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The provider's managed runtime&lt;/li&gt;
&lt;li&gt;The managed runtime plus layers for shared code&lt;/li&gt;
&lt;li&gt;A container image as the function package&lt;/li&gt;
&lt;li&gt;A custom runtime&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Containers&lt;/strong&gt;, most managed first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A managed batch service, for work that runs and finishes&lt;/li&gt;
&lt;li&gt;Serverless containers — no cluster to manage&lt;/li&gt;
&lt;li&gt;A container orchestrator, when you genuinely need its control&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What a "preferred" service looks like
&lt;/h2&gt;

&lt;p&gt;When I'm choosing between services, the ones I reach for share four traits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pay-per-use&lt;/strong&gt; — no idle cost when nothing is happening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully managed&lt;/strong&gt; — no patching, no capacity planning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highly available by default&lt;/strong&gt; — multi-AZ without extra work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The provider carries most of the shared-responsibility model.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more of those a service has, the less your team has to build and run&lt;br&gt;
around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Services are Lego blocks
&lt;/h2&gt;

&lt;p&gt;Serverless architecture is mostly &lt;strong&gt;composition, not programming&lt;/strong&gt;. Think of a&lt;br&gt;
cloud provider's managed services the way you think of a language's standard&lt;br&gt;
library: you wouldn't write your own hash map, so don't write your own queue,&lt;br&gt;
retry loop or workflow engine.&lt;/p&gt;

&lt;p&gt;Two habits follow from that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Configuration over code.&lt;/strong&gt; If a service can do the job through
configuration — a direct integration, a routing rule, a lifecycle policy —
prefer that to a function. Code is a liability: it has to be tested,
patched and owned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn the blocks.&lt;/strong&gt; You can't compose what you don't know. Read the limits
and quotas page of every service &lt;em&gt;before&lt;/em&gt; you design around it; that's
where most surprises live.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Good reasons to step down a rung
&lt;/h2&gt;

&lt;p&gt;Stepping down isn't failure. These are constraints I'd accept:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Execution time or resources&lt;/strong&gt; beyond what functions allow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A vendor product&lt;/strong&gt; that only ships as a container or a server image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real local state&lt;/strong&gt; or specialised hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A proven cost crossover&lt;/strong&gt; at sustained high load — with the numbers, and
including the operations cost you're taking back on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And ones I wouldn't: familiarity, "we might need it later", or a design that&lt;br&gt;
only needs a server because it polls on a timer (make it&lt;br&gt;
&lt;a href="https://brianpfeil.com/architecture/architecture-anti-patterns/#polling-and-cron" rel="noopener noreferrer"&gt;event-driven&lt;/a&gt; instead).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point:&lt;/strong&gt; If you do step down, record why in a&lt;br&gt;
&lt;a href="https://brianpfeil.com/architecture/diagrams-and-decision-records/#decision-records" rel="noopener noreferrer"&gt;decision record&lt;/a&gt;&lt;br&gt;
and give the next step up a date. Today's constraint is often next year's&lt;br&gt;
new managed feature.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://brianpfeil.com/architecture/compute-ladder/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=guide" rel="noopener noreferrer"&gt;brianpfeil.com&lt;/a&gt;, part of a series of cloud architecture guides drawn from the reviews I run.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>serverless</category>
      <category>aws</category>
      <category>containers</category>
    </item>
    <item>
      <title>Cloud Architecture Anti-Patterns (and What to Do Instead)</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 10:38:31 +0000</pubDate>
      <link>https://dev.to/pfeilbr/cloud-architecture-anti-patterns-and-what-to-do-instead-do2</link>
      <guid>https://dev.to/pfeilbr/cloud-architecture-anti-patterns-and-what-to-do-instead-do2</guid>
      <description>&lt;p&gt;These are the patterns I flag most often in architecture reviews. None of them&lt;br&gt;
is a disaster on its own. Each one adds operational work, hides a failure mode,&lt;br&gt;
or makes the next change harder — and they compound.&lt;/p&gt;

&lt;p&gt;The examples use AWS service names because that's what I review most, but every&lt;br&gt;
major cloud has an equivalent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Glue code in a function
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; a direct service integration. If a function exists only to take a&lt;br&gt;
message from one managed service and hand it to another, let the services talk&lt;br&gt;
directly — API Gateway straight to a queue, a workflow calling an SDK&lt;br&gt;
integration, an event rule targeting the next service. &lt;strong&gt;Code is a liability&lt;/strong&gt;:&lt;br&gt;
every line has to be tested, patched and owned.&lt;/p&gt;

&lt;h3&gt;
  
  
  One big function or script that does many steps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; a workflow engine (Step Functions), one step per function. You get&lt;br&gt;
retries, error handling, timeouts and per-step visibility for free, and each&lt;br&gt;
step stays small enough to reason about.&lt;/p&gt;

&lt;h3&gt;
  
  
  Several workflows chained together
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; one parent workflow that calls the others. A run is then one&lt;br&gt;
thing you can see, retry and reason about, rather than a relay race.&lt;/p&gt;

&lt;h3&gt;
  
  
  A synchronous API in front of a long job
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; accept the request onto a queue and return immediately with an&lt;br&gt;
ID; let the client poll (or be notified) for the result. Synchronous calls&lt;br&gt;
turn slow work into timeouts and retries into duplicate work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storage events wired straight to a function
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; put a queue in between — &lt;em&gt;stable storage first&lt;/em&gt;. The queue&lt;br&gt;
absorbs bursts, retries failures and gives you a dead-letter queue to inspect,&lt;br&gt;
instead of silently dropping events when the function is throttled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Calling a flaky or someone-else's downstream API directly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; go through a queue or event bus, so you get buffering and&lt;br&gt;
back-pressure. Their outage becomes your backlog, not your outage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Polling and cron
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; event-driven triggers. A job that wakes every five minutes to ask&lt;br&gt;
"anything new?" is either late or wasteful, and it's usually the only reason&lt;br&gt;
the design needs a server. Most sources can emit an event when something&lt;br&gt;
changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compute
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A fixed fleet of virtual machines
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; managed or serverless compute, or at least an auto-scaling group.&lt;br&gt;
See &lt;a href="https://brianpfeil.com/architecture/compute-ladder/" rel="noopener noreferrer"&gt;the compute ladder&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Routing logic in application code
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; let the API gateway or load balancer route. Routing in&lt;br&gt;
configuration is visible, reviewable and changeable without a deploy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Function URLs for internal APIs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; an API gateway with a private endpoint, so internal APIs get&lt;br&gt;
authentication, throttling, logging and a stable name in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Credentials in environment variables or on disk
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; a secrets manager or parameter store, read at runtime by a role&lt;br&gt;
that's allowed to read exactly that secret — with rotation turned on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation running on a person's credentials, or long-lived keys
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; roles. Pipelines, scheduled jobs and integrations should assume a&lt;br&gt;
role with temporary credentials. When the person leaves, nothing breaks; when a&lt;br&gt;
key leaks, it has already expired.&lt;/p&gt;

&lt;h3&gt;
  
  
  SSH through a jump host
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; a session manager (Systems Manager Session Manager or similar):&lt;br&gt;
no inbound ports, no shared keys, and every session is logged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A relational database by default
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; ask what the access pattern really is. Analytics over files is&lt;br&gt;
often object storage plus a SQL query layer; spiky transactional work may suit&lt;br&gt;
a serverless relational database or a key-value store. An always-on database&lt;br&gt;
for a workload that runs twice a day is paying for a lot of idle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Raw CSV as the long-term format
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; a columnar format (Parquet) with lifecycle rules that move old data&lt;br&gt;
to cheaper tiers. Queries get faster and cheaper, and retention stops being&lt;br&gt;
manual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Database links between systems
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; an API or events. A database link couples two systems' schemas,&lt;br&gt;
release schedules and outages, and hides the dependency from everyone who&lt;br&gt;
reads the architecture diagram.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tooling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Two tools doing one job
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instead:&lt;/strong&gt; pick one. Two API management layers, or a CI server moonlighting&lt;br&gt;
as the integration runtime, doubles the patching, the permissions and the&lt;br&gt;
places to look when something breaks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point:&lt;/strong&gt; The common thread: &lt;strong&gt;prefer managed services composed through configuration,&lt;br&gt;
connected by queues and events, and accessed through roles.&lt;/strong&gt; Most of the&lt;br&gt;
anti-patterns above are a missing queue, a missing role, or code standing in&lt;br&gt;
for a service that already exists.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Want the questions that surface these? They're in&lt;br&gt;
&lt;a href="https://brianpfeil.com/architecture/architecture-review-checklist/" rel="noopener noreferrer"&gt;the architecture review checklist&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://brianpfeil.com/architecture/architecture-anti-patterns/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=guide" rel="noopener noreferrer"&gt;brianpfeil.com&lt;/a&gt;, part of a series of cloud architecture guides drawn from the reviews I run.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>serverless</category>
      <category>aws</category>
      <category>eventdriven</category>
    </item>
    <item>
      <title>Architecture Diagrams and Decision Records Reviewers Trust</title>
      <dc:creator>Brian Pfeil</dc:creator>
      <pubDate>Tue, 29 Sep 2026 10:38:15 +0000</pubDate>
      <link>https://dev.to/pfeilbr/architecture-diagrams-and-decision-records-reviewers-trust-8he</link>
      <guid>https://dev.to/pfeilbr/architecture-diagrams-and-decision-records-reviewers-trust-8he</guid>
      <description>&lt;p&gt;Two artefacts do most of the work in an architecture review: the &lt;strong&gt;diagram&lt;/strong&gt;,&lt;br&gt;
which shows what you're building, and the &lt;strong&gt;decision record&lt;/strong&gt;, which shows why.&lt;br&gt;
Get both right and the meeting is about trade-offs, not archaeology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diagrams
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use the reference-architecture style
&lt;/h3&gt;

&lt;p&gt;Draw in the style of your cloud provider's reference architectures, with the&lt;br&gt;
provider's official icons. Reviewers read that visual language fluently, and it&lt;br&gt;
stops arguments about what a box means. Free tools are fine — draw.io&lt;br&gt;
(including its VS Code extension) ships the major providers' icon sets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Number the flow
&lt;/h3&gt;

&lt;p&gt;Put a number on every arrow of the main path — 1, 2, 3 — and explain each&lt;br&gt;
step in a short list beside the diagram. A reviewer can then say "at step 4,&lt;br&gt;
what happens if…" and everyone is looking at the same place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Draw the boundaries
&lt;/h3&gt;

&lt;p&gt;Most security and networking questions are really questions about boundaries.&lt;br&gt;
Show them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Boundary&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Internet · your company · on-premises&lt;/td&gt;
&lt;td&gt;What's exposed, and what crosses the edge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other clouds · partners · SaaS&lt;/td&gt;
&lt;td&gt;Who you depend on and how you connect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accounts · regions&lt;/td&gt;
&lt;td&gt;Blast radius, data residency, DR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Networks · availability zones · subnets (public/private)&lt;/td&gt;
&lt;td&gt;Reachability and high availability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Devices · users&lt;/td&gt;
&lt;td&gt;Who actually starts each flow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  One diagram can't do everything
&lt;/h3&gt;

&lt;p&gt;I ask for a small set rather than one poster:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Core solution&lt;/strong&gt; — the numbered request and data flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build and deploy&lt;/strong&gt; — commit to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability, backup and recovery&lt;/strong&gt; — what fails over to where, and what
gets restored from what.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor or partner lifecycle&lt;/strong&gt; — how their updates reach you, if relevant.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point:&lt;/strong&gt; If a cross-cutting concern — secrets, alarms, backups, cost — isn't on any&lt;br&gt;
diagram or page, reviewers will assume it hasn't been designed. Usually they're&lt;br&gt;
right.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Decision records
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;architecture decision record (ADR)&lt;/strong&gt; is a short document that captures one&lt;br&gt;
significant decision: what you chose, what you didn't, and why. They're&lt;br&gt;
cheap to write, and they save hours when someone asks "why on earth did we…?"&lt;br&gt;
a year later — often you.&lt;/p&gt;

&lt;p&gt;Write one whenever you choose between real options: a database, a compute&lt;br&gt;
rung, a vendor, an integration style, or a concession you plan to fix later.&lt;/p&gt;

&lt;h3&gt;
  
  
  A template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# ADR-NNN: &amp;lt;short decision title&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Status: proposed | accepted | superseded by ADR-MMM
&lt;span class="p"&gt;-&lt;/span&gt; Deciders: &lt;span class="nt"&gt;&amp;lt;roles&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;not&lt;/span&gt; &lt;span class="na"&gt;just&lt;/span&gt; &lt;span class="na"&gt;names&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Date: YYYY-MM-DD

&lt;span class="gu"&gt;## Context and problem&lt;/span&gt;
What forces are at play? What question are we answering?

&lt;span class="gu"&gt;## Decision drivers&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; e.g. time to deliver, team skills, cost, risk, compliance

&lt;span class="gu"&gt;## Options considered&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Option A
&lt;span class="p"&gt;2.&lt;/span&gt; Option B
&lt;span class="p"&gt;3.&lt;/span&gt; Option C

&lt;span class="gu"&gt;## Decision&lt;/span&gt;
We chose &lt;span class="nt"&gt;&amp;lt;option&amp;gt;&lt;/span&gt;, because &lt;span class="nt"&gt;&amp;lt;the&lt;/span&gt; &lt;span class="na"&gt;drivers&lt;/span&gt; &lt;span class="na"&gt;it&lt;/span&gt; &lt;span class="na"&gt;satisfies&lt;/span&gt; &lt;span class="na"&gt;best&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;.

&lt;span class="gu"&gt;### Positive consequences&lt;/span&gt;
&lt;span class="gu"&gt;### Negative consequences (and how we'll live with them)&lt;/span&gt;

&lt;span class="gu"&gt;## Pros and cons of each option&lt;/span&gt;
&lt;span class="gu"&gt;### Option A&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Good, because …
&lt;span class="p"&gt;-&lt;/span&gt; Bad, because …
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tips that make ADRs useful
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Include the options you rejected.&lt;/strong&gt; The rejected options are what stop the
same debate happening again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name the drivers before the decision.&lt;/strong&gt; It keeps the choice honest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supersede, don't edit.&lt;/strong&gt; When a decision changes, write a new record and
link the old one. The history is the value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record concessions with a date.&lt;/strong&gt; "We'll run it on servers for now" is a
decision; "…and move to serverless containers by Q3" makes it a plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recommendations in two tiers
&lt;/h2&gt;

&lt;p&gt;When I write up a review, recommendations usually come as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary&lt;/strong&gt; — the target architecture we'd want if nothing held us back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interim&lt;/strong&gt; — a step the team can ship now, often "run it as-is on managed
compute", that moves toward the primary without blocking delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where there are several candidate services, I list them &lt;strong&gt;in the order to&lt;br&gt;
evaluate&lt;/strong&gt;, most managed and cheapest first — so the team stops at the first&lt;br&gt;
one that works rather than the first one they know.&lt;/p&gt;

&lt;h2&gt;
  
  
  The target-state document
&lt;/h2&gt;

&lt;p&gt;Once the team has chosen, they write a &lt;strong&gt;target-state architecture document&lt;/strong&gt; —&lt;br&gt;
the agreed architecture, diagrams and decisions in one place — and get it&lt;br&gt;
approved before the build starts. They come back only when something&lt;br&gt;
significant changes. Store it, versioned, next to everything else in one&lt;br&gt;
predictable place linked to the work item.&lt;/p&gt;

&lt;p&gt;Related: &lt;a href="https://brianpfeil.com/architecture/prepare-for-an-architecture-review/" rel="noopener noreferrer"&gt;How to prepare for an architecture review&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://brianpfeil.com/architecture/diagrams-and-decision-records/?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=guide" rel="noopener noreferrer"&gt;brianpfeil.com&lt;/a&gt;, part of a series of cloud architecture guides drawn from the reviews I run.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>diagrams</category>
      <category>adr</category>
      <category>documentation</category>
    </item>
  </channel>
</rss>
