Engineering practice
How engineering teams work: process, estimation, hiring and leadership.
Reports
- Related notes by meaning: an embedding index won memo's Ask and lost the chat eval
Memo now picks the related notes Ask reads beside each article from a 522-note bge-m3 index instead of the folder a note sits in. The same index lost a blind 40-question…
- Five sources made 72% of our 5,068 pages: six months of a Worker that watches our jobs
A Cloudflare Worker has watched our hosts and 193 live job heartbeats since April 2026. This report counts its 5,068 pages, traces each spike to its cause, and records…
- The 2025 roadmap, scored: 22 promises, 5 kept, 9 dropped
Our January 2025 plan promised four bets and five chairs. In October 2026 I scored all 22 promises against our repos, databases and pages: 5 kept, 8 half kept and 9…
- We called ten technology arcs in June 2025. eight of the 60 experiments we planned got built.
Sixteen months after ten thesis notes, a scored ledger of what we built, which clients paid and what the market did, plus the five-step method that produced the calls.
- Memo, rebuilt: Elixir and DuckDB out, Cloudflare and D1 in
Memo's May 2025 build notes described Elixir, DuckDB and GitHub Pages. This report sets them beside today's Workers, D1, R2 and two-repo publish, with the dates, PRs and…
Writing
- How trust works at Dwarves: from your team to the people we call first
Trust grows in three circles, from your team to the people we call first in a crisis. What each circle gets, what membership costs, and how a person or a report loses it.
- The Go bet worked, then we tried to double the team
A hindsight report on Dwarves' Go bet: headcount from 2015 to 2024, 43 start dates in four quarters, who stayed past a year, and the hiring rules we changed afterwards.…
- We stopped testing engineers on speed
Dwarves cut the weight of timed algorithm problems in its technical interview from 60% to 15%. The dates, the weights, and the new hour.
- Speed beats perfectionism in AI adaptation
Developers who adapt fast to AI are thriving. Those who overthink are falling behind.
- Vetting proven talents
Guidelines and criteria for vetting high-level engineering talents, especially those leveraging AI.
- #1 Coffee craftsmanship lessons for software engineering
Our visit to 43 Factory coffee shop in Danang revealed surprising parallels between coffee craftsmanship and software engineering. We discovered valuable insights about…
- #2 Film production lessons for software engineering
Our visit to DZS Media revealed surprising parallels between film production and software development. Their meticulous planning, focus on getting things right the first…
- No. 19: Tay Nguyen on focusing on the core
Tay Nguyen, a Senior Software Engineer at Dwarves in 2023, on how he knew IT was his field, his rule of fixing the core of a problem, and leaving a good job that did not…
- No. 03: Quynh Le on testing as a career
Quynh Le on fighting her way into IT, moving from Java developer to tester, and why testing is a career, not a fallback for people who cannot code. A TechieStory…
- Ideas over titles at Dwarves
The working principles behind how Dwarves runs its team, from ideas that win on merit to open check-ins, hiring on skill and shipping to users, collected from culture…
Research notes
- IC and management
Philip Su's journey from IC to management reveals three career growth drivers and one critical question every potential leader must answer. The insights challenge…
- Let AI ask you
Most people give AI commands and expect perfect results, but the most effective approach flips this dynamic. Letting AI ask you questions transforms shallow outputs into…
- Your AI approach
Most people struggle with AI tool paralysis and prompt fatigue, but building an AI-native workflow comes down to three focused strategies. The key is systems over tools.
- Our view on fullstack engineering
Discover what full-stack engineering truly means, exploring how skilled developers blend frontend, backend, and infrastructure knowledge to create seamless, user-focused…
- Database designs for multilingual apps: column, JSON and translation tables
Learn how to design multilingual databases using column-based, JSON-based, and translation table approaches to efficiently manage multi-language support for apps with…
- How to run backlog grooming effectively
Learn how to run effective Backlog Grooming meetings in Agile teams to prioritize user stories, manage backlog tasks, and prepare for sprint planning while saving time…
- How quality assurance works in the product team: test record formats
Learn how to improve QA testing records with clear documentation formats for Mobile, BackEnd, and FrontEnd teams to track test status, scenarios, and related tickets…
- How a product team handles customer-reported incidents
Learn two effective ways to handle customer-reported software incidents, including using an engineering support SWAT team and creating incident channels for faster…
Show all 78 notes
- Software engineering is engineering: the case for it
Explore why software engineering is truly engineering, highlighting its use of discrete math, agile methods, professionalism, and unique tools like version control that…
- An infinite image gallery with react-three-fiber
Learn how to create an infinite image gallery with react-three-fiber featuring smooth mouse navigation and WebGL distortion effects for an endless 3D browsing experience.
- An introduction to software craftsmanship at Dwarves
Learn how software craftsmanship shapes quality coding, teamwork, and well-crafted software at Dwarf, emphasizing discipline, professionalism, and continuous improvement…
- Architecture decision records: documenting software choices
Learn how Architecture Decision Records (ADR) help teams document software choices, improve project clarity, and guide newcomers with clear context, solutions, and…
- Well crafted software
Discover how software craftsmanship enhances coding skills, promotes clean design, and drives continuous improvement for developers committed to building well-crafted,…
- Estimation in agile: story points, time and planning poker
Learn how to estimate work using story points, time, and planning poker for accurate project planning, with tips on improving quality through adjusted estimates and…
- MBTI preferences and cognitive functions, reading notes on My True Type
Reading notes on A.J. Drenth's My True Type covering the four MBTI preference pairs, the eight cognitive functions, how to work out a function stack, the Big Five,…
- The Hook Model and AARRR: reading notes on Nir Eyal's Hooked
Reading notes on Nir Eyal's Hooked: the four phases of the Hook Model, six checks for a habit-forming product, and how the Hook Model compares with the AARRR funnel.
- Waterfall, iterative or Agile: how to choose a software lifecycle for a project
Software 101 notes on when Waterfall, iterative and Agile each fit, where each one breaks, and why no single lifecycle suits every software project.
- Evidence communication: inform your audience instead of persuading them
Learn how evidence communication promotes honest, transparent sharing of research by presenting uncertainties and conflicts to inform audiences without persuasion or…
- The Pyramid Principle: organizing information from the bottom up
Learn how the Pyramid Principle helps organize information by synthesizing data from the bottom up and communicating key insights clearly from the top down for effective…
- Why expressing uncertainty does not undermine a researcher's authority
Researchers should openly share uncertainties in their findings, as expressing doubt builds trust and helps audiences better evaluate evidence, especially in changing…
- Data-first Approach & Maintaining Data Integrity with Zod Schema
This memo explores the importance of a data-first approach and how to maintain data integrity using Zod, a powerful TypeScript schema validation library
- Subscription pricing models
Overview of Subscription pricing models
- Radix sort
Radix sort is a non-comparative sorting algorithm that sorts integers by processing individual digits. Unlike comparison-based algorithms (like Quick Sort or Merge…
- The removal of Apache Kafka's dependency on Zookeeper
Kafka has been using Zookeeper for a variety of important functions. It uses Zookeeper to keep track of which brokers are part of the Kafka cluster. This is a critical…
- URL Redirect vs. Rewrite; What’s the difference?
When working with websites and managing the computers that show them, we run into two important ideas: redirect URLs and rewrite URLs. These ideas are like tools that…
- REPL-driven development with Vim, tmux and vim-slime
Learn how to use Vim, tmux, and vim-slime for REPL Driven Development to run and test code interactively in languages like Python, JavaScript, and OCaml with fast…
- A paid project as an interview assessment at Dwarves
Discover how a paid coding project at Dwarves using Discord API and Elixir provided a unique interview experience focused on real backend data engineering and engagement…
- A Redis rate limiter with counters and lists
Learn how to implement basic rate limiting in Redis using counters and lists to control user access by IP address, preventing too many requests in a set time period.
- GraphQL in microservices: a unified API gateway with Bramble
Discover how Bramble, an open-source GraphQL federation gateway, unifies multiple APIs into a single scalable schema with fine-grained access control and easy deployment…
- Radio talk 61: adopting a monorepo with Turborepo and Nx
Learn how adopting monorepos and tools like Turborepo and Nx can simplify code management, reduce duplication, and boost developer productivity for faster,…
- Burnup and burndown charts for tracking product progress
Learn how Burnup and Burndown charts help project managers track product development progress by showing completed work, remaining tasks, and timeline status clearly to…
- Project, program and portfolio managers: how the roles differ
Learn the key differences between Project Manager, Program manager, and Portfolio manager roles in software development and how they manage teams to meet client…
- Behavior driven development
Behavior driven development (BDD) is a software development process that encourages collaboration among developers, QA, and non-technical stakeholders.
- Software quality assurance: testing, planning and process control
Learn how Software Quality Assurance ensures software meets requirements through testing, planning, and process control to improve reliability, usability, and…
- The Pomodoro technique for focused work
Learn how the Pomodoro Technique boosts productivity by breaking work into focused 25-minute intervals with short breaks, helping you manage time and reduce mental…
- Team Topologies: stream-aligned teams and the enabling teams that support them
Notes on two Team Topologies team types: what a stream-aligned team owns and needs, and how an enabling team closes capability gaps for it.
- Story point estimation and Planning Poker
Learn how agile teams use story points and collaborative methods like Planning Poker to estimate workloads accurately, improving sprint planning and product development…
- DiSC personality types and how they shape teamwork
Learn about the DiSC personality model's four types—Dominance, Influence, Steadiness, and Conscientiousness—and how understanding these traits improves teamwork and…
- Team Topologies: four team types and three interaction modes
Discover how Team Topologies improves software delivery by organizing teams into four types and using three interaction modes to boost collaboration, reduce cognitive…
- Team-first thinking: small, stable teams that own their code
Effective software delivery depends on building stable, small teams of five to nine people who own their code, foster trust, minimize cognitive load, and communicate…
- Conway's Law: how communication structure shapes software design
Conway's Law explains how a company's communication structure shapes its software design, highlighting the need to align team organization with system architecture for…
- An Edsger Dijkstra interview on programming, elegance and testing limits
Discover Edsger W. Dijkstra's insights on programming, software elegance, testing limits, and the challenges of writing code, revealing why simplicity and hard work lead…
- The cold start problem in serverless functions and how to keep them warm
Learn how to reduce serverless function cold start delays by keeping containers warm with scheduled requests, improving performance for faster response times and better…
- A and CNAME records in DNS: when to use each
Learn the key differences between A records and CNAME records in DNS, including their uses for domain mapping, subdomains, and IP address management to optimize your…
- Setup Feedback Loop (research note)
The process of witnessing users using your product, seeing how they respond, collecting their reactions and putting them in measure.
- The Kano model (research note)
- A model to define the essential level of the next features - Based on Kano model, product's features are created out of 3 level - Threshold Attribut
- Defining features (research note)
This phase usually happens after the MVP stage.
- Software 101, the impact, types and history of software
The opening section of the Software 101 syllabus, covering what software is, why it matters, the main types of software and a short history of how it is built.
- Build in public (research note)
#buildinpublic in a process where creators are being transparent about their product building process.
- Product roadmap (research note)
Product roadmap is created at the beginning of product development.
- The correct way to build a KPI, with a mindful view of measurement
Discover how mindful meditation can transform your view on KPIs, promoting positive communication and reducing workplace stress for a healthier business environment.
- Software development life cycle 101: phases and artifacts
Learn the Software development life cycle (SDLC) basics, key project phases, and essential artifacts to build high-quality software on time and within budget for…
- Software modeling: core objects, diagrams and maintainability
Learn how software modeling improves system maintainability and scalability by defining core objects, using diagrams like ERD, SMD, and USD to design clear, efficient…
- Reusability in software development, part 1: benefits, problems and the reuse landscape
Why software teams reuse code, what goes wrong, and the landscape of reuse from single classes to complete systems.
- Reusability in software development, part 2: application frameworks and product lines
How object-oriented application frameworks package reuse, and how software product lines reuse a common core across a family of related products.
- Building an AI assistant for the terminal with Mimir
Mimir is a fast CLI tool that uses AI and heuristic methods to provide precise programming answers and debugging help directly in your terminal without browsing the web.
- Istio service mesh: traffic management, security and observability
Learn how Istio service mesh improves microservices networking with features like traffic management, security, and monitoring, and why it complements API gateways for…
- Splitting and reusing code in React: render props, HOCs and hooks
Learn how to split and reuse repetitive React code using render props pattern, higher-order components, and React hooks like useState for efficient modal state…
Playbooks
- Hide the MacBook notch: the 32-point fix for the macOS 27 menu bar
macOS 27 Golden Gate added a native » button that folds menu bar icons and broke Hidden Bar, Bartender and Ice in the same release. The first fix on a notched MacBook…
- A protocol for asynchronous shadowing
A standard operating procedure for a high-fidelity, low-latency shadowing workflow using git, tailscale, and aerc.
- The monthly delivery report: three questions, one table, three ratings
How the Dwarves delivery team builds the monthly delivery report. One Notion table answers three questions and scores every project on client happiness, lead performance…
- Strategic resource allocation
Discover how our consulting team optimizes resource allocation to deliver high-quality results while ensuring team well-being.
- Agile team workflow
How our teams apply agile and Scrum, including team formation, sprint loops, roles and answers to common questions.
- Diagram and project document structure
Which project diagrams to produce, how to draw them in Mermaid, and where to store and discuss them.
- Error message convention
The error structure, code ranges, log levels and wire format used across services, plus how to replicate and track errors.
- Pair programming
How we pair program, with driver and navigator roles, what to agree before, during and after a session, and what to avoid.
Show all 32 playbooks
- Project handover checklists
Checklists for handing a project to new people or a new team, covering project, source code, system and completeness.
- Technology stack
How we evaluate technology with a tech radar, and the tools, techniques, platforms and languages we use.
- Engineering release checklists for production, UAT and frontend UI
Three pre-ship checklists in one place: production readiness for a service, user acceptance testing with the product team, and the frontend UI check before a design goes…
- Dwarves operations checklists, part 1: the people lifecycle
Operations checklists for hiring, candidate evaluation, onboarding, leave, offboarding, social insurance paperwork and company assets.
- Dwarves operations checklists, part 2: clients, money and projects
Operations checklists for client contracts, billing and invoices, and a project from initialization through communication, backups, handover, case study and archive.
- What to look for when hiring an operations lead
Operations is a very sensitive area of the company, so be very picky. A great ops person can dramatically improve the way your company works and make your life a lot…
- Dwarves email templates, part 1: candidates and new hires
Copy-ready email templates for interview and assignment invitations, rejections, offer letters, and welcoming and onboarding new hires.
- Dwarves email templates, part 2: employees, clients and community
Copy-ready email templates for employees, client holiday notices, resource changes, milestone sign-off and thank-you letters, plus how to keep them in Gmail.
- Seven traits to assess in an interview
Seven traits to probe in a hiring interview (grit, rigor, impact, teamwork, ownership, curiosity, polish) and a question that tests each.
- Hiring approach
Hire people who tell us what to do, not the other way around.
- The OKR
How we use OKR to define goals
- How we contribute to Homebrew
A walkthrough of writing a Homebrew formula for a Go CLI and submitting it, from our 2016 glod-cli contribution, with notes on what changed since.
- Agile requirement - user story
How to write agile user stories, with the INVEST test, epics and themes, and common myths.
- Best practices in backend development
Backend practices covering the N commandments, data persistence choices, bill of materials, security guidelines and checklists, forked from the Futurice guide.
- Code editors
How the team picks a code editor, why to learn keybindings, and why Vim is worth trying.
- Definition of done (DoD)
The checklist a story must pass before the team calls it done, for software work and for services work.
- Licensing
What copyright and copyleft mean for our code, and the rules for licensing our work and using open source in client projects.
- Project charter
What a project charter is, why it helps the team and the client, and the questions it has to answer, with a filled-in example.
- Project README template
A copy-paste README skeleton for a new project with setup, tests, deployment, contributing, versioning and license sections.
- Project setup
What to set up when a project starts, including the agreement folder, artifacts, repository, communication channel, workflow tooling and integrations.
- README
What a good README contains, who writes it and when, with section guidance and a sample README.
- Readme driven development
Why to write the README before the code, summarized from the Readme Driven Development essay by Tom Preston-Werner.
- Semantic versioning
How we version software with Semantic Versioning (MAJOR.MINOR.PATCH), with a worked example and answers to common questions.
- Writing a useful changelog
What makes a changelog useful to people, with a change-type convention, a worked entry and a template.
Series
Tags in this topic
Writers
neko-anon35, tieubao26, zlatanpham12, duynglam8, nhuthm6, nikkingtr5, huynguyenh4, huytieu4