All memos
Every dated note, newest first. Company pages and undated notes are left out.
October 2026
September 2026
- Dispatch #1: UI kit workflow: bốn bước từ setup đến implement
- Dispatch #2: handoff pattern: từ ảnh chụp app đến Figma và video demo
- Hide the MacBook notch: the 32-point fix for the macOS 27 menu bar
- Record it on your own machine
- What the Engelberg report got right about us
- Claude Code 2.1.259 turned our Read() deny rules into a Bash tripwire
- The debug loop: make the agent measure the browser before it touches the CSS
August 2026
September 2025
August 2025
July 2025
- Cline breakdown
- Ax framework breakdown
- Crawl4AI breakdown
- Zen MCP breakdown
- Better engineering
- Why every redesign should start with UX Benchmarking
- LSTM
- Composing the Dwarves video pipeline
- Modernizing complex financial systems through systematic transition
- Should AI agents transact without human confirmation?
- AI-powered consulting sprints for rapid clarity
- Monitoring
- Attack their cash cow
- Building a scalable social listening data pipeline
June 2025
- Frontend Report June 2025
- Forward engineering Jun 2025
- Scale your vibe
- Communication overhead in the agentic era
- AI agent explained
- Prompt formula
- IC and management
- You can poke life
- Speed beats perfectionism in AI adaptation
- How to choose the best AI visibility tool
- Seeding your content for AI: a writer’s guide
- Stand up GEO tracking tools: a simple guide
- Talks and takeaways from the scene part 3: Three Crypto Events, One Reality Check
- The grind behind GEO: what it really takes to stay seen
- On agentic AI
- Tech transfer framework
- Choose what to build
- Generative engine optimization
- GEO and the future of knowledge: Who gets to be remembered?
- Understanding Tidewave.ai
- Engineers in the AI landscape: architects, tinkerers, planners, and the vibers
- Design tokens in the AI era
- How we craft a market thesis
- Vibe culture
- Most engineers can't actually engineer
- What makes a strong engineer in the AI era
- Do one thing well
- What's new in May 2025
- A protocol for asynchronous shadowing
- Real feedback
- Composing the future: an iron-clad analysis of AI agent architecture frameworks
- Mapping the path to AGI
May 2025
- Strategic thinking behind our hiring
- Skillmaxing
- Redirect and Alias
- Vetting proven talents
- Composing forward engineering newsletter
- Forward engineering May 2025
- Streamline development with a single Makefile
- Automating static site deployment
- Build a static site by choice
- DuckDB as intermediary storage
- Managing content with Git submodules
- Memo architecture
- Onchain permanent storage
- The Memo build and content quality pipeline
- Client onboarding
- Engagement models
- Scale smart: Grow big but stay research-first
- Client delivery and soft skills
- Client-side and agency-side
- Inefficiency arbitrage
- LLM prompt for metrics planning
- What is skillmax?
- AI knowledge automation
- MCP playbook code flow
- MCP playbook data flow
- MCP playbook setup
- What's new in April 2025
- Business correction
- Consulting model
- Forming market thesis
- Grow our talent pool
- Keep it sharp
- Technology cycles
- Test the water
- The growth engine
- Append-only concept embedding log
- Build a brain that never forgets
- Data flow in Brainery
- Database design and philosophy
- MCP authorization over SSE
- Building use-cases
- Promoting raw data to insight
- Access the brainery
- Architecture
- Data-first Approach & Maintaining Data Integrity with Zod Schema
April 2025
- Frontend Report April 2025
- Multi-MCP data integration - receiving data from other MCP servers
- How to use Claude to build the system prompt
- Approach as a squad
- Check team competency frequently
- Leads generation
- Market players
- On deal making
- Build custom AI agent with ElizaOS
- What's new in March 2025
- Web3 development with Foundry
March 2025
- AI for fast and fair talent search
- Frontend report March 2025
- Secure and transparent uptime monitoring with Upptime and GitHub secrets
- Securing your remote MCP servers
- Tool-level security for remote MCP servers
- Talks and takeaways from the scene: part 2
- Create slides with Overleaf and ChatGPT
- Talks and takeaways from the scene: part 1
- Optimizing initial load time for a trading platform
- Evolutionary database design: managing change and scaling with the system
- Implement a token swap from the Base chain to Bitcoin for cross-chain transactions
- What's new in February 2025
February 2025
- Frontend report February 2025
- Weekly consulting snapshot #9: Bybit loses $1.5B in hack, Claude 3.7 Sonnet drops, and OpenArt designs characters
- Weekly consulting snapshot #8: R1 1776 goes open-source, Cardex gets hacked, and Grok-3 debuts
- Weekly consulting snapshot #7: 10x AI cost reduction, Lyft’s 2026 robotaxi milestone, and Solana ETF buzz
- Forward engineering Feb 2025
- Weekly consulting snapshot #6: Trending products, DeepSeek wave, and Ethereum predictions
January 2025
- From beta to bedrock
- Glue work
- Let AI ask you
- Stating the obvious
- Your AI approach
- Human touch in agent systems
- Frontend report January 2025
- Weekly consulting snapshot #5: VC trends, blockchain breakthroughs, and AI innovations
- 2024 in review
- Implement Binance Futures PNL analysis page by Phoenix LiveView
- Migrate regular tables into TimescaleDB hypertables to improve query performance
- The convergence
- Weekly consulting snapshot #4: AI supercomputers, mini AI PCs, Worldcoin expansion, and SEA VC
- Building trust as an engineer
- Mental models for prompting
- Weekly consulting snapshot #3: AI’s ubiquity at CES, Wall Street’s AI boom, and blockchain innovations
- Database hardening for a trading platform
December 2024
- Soul vs scale
- Synthetic users in UX research
- Working with legacy code
- Building a data archive and recovery strategy for high-volume trading system
- Go commentary #24: Coming in Go 1.24: testing/synctest experiment for time and concurrency testing
- Neutronpay: Lightning Network payment solutions
- Go commentary #23: Draft release notes for Go 1.24 and weak pointers in Go
November 2024
- Go commentary #22: GoMLX: ML in Go without Python
- Go commentary #21: Go sync.Once is simple
- Building chatbot agent to streamline project management
- Building data pipeline for OGIF transcriber
- Quantization for large language models
- Setup centralized monitoring system for Hedge Foundation trading platform
- Building better Binance transfer tracking
- Reconstructing historical trading PnL: a data pipeline approach
- Visualizing crypto market performance: BTC-Alt dynamic indicators in Golang
- Go commentary #20: Go turns 15
- Project reports system: a case study
- Natural language to database queries: Text-to-MongoDB
- Go commentary #19: Writing secure Go code
- Go commentary #18: Fuzz testing Go HTTP services
- GraphRAG - building a knowledge graph for RAG system
- Salesforce use cases
October 2024
- Database design circular
- Building a data-driven project reporting system: A lens into modern data engineering
- Code splitting in React
- Component composition patterns in React
- Design system integration in React
- Hook architecture in React
- Rendering strategies in React
- State management strategy in React
- Testing strategies in React
- Go commentary #17: Leveraging benchstat projects in Go benchmark and Go Plan9 memo on 450% speeding up calculations
- Go extension interface pattern
- Go import design: using git repo path
- Package first design
- Guardrails in llm
- Automata
- Go commentary #16: Understand sync.Map
- ReAct(reason + act) in LLM
- ReWOO: Reasoning without observation - a deeper look
- Yelp use cases
- #1 Coffee craftsmanship lessons for software engineering
- #2 Film production lessons for software engineering
- Kafi: making stock trading easier for everyone
- Model selection
- Error handling patterns
- How does Go achieve type safety when it enables generics?
- ≈ Founder liquidity
- Go commentary #15: using Go embed, and Reflect
- Logging
- Metrics
- Observability in AI platforms
- Tracing
- Intent classification by LLM
- Go commentary #14: Golang compile-time evaluation and Go bindings to SQLite using wazero
- LLM as a judge
- Use cases for LLM applications
- The rise of AI applications with LLM
September 2024
- Go commentary #13: Compiler quests and vector vexations
- Evaluation guidelines for LLM applications
- Prevent prompt injection
- Go commentary #12: CLI renaissance with Kubernetes, REST, and terminal readers in the age of complexity
- Go commentary #11: The gopher's LLM revolution - actors, frameworks, and the future of Go
- Evaluate chatbot agent by user simulation
- Journey of thought prompting: Harnessing AI to craft better prompts
- LLM tracing in AI system
- A holistic guide to security
- Go commentary #10: Script, telemetry
- Multi-agent collaboration for task completion
- Efficient union of finite automata in Golang: a practical approach
August 2024
- Go commentary #9: TinyGo, SQLite vector search, and authorization
- Why enterprise chose Java
- Why go?
- Designing for forgiveness: creating error-tolerant interfaces
- Go commentary #8: Jupyter notebooks, Kubernetes tools, GopherCon talks
- Design file-sharing system - part 2: permission & password
- Designing a model with dynamic properties
- Leave request
- Offboarding
- Go commentary #7: Releases, websockets, and struct behavior
- Devbox in production: our success story
- Evaluating caching in RAG systems
- Go commentary #6: GUI framework, leadership change
- Evaluating search engine in RAG systems
- What is Generative UI?
- Go commentary #5: Features, memory optimization, Minecraft server, code editor, and LLM tool
- Devbox plugins: Turbocharge your dev setup
- Devbox services: tame your daemons with process-compose
- Devbox shell: your dev environment, your rules
- Devbox vs Nix: why we chose simplicity
- Devbox: your dev environment on steroids
- Devbox.json: Your project's DNA
- Ditch the containers: go containerless with Devbox
- Fixed-output derivation in Nix
- How to conduct delivery report
- Nix flakes: next-level package management
- Nix is faster than Docker build
- Nix shell: bulletproof development environments
- Pinning nixpkgs in Nix
- Shadow copies in Docker builds
- The reason for being
- Unstable package installation in Docker
July 2024
- Design file-sharing system - part 1: directory structure
- Pricing model: Bill by hours
- Go commentary #4: Ethical hacking, HTTP requests, Mac app development
- Re-ranking in RAG
- Back up artifact
- Subscription pricing models
- Using Foundry for EVM smart contract development
- Function calling in AI agents
- Building a local search engine for our Memo website
- Ton's base concepts
- Erlang finite state machine
- Go commentary #3: Generic collections, generics constraints, AI bot
- Introduce the observer pattern and its use cases
- Streamlining internal tool development with managed LLMOps: A Dify case study
- Thumbs up and thumbs down pattern
- Visitor design pattern, the concept, problem solution and use cases
- Building agent supervisors to generate insights
- Strategy design pattern, the concept, use cases and difference with the state design pattern
- Ton: blockchain of blockchains
- Vietnam tech ecosystem 2024 report
- How we crafted the OGIF summarizer bot to streamline weekly knowledge-sharing
- RAPTOR: Tree-based retrieval for language models
- Design feedback mechanism for LLM applications
- ¶ Local-first software
- Go weekly #2: Go 1.23 iterators
- Error handling on Rust
- Proximal policy optimization
- Rust trait
June 2024
- A tour of Template method pattern with Golang
- Bloom filter
- Multimodal: in rag
- Command pattern
- Go weekly #1: mastering Go performance - eBPF and PGO optimization techniques
- Radix sort
- State pattern
- Explaining gradient descent in machine learning with a simple analogy
- Your last work is what counts
- Dynamic liquidity market maker - a new form of concentrated liquidity AMM on Solana
- How to talk to ChatGPT effectively
- Introduce to Solana token 2022 - new standard to create a token in Solana
- Solana core concepts
- Set up recording workflow for OGIF
- A grand unified theory of the AI hype cycle
- Using Devbox to setup local development environment
- History of structured outputs for LLMs
- A tour of Singleton design pattern with Golang
- Going through use cases of the prototype design pattern and it place among the creational patterns
- Introduce the builder pattern and its use cases
- #3 Digital transformation insights from the energy sector
May 2024
- Breaking down complexity: the role of abstractions and UML in C4 modelling
- Dollar Cost Averaging (DCA)
- How I create content for multiple platforms
- Understanding saving, investing, and speculating: key differences and strategies
- Write content for multimedia guidelines
- Developing rapidly with generative AI
April 2024
March 2024
January 2024
December 2023
November 2023
October 2023
September 2023
- Making keg management smarter for breweries
- SQL saragable queries and their impact on database performance
- The removal of Apache Kafka's dependency on Zookeeper
- From markup to pixels - a look inside the DOM, CSSOM, and render tree
- Sql and how it relates to disk reads and writes
- URL Redirect vs. Rewrite; What’s the difference?
August 2023
July 2023
June 2023
- LLM's accuracy - self refinement
- Reward model
- Q learning
- Applying mock service worker (MSW) for seamless web development
- Deploy branch with vercel cli
- Query caching for large language models
- Vim repl driven development
- Render optimization in data-fetching libraries
- Working on a project interview assessment at Dwarves
- Update highest and lowest symbol prices in real time
- Utilizing cached table for binance kline api data processing
- Introduction to reinforcement learning and its application with LLMs
- A fragment colocation pattern with React & Apollo GraphQL
- How discord stores messages part 1 from mongodb to cassandra
- Redis rate limiter
- Scroll-driven animations
May 2023
- How we created an AI powered interview system using OpenAI's ChatGPT
- URL formats for sharing via social networks
- Approaches to manage concurrent workloads like worker pools and pipelines
- Foundation models: the latest advancement in AI
- Select vector database for LLM
- Redis streaming concurrency with master and consumers
- Shadow DOM
- Message queues and streaming platforms eg Kafka Nats Rabbitmq
April 2023
- Choosing the right Javascript framework a deep dive into React vs Angular vs Vue
- Design system for layer 2 using zk rollup
- Lessons learned from being a part of corporate micro frontend implementation
- Retain scroll position in infinite scroll
- Database locking
- Redis streaming
- Solid principles
- Lessons learned from concurrency practices in blockchain projects
- Continuous translation
- Database designs for multilingual apps
- Unit testing best practices in Golang
- What is PNPM compare to NPM/Yarn
- Accelerate project initiation with advanced Nextjs boilerplate React toolkit
- How blue green deployment helped Mochi
- I18n frontend guideline
- Swift: Building a micro frontend design system for e-commerce
March 2023
- Graphql in microservices unified api gateway
- Profiling in Go
- Radio talk 61 monorepo
- From multi repo to monorepo a case study with Nghenhan Turbo monorepo
- Why micro frontend
- Why we chose our tech stack accelerating development with a robust frontend solution
- Testing aws services locally with localstack
- Building a community platform for Vietnamese entrepreneurs
- Metaplex NFT compression
- Tackling server state complexity in frontend development
- Radio talk 60 blue green deployment
- Variable fonts
- When should we use useReducer instead of useState?
February 2023
January 2023
December 2022
- StarkNet architecture
- The key of security mechanisms in tackling cyber threats
- Data vault modelling
- Hive window and analytic functions
- Test cases breakdown structure
- Data race and race condition
- Buckets on Apache Hive
- zk-SNARKs
- Layer 2: Scaling solutions for Ethereum
- Event sourcing overview
- Partitions on Apache Hive
November 2022
- Order by vs sort by vs distribute by vs cluster by
- #4 Transforming healthcare with technology
- Boundary and equivalence partitioning testing
- Dbt the good solution to accelerate data transformation
- How to run the backlog grooming effectively
- Solana account
- Managed table vs external table
- Go JSON parser: number <-> interface
- Introduction to Apache Pig
- Materialized view pattern
- Scale up application using Jetpack navigation
- Behind a hive table
- Introduction to Apache Hive
- Quality assurance works in the product team
- Libcluster in elixir
- Pg in elixir
October 2022
- ¶ MapReduce
- Mapreduce components
- Debugging in javascript
- Singleton design pattern in Javascript
- The best of CSS TLDR
- How one product team works when having incident
- An introduction to atomic CSS
- Behavior driven development
- Intro to IndexedDB
- React fiber
- Unexpected pitfalls and some handy patterns with concurrency in go
- Kotlin coroutine lifecycle
- Software quality assurance
- The fundamental of web performance
September 2022
- WAI-ARIA
- Building a payment platform from scratch
- Kubeseal sops
- Build polymorphic React components with Typescript
- The six lines of gold
- Feature flags
- Pomodoro technique
- Progressive delivery
- Stream aligned team
- The structure of the command line app
- Cameras in ThreeJS
- Story point estimation
- Stateless and stateful widgets in Flutter
- Prevent layout thrashing
- Disc personality types in team work
- Pure CSS parallax
- Secret management on iOS
- Kotlin coroutine
- Zero-knowledge proofs
- Css container queries
- HSL color
August 2022
- Mitigate blocking the main thread
- Swift 5 4 resultbuilder
- Data analyst in retail trading
- Concurrency in javascript
- You need 3 upvotes to pass probation
- Double entry accounting
- Enabling team
- Team first thinking
- Team toplogies
- Css in JS
- Dark mode flickers a white background for a fraction of a second
- Multisign wallet
- Atomic package in golang
- Why Virtual DOM is fast?
- Triple s of ux in web3
- UIKit builder pattern
July 2022
June 2022
- Finite state automata
- Finite state transducer
- Mealy machine
- Moore machine
- JavaScript modules
- Making crypto transfers faster and easier
- Blockchain bridge
- Overview of domain driven design
- Service based architecture
- Building a powerful crypto trading dashboard for professionals
- Blocks
- Distributed systems
- PoS
- Smart contract
- Atomic design pattern
- Hadoop distributed file system hdfs
- Apache Hadoop and big data
- Conway s law
- UseEffect double calls in React 18
- How tokens work on Solana
- React 18
May 2022
April 2022
March 2022
February 2022
January 2022
October 2021
August 2021
July 2021
June 2021
May 2021
April 2021
- Connecting healthcare workers with hospitals during COVID-19
- Helping Relay launch their workflow automation MVP for the US market
- Adjust the way we work in Basecamp style
- Naru: a task manager that works right in your browser
- Six things I extracted from design thinking
- Gitflow pull request
- Git commit message convention
March 2021
February 2021
January 2021
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
- Hiring for operations team
- Well crafted software
- Objective
- Annual bonus for sales
- Assets
- Assignment Inviation (Skip pre-assessment)
- Assignment inviations
- Billing
- Candidate
- Collaboration guidelines
- Compliance check process
- Confirm employee's resume date day
- Consulting contract
- Farewell letter
- Follow-up onboarding items
- Hiring
- Hung King commemoration day
- Inform about resource change
- International labour day
- Interview invitation
- Milestone sign-off
- Naming convention
- National day
- New year day
- Offer letter
- Onboarding
- Referral bonus confirmation note
- Rejection
- Salary increment announcement
- Setup email template in Gmail
- Tet holiday
- Thank you letter
- Unemployment, social, health insurance
- Vietnam invoice
- Welcome onboard
- Welcome to dwarves updates