Ehab Terra
I build developer tools and learning references —
and write about how they work.
Software architect and Go engineer. Backend systems, language internals, and software architecture.
Projects & references
Tools I've shipped and the visual references I maintain — each lives on its own site.
ehabterra.com
Home base — everything in one place
Open-source Go projects, software-architecture references, and writing, gathered on one hub.
VisitThe Go Reference
go.ehabterra.com
A visual, Go-first reference across eleven tracks — fundamentals, data structures, concurrency, the standard library, internals, cloud-native and architecture — with diagrams, runnable code and quizzes.
VisitThe Architecture Reference
arch.ehabterra.com
A visual software-architecture reference across ten tracks — from foundations and styles to DDD, microservices, event-driven and distributed systems — distilled from 20+ landmark books.
Visitapispec
OpenAPI 3.1 from your Go code
Point it at a Go module and get an accurate OpenAPI 3.1 spec — inferred by walking the call graph, not from annotations that drift. Gin, Echo, Chi, Fiber, Gorilla Mux and net/http.
Visitworkflow
A workflow engine in Go
A lightweight, embeddable workflow engine for orchestrating multi-step processes in Go.
Visitتعلُّم العربية
ar.ehabterra.com · Arabic
An interactive reference for learning Arabic — reading and writing, grammar, morphology, rhetoric and more — with examples, diagrams, quizzes and progress tracking.
VisitLatest writing
All posts🔍 Extracting Generic Function Signatures from Go AST: A Journey Through go/types
A deep dive into extracting generic function signatures from Go AST, exploring the limitations of go/types.Info.TypeOf and finding a robust solutio...
🪤 The Hidden Cost of Outdated API Specs (for Go Developers)
Why docs drift happens, how to avoid it, and where spec-first vs code-first really break
🚀 Building a Petri Net-Based Workflow Engine in Go: From Theory to Production
A deep dive into building a flexible, extensible workflow engine inspired by Symfony's Workflow Component
🔥 Why Audit Logging Doesn't Belong in Your Main Database
How to implement scalable audit trails without compromising database performance
Go 1.20’s `errors.Join` and the Great Unwrap Mystery: A Developer’s Journey
Understanding Go's error handling evolution and the hidden power of joined errors