Sign in

Peter Mbanugo

@pmbanugo.me
260 followers 191 following 255 posts

Software engineer/consultant, trainer, and author @pluralsight. Interested in Web performance, CI/CD, scalable/fault-tolerant systems www.youtube.com/@pmbanugo

PostsRepliesMedia
Peter Mbanugo @pmbanugo.me · 21/09/2026
Just published: "Writing Clean, Data-oriented APIs". Check it out and subscribe to get everything I'm making. software.pmbanugo.me/posts/writin...
title for the blog post — writing clean, data-oriented APIs in Odin
000
Peter Mbanugo @pmbanugo.me · 12/08/2026
pmbanugo.me/blog/crash-c...
pmbanugo.me
A Crash Course on Concurrency: Build a Tiny Scheduler from Scratch
Build a tiny concurrency runtime from scratch and discover how schedulers, task switching, yielding, coroutine state, and event loops work under the hood
000
Peter Mbanugo @pmbanugo.me · 14/06/2026
250 stars (and counting) for TINA — A concurrency framework for Odin, with extensions for building web/infra software. Expect a few interesting changes in the next release. I'm also writing a few articles on Odin. I hope I can get them all done by the end of June. github.com/pmbanugo/tina
github star trend for Tina framework
000
Peter Mbanugo @pmbanugo.me · 16/05/2026
pmbanugo.me/blog/buildin...
pmbanugo.me
Building an HTTP Server on a Thread-per-Core Framework, without Async/Await
How to build a production-grade HTTP server without async/await or coroutines. Discover how Tina HTTP uses thread-per-core state machines in Odin
010
Peter Mbanugo @pmbanugo.me · 14/05/2026
Tina, Odin's concurrency framework with + a HTTP Server (Tina HTTP) just hit 140 stars on GitHub. Do with that what you may 😉
tina github stars trajectory
010
Reposted by Peter Mbanugo
Andy Gayton @ndyg.ca · 11/05/2026
@pmbanugo.me 's Tina, thread-per-core concurrency framework for Odin looks rowdy github.com/pmbanugo/tina
github.com
GitHub - pmbanugo/tina: A shared-nothing, thread-per-core concurrency framework. Designed for massive concurrency because There Is No Alternative (TINA)
A shared-nothing, thread-per-core concurrency framework. Designed for massive concurrency because There Is No Alternative (TINA) - pmbanugo/tina
021
Peter Mbanugo @pmbanugo.me · 04/05/2026
I don't think I ever got this speed when running just even way less test in JavaScript land. Takes between 1.x to 3.5 ms. Thank you Odin. It just needs a good web dev story to get Go and JS folks to consider it.
shows the output of running 144 odin test, all under 2 milliseconds.
030
Peter Mbanugo @pmbanugo.me · 02/05/2026
pmbanugo.me/blog/why-asy...
pmbanugo.me
The Tokio/Rayon Trap and Why Async/Await Fails Concurrency
Async/await makes concurrency easy to write, but incredibly complex to operate. Read on for why the Tokio/Rayon boundary is failing in production, and how explicit state machines fix it.
000
Reposted by Peter Mbanugo
Peter Mbanugo @pmbanugo.me · 23/04/2026
After reading Posthog's blog about their recent issue and fix regarding their use of Tokio + Rayon, I decided to write about it. Unrelated to Rust, but a common problem I see with async/await as a primitive for concurrency. What do you think? pmbanugo.me/blog/why-asy...
pmbanugo.me
The Tokio/Rayon Trap and Why Async/Await Fails Concurrency
Async/await makes concurrency easy to write, but incredibly complex to operate. Read on for why the Tokio/Rayon boundary is failing in production, and how explicit state machines fix it.
032
Peter Mbanugo @pmbanugo.me · 23/04/2026
After reading Posthog's blog about their recent issue and fix regarding their use of Tokio + Rayon, I decided to write about it. Unrelated to Rust, but a common problem I see with async/await as a primitive for concurrency. What do you think? pmbanugo.me/blog/why-asy...
pmbanugo.me
The Tokio/Rayon Trap and Why Async/Await Fails Concurrency
Async/await makes concurrency easy to write, but incredibly complex to operate. Read on for why the Tokio/Rayon boundary is failing in production, and how explicit state machines fix it.
032
Peter Mbanugo @pmbanugo.me · 15/04/2026
2 weeks after public release, Tina is gaining some eyeballs. if you haven't already, check it out — don't say I didn't tell you :) I'm currently working on adding a HTTP lib extension, and in the process decided I had to change some things at the core for better socket handling.
GitHub star history for https://github.com/pmbanugo/tina
100
Peter Mbanugo @pmbanugo.me · 14/04/2026
What happens when you combine Erlang-style concurrency + ScyllaDB's Seastar speed + deterministic simulation? Meet Tina: A strictly bounded, fault-tolerant, thread-per-core concurrency framework. 🧵👇
shows the pillars of the Tina framework, and the compromise it rejects
120
Peter Mbanugo @pmbanugo.me · 11/04/2026
Why Queues Don’t Fix Overload My Saturday musing, published as a blog post pmbanugo.me/blog/why-que... Do you agree?
pmbanugo.me
Why Queues Don’t Fix Overload (And What To Do Instead)
Why adding Kafka or bigger queues won't save your server from traffic spikes. Learn the physics of backpressure, load shedding, and the latency death spiral.
010
Peter Mbanugo @pmbanugo.me · 17/03/2026
AI coding accelerates software pollution and further advances bad education on what it takes to make software Just as ppl expected the increase in software performance with 5 - 20x hardware performance decades ago. They’re doing a similar thing with AI - better hardware & models
000
Peter Mbanugo @pmbanugo.me · 10/03/2026
In programming reliable software systems, first you make them correct and fault tolerant, then you make them fast.
110
Peter Mbanugo @pmbanugo.me · 01/02/2026
Elimination is a core part of software optimisation. But it also carries over into other areas of life. If you can eliminate, thereby reducing the amount of task or functions you would like to do, you have enough memory space to juggle the vital few
010
Peter Mbanugo @pmbanugo.me · 29/01/2026
Most bugs exist because we only test scenarios we thought of. What about the ones we didn’t imagine? I’m building a formal verification tool from scratch and documenting everything — parser, VM, state-space exploration. You can follow along in my journey: pmbanugo.me/series/forma...
pmbanugo.me
Building a Formal Verification Tool from Scratch
A deep dive into building a TLA-based formal verification tool from scratch. Learn systems programming, virtual machines, parsers, compilers, and formal method by building a real tool.
020
Peter Mbanugo @pmbanugo.me · 27/01/2026
I've got some blog post series if you want to follow my journey into building a compiler and virtual machine, along the line learning about formal method and TLA MOre info at pmbanugo.me/series
pmbanugo.me
Series | Peter Mbanugo - Consultant, Trainers, and Programmer
Curated multi-part article series on DevOps, JavaScript, and software development
010
Peter Mbanugo @pmbanugo.me · 27/01/2026
I've got some blog post series if you're looking to learn about single-producer, single-consumer queue MOre info at pmbanugo.me/series
pmbanugo.me
Series | Peter Mbanugo - Consultant, Trainers, and Programmer
Curated multi-part article series on DevOps, JavaScript, and software development
010
Reposted by Peter Mbanugo
Barry Pollard @tunetheweb.com · 23/01/2026
I also talked about prerender until script (and other improvements to the Speculation Rules API!) a few months ago at @perfnow.nl , so if you prefer your learning though video (and can put up with my um's and err's) then you can check that out here: www.youtube.com/watch?v=DqE9...
youtube.com
Speculations about Web Performance - Barry Pollard - performance.now() 2025
YouTube video by Web Conferences Amsterdam
031
Peter Mbanugo @pmbanugo.me · 19/01/2026
Adapting old programs to fit new machines usually means adapting new machines to behave like old ones. —Alan Perils
000
Peter Mbanugo @pmbanugo.me · 19/01/2026
Turning academic papers into working code I recently dove into the paper "𝘽𝙞𝙣𝙖𝙧𝙮 𝙁𝙪𝙨𝙚 𝙁𝙞𝙡𝙩𝙚𝙧𝙨: 𝙁𝙖𝙨𝙩 𝙖𝙣𝙙 𝙎𝙢𝙖𝙡𝙡𝙚𝙧 𝙏𝙝𝙖𝙣 𝙓𝙤𝙧 𝙁𝙞𝙡𝙩𝙚𝙧𝙨" by Graf and Daniel Lemire. I wanted to understand how we can store millions of keys efficiently in memory without the overhead of standard hash tables or Bloom filters.🧵
100
Peter Mbanugo @pmbanugo.me · 14/01/2026
I used the Die Hard water-jug puzzle to understand model checking, by building a naive solver. I only defined the rules; the strategy emerged from exploring every timeline/state. That’s why formal verification catches bugs tests miss. Part 1: pmbanugo.me/blog/tla-for...
pmbanugo.me
Building a Formal Verification Tool from Scratch: Part 1 (Die Hard Edition)
What if you could explore every possible timeline of your distributed system to find the bugs you haven't imagined yet? I'm building a TLA model checker from scratch to understand how formal verificat...
000
Peter Mbanugo @pmbanugo.me · 12/01/2026
pmbanugo.me/blog/2025-wr...
pmbanugo.me
2025 Wrapup: Articles, Talks, Papers, and Software I Loved
A look back at some of the most impactful articles, talks, research papers, and software tools that shaped my year in 2025.
000
Peter Mbanugo @pmbanugo.me · 21/12/2025
Christmas sale discount 50% Limited seats available
011
Reposted by Peter Mbanugo
Peter Mbanugo @pmbanugo.me · 01/12/2025
𝗜𝗳 𝘆𝗼𝘂 𝘄𝗮𝗻𝘁 𝘁𝗼 𝗯𝗲 𝗮 𝟭𝟬𝘅 𝗽𝗿𝗼𝗴𝗿𝗮𝗺𝗺𝗲𝗿, 𝗿𝗲𝗶𝗻𝘃𝗲𝗻𝘁 𝘁𝗵𝗲 𝘄𝗵𝗲𝗲𝗹. 𝗕𝘂𝗶𝗹𝗱 𝗮 𝗗𝗮𝘁𝗮𝗯𝗮𝘀𝗲. 𝗕𝘂𝗶𝗹𝗱 𝗮 𝗹𝗼𝗮𝗱 𝗯𝗮𝗹𝗮𝗻𝗰𝗲𝗿. 𝗕𝘂𝗶𝗹𝗱 𝗮 𝗣𝘂𝗯/𝗦𝘂𝗯 𝗲𝗻𝗴𝗶𝗻𝗲. Join this workshop where you will build a nats.io pub/sub server from scratch. 𝗙𝗼𝘂𝗻𝗱𝗶𝗻𝗴 𝗠𝗲𝗺𝗯𝗲𝗿 𝗽𝗿𝗶𝗰𝗲 (𝟲𝟬% 𝗼𝗳𝗳) 𝗲𝗻𝗱𝘀 𝗼𝗻 𝗗𝗲𝗰𝗲𝗺𝗯𝗲𝗿 𝟭 𝟭𝟭:𝟱𝟵 𝗣𝗠 𝗛𝗦𝗧. Go to protocol-zero.pmbanugo.me
protocol-zero.pmbanugo.me
Stop Trusting Magic Boxes. Build Your Own Pub/Sub.
Don't just use Redis/NATS. Build it. A 2-day workshop & course on System Programming. Pre-Order now for 60% OFF.
021
Peter Mbanugo @pmbanugo.me · 01/12/2025
𝗜𝗳 𝘆𝗼𝘂 𝘄𝗮𝗻𝘁 𝘁𝗼 𝗯𝗲 𝗮 𝟭𝟬𝘅 𝗽𝗿𝗼𝗴𝗿𝗮𝗺𝗺𝗲𝗿, 𝗿𝗲𝗶𝗻𝘃𝗲𝗻𝘁 𝘁𝗵𝗲 𝘄𝗵𝗲𝗲𝗹. 𝗕𝘂𝗶𝗹𝗱 𝗮 𝗗𝗮𝘁𝗮𝗯𝗮𝘀𝗲. 𝗕𝘂𝗶𝗹𝗱 𝗮 𝗹𝗼𝗮𝗱 𝗯𝗮𝗹𝗮𝗻𝗰𝗲𝗿. 𝗕𝘂𝗶𝗹𝗱 𝗮 𝗣𝘂𝗯/𝗦𝘂𝗯 𝗲𝗻𝗴𝗶𝗻𝗲. Join this workshop where you will build a nats.io pub/sub server from scratch. 𝗙𝗼𝘂𝗻𝗱𝗶𝗻𝗴 𝗠𝗲𝗺𝗯𝗲𝗿 𝗽𝗿𝗶𝗰𝗲 (𝟲𝟬% 𝗼𝗳𝗳) 𝗲𝗻𝗱𝘀 𝗼𝗻 𝗗𝗲𝗰𝗲𝗺𝗯𝗲𝗿 𝟭 𝟭𝟭:𝟱𝟵 𝗣𝗠 𝗛𝗦𝗧. Go to protocol-zero.pmbanugo.me
protocol-zero.pmbanugo.me
Stop Trusting Magic Boxes. Build Your Own Pub/Sub.
Don't just use Redis/NATS. Build it. A 2-day workshop & course on System Programming. Pre-Order now for 60% OFF.
021
Peter Mbanugo @pmbanugo.me · 24/11/2025
depicting a guy with a smirk and says "don't reinvent the wheel"
040
Peter Mbanugo @pmbanugo.me · 24/11/2025
Stop building To-Do apps. 🛑 If you want to be a 10x programmer, reinvent the wheel. Build a Database, a load balancer, Pub/Sub engine. I’m launching a workshop where we build a NATS-compatible server from scratch. More info at protocol-zero.pmbanugo.me Founding Member pricing is live from 27 Nov.
protocol-zero.pmbanugo.me
Stop Trusting Magic Boxes. Build Your Own Pub/Sub.
Don't just use Redis/NATS. Build it. A 2-day workshop & course on System Programming. Pre-Order now for 60% OFF.
030
Peter Mbanugo @pmbanugo.me · 22/11/2025
I've been experimenting with ZeroMQ for a couple of months and recently stumbled on NATS. Played around with it and implemented some parts of the core NATS protocol in @deno.land I'm making available only a few slots with 60% off only during Cyberweek. More info: protocol-zero.pmbanugo.me
a cyberpunk themed marketing illustration for the course
020
Peter Mbanugo @pmbanugo.me · 20/11/2025
black friday offer incoming. still putting ginishing touches protocol-zero.pmbanugo.me I need to record the video to show off demo and talk about the package
protocol-zero.pmbanugo.me
Stop Trusting Magic Boxes. Build Your Own Pub/Sub.
Don't just use Redis/NATS. Build it. A 2-day workshop & course on System Programming. Pre-Order now for 60% OFF.
000
Peter Mbanugo @pmbanugo.me · 09/11/2025
Programmers' Biggest Lies: Programming with Assertions youtu.be/U2Jr66nYRDA
youtu.be
Programmers' Biggest Lies: Programming with Assertions
YouTube video by Tech with Peter Mbanugo
000
Peter Mbanugo @pmbanugo.me · 05/11/2025
Programmers' Biggest Lies: Programming with Assertions youtu.be/U2Jr66nYRDA
youtu.be
Programmers' Biggest Lies: Programming with Assertions
YouTube video by Tech with Peter Mbanugo
000
Peter Mbanugo @pmbanugo.me · 03/10/2025
Processed 1 BILLION rows (14.8GB file) 4.7x FASTER 🤯 with a single-threaded Node.js. How? *Byte Parsing *Integer Math *Used hashing to keep Map lookups fast. Full technical breakdown and code in the linked blog post: pmbanugo.me/blog/nodejs-... #Nodejs #1BRC #Performance #JavaScript #Programming
pmbanugo.me
Node.js Performance: Processing 14GB Files 78% Faster with Buffer Optimization
Learn how to optimize Node.js for processing large files: 14GB of data processed 78% faster using buffer streaming, byte-level parsing, and hash-based lookups. Complete guide with benchmarks, profilin...
000
Peter Mbanugo @pmbanugo.me · 16/09/2025
Big Data > ML > Web 3.0 & Crypto > AI > (AGI?)
010
Peter Mbanugo @pmbanugo.me · 16/08/2025
Too many tools = information overload for AI agents (and devs). In my latest post, I explain why treating MCP/tools like a direct mapping of REST endpoints often backfires — and show a simpler approach that reduces eight similar endpoints into just two useful tools.
pmbanugo.me
MCP/Tools Are Not REST API: Here's a Better Design
MCP/tools are sometimes designed like REST APIs. I'll show you how to design better tools for AI agents and models.
100
Peter Mbanugo @pmbanugo.me · 01/08/2025
What if Node.js EventEmitter worked across multiple processes and machines—with zero setup? I built Demitter, a lightweight distributed pub/sub system for Node.js. Think emitter.emit() and emitter.on()but distributed. 🚀 GitHub: dub.sh/zuxpUJT Demo 🎥: www.youtube.com/watch?v=LqQS... #javascript
120
Peter Mbanugo @pmbanugo.me · 28/06/2025
In the Age of AI, is Code Literacy Your Superpower? pmbanugo.me/blog/ai-code... In the Age of AI, is Code Literacy Your Superpower?
pmbanugo.me
In the Age of AI, is Code Literacy Your Superpower?
Explore the importance of code literacy in the age of AI and how it can empower individuals to harness Gen AI effectively.
000
Peter Mbanugo @pmbanugo.me · 11/06/2025
How coding agents are being used today. Who would have thought Gemini would overtake GPT as the preferred model for coding
joking on how much Gemini 2.5 and Claude has overtaken Open AI models
100
Peter Mbanugo @pmbanugo.me · 04/06/2025
If you're looking for a networking library to use in Zig, you can try uSockets. It comes with an eventloop and other low level primitives for building networking apps. I published a package which makes it easy for you to integrate it in your @ziglang.bsky.social project github.com/pmbanugo/uSo...
github.com
GitHub - pmbanugo/uSockets.zig: build.zig for the uSockets C library
build.zig for the uSockets C library. Contribute to pmbanugo/uSockets.zig development by creating an account on GitHub.
000
Peter Mbanugo @pmbanugo.me · 04/06/2025
A lot of people supporting anti-immigration are themselves immigrants. I think they’ve come to associate “immigration” to mean Africans (coloured folks) who they believe ran away from their poor countries to take free money/food from Europe/US. Crazy
000
Peter Mbanugo @pmbanugo.me · 31/05/2025
I’m looking for the best way to send data between two threads in libuv? This isn’t using thread pool, so queue-work() wouldn’t be an option? It’s mostly one way communication and no shared data.
000
Peter Mbanugo @pmbanugo.me · 26/05/2025
Learn me some concurrency and event loop. Is this the piece to finally give me better understand of event loop at a basic level? Maybe try implementing something basic in @ziglang.bsky.social
a glimpe of a chapter in a book I picked up in order to learn event loop. it talks about how we can build concurrent servers without using threads
010
Peter Mbanugo @pmbanugo.me · 16/05/2025
Most of this week has been finishing up technical article about Speculation Rules and finally getting to add it to my website. Yesterday was about tweaking my fetch server implementation using uWebSockets (mostly fixing the junk LLM added to it), which improved speed! Today's for Zig + libuv
100
Peter Mbanugo @pmbanugo.me · 10/05/2025
Just put up a short guide about using libuv from Zig, and a bit about the error i faced with "dependency loop". It's actually my first blog post about @ziglang pmbanugo.me/blog/intro-u... Like to make this short post as reference for my future self
pmbanugo.me
How To Use Libuv In Zig
This guide will show you how to use libuv from your Zig project.
110
Peter Mbanugo @pmbanugo.me · 10/05/2025
So this is why people get excited about having their logo on Time Square... to impress investors and satisfy themselves 😅
chatgpt text explaining why people care about time square
000
Peter Mbanugo @pmbanugo.me · 08/05/2025
After 48 hours, I finally get my @ziglang.bsky.social code, (which interacts with libuv) to compile. I'm going to take a long break before I run it to make sure it's working. Moments like the past 2 days make me question why I chose to try Zig. Perhaps just to to JS (or C#)
media.tenor.com
a man with a beard wearing a fur coat looks at the camera
Alt: a man with a beard wearing a fur coat looks at the camera, with expression of excitement/success
130
Reposted by Peter Mbanugo
Léonie Watson @tink.uk · 08/05/2025
Remembering my Grandparents who served during WWII, and those often forgotten: 2.5 million South Asians (including Hindus, Sikhs, and Muslims), 1 million Africans (mainly Kenyans), and the 10s of thousands of Caribbeans (mainly Jamaicans). When they fought Fascism they fought it together. #VEDay
1354
Peter Mbanugo @pmbanugo.me · 07/05/2025
Quite an interesting need. Deno didn't click for me, but I was hoping it would have been a better alternative to Bun, b'cos I feel Bun doesn't yet know what to focus on. I was betting on Bun (it's fast in many places) but the stability in other areas is concerning. I've settled for Node (again)
140
Peter Mbanugo @pmbanugo.me · 02/05/2025
"Top 5 Free React UI Libraries to Use in 2025" #DEVCommunity dev.to/pmbanugo/top...
dev.to
Top 5 Free React UI Libraries to Use in 2025
Explore the best free React UI libraries available. Enhance your development experience and ship quickly to production!
000