<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Backend Engineering on Ikwuka Okoye</title><link>https://ikwukao.dev/tags/backend-engineering/</link><description>Recent content in Backend Engineering on Ikwuka Okoye</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 11 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ikwukao.dev/tags/backend-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a High-Throughput TCP Server in Go</title><link>https://ikwukao.dev/journal/strata-log-tcp/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/strata-log-tcp/</guid><description>&lt;p&gt;When building a high-throughput backend service, it is easy to focus on the application protocol and overlook the network boundary underneath it.&lt;/p&gt;
&lt;p&gt;Strata-Log takes the opposite approach.&lt;/p&gt;
&lt;p&gt;The project uses raw TCP connections as its ingestion layer, making connection handling, timeouts, concurrency, and shutdown behavior explicit.&lt;/p&gt;
&lt;p&gt;That creates a useful engineering environment for understanding what actually happens between a client sending data and a backend processing it.&lt;/p&gt;
&lt;h2 id="why-raw-tcp"&gt;Why Raw TCP?&lt;/h2&gt;
&lt;p&gt;Higher-level protocols and frameworks are valuable because they provide useful abstractions.&lt;/p&gt;</description></item><item><title>From Markdown to HTML: Designing the Static Site Generator Pipeline</title><link>https://ikwukao.dev/journal/static-site-generator-markdown-to-html/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/static-site-generator-markdown-to-html/</guid><description>&lt;h2 id="from-markdown-to-html-designing-the-static-site-generator-pipeline"&gt;From Markdown to HTML: Designing the Static Site Generator Pipeline&lt;/h2&gt;
&lt;p&gt;A static site generator is fundamentally a transformation system.&lt;/p&gt;
&lt;p&gt;It takes source content, processes that content through a series of stages, and produces files that can be served directly to users.&lt;/p&gt;
&lt;p&gt;For my static site generator, the core transformation looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Markdown
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Blocks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Block Types
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Inline Text Nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTML Nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTML
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The value of this architecture is not simply that it works.&lt;/p&gt;</description></item><item><title>Designing OpsPilot: Building a Modular DevOps Operations Toolkit</title><link>https://ikwukao.dev/journal/designing-opspilot/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/designing-opspilot/</guid><description>&lt;h2 id="designing-opspilot-building-a-modular-devops-operations-toolkit"&gt;Designing OpsPilot: Building a Modular DevOps Operations Toolkit&lt;/h2&gt;
&lt;p&gt;As backend systems become more complex, the operational work surrounding them becomes increasingly difficult to ignore.&lt;/p&gt;
&lt;p&gt;Running services, inspecting environments, managing containers, checking infrastructure, and performing repetitive maintenance tasks can quickly turn into a collection of shell commands, scripts, and undocumented procedures.&lt;/p&gt;
&lt;p&gt;That was the problem I wanted to explore with &lt;strong&gt;OpsPilot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Rather than building another collection of unrelated scripts, I wanted to create a structured operations toolkit that could grow alongside the systems it manages.&lt;/p&gt;</description></item><item><title>Designing Strata-Log: Architecture for a High-Throughput Distributed Log Engine</title><link>https://ikwukao.dev/journal/strata-log-architecture/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/strata-log-architecture/</guid><description>&lt;p&gt;Building a log aggregation system looks deceptively simple at first.&lt;/p&gt;
&lt;p&gt;Accept a connection, read some data, and write it somewhere.&lt;/p&gt;
&lt;p&gt;The difficulty begins when the system has to do that thousands of times concurrently without allowing network traffic, memory allocation, disk I/O, or shutdown behavior to become bottlenecks.&lt;/p&gt;
&lt;p&gt;That problem became the foundation for &lt;strong&gt;Strata-Log&lt;/strong&gt;, an experimental high-throughput distributed log aggregation engine built in Go.&lt;/p&gt;
&lt;p&gt;The project is deliberately focused on the lower layers of the system: TCP connections, concurrency, memory reuse, buffering, disk writes, and graceful shutdown.&lt;/p&gt;</description></item><item><title>Testing a Static Site Generator: Small Contracts, Reliable Output</title><link>https://ikwukao.dev/journal/static-site-generator-testing/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/static-site-generator-testing/</guid><description>&lt;h2 id="testing-a-static-site-generator-small-contracts-reliable-output"&gt;Testing a Static Site Generator: Small Contracts, Reliable Output&lt;/h2&gt;
&lt;p&gt;A static site generator is a good example of a system where small bugs can propagate through multiple layers.&lt;/p&gt;
&lt;p&gt;A mistake in Markdown parsing can eventually appear as malformed HTML.&lt;/p&gt;
&lt;p&gt;A malformed text node can produce incorrect links.&lt;/p&gt;
&lt;p&gt;A block-classification error can cause an entire section of a page to render incorrectly.&lt;/p&gt;
&lt;p&gt;That makes testing especially important.&lt;/p&gt;
&lt;p&gt;The solution is not necessarily hundreds of large end-to-end tests.&lt;/p&gt;</description></item><item><title>Building a Reliable REST API Client in Go for PokedexCLI</title><link>https://ikwukao.dev/journal/pokedexcli-api-client/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/pokedexcli-api-client/</guid><description>&lt;h2 id="building-a-reliable-rest-api-client-in-go-for-pokedexcli"&gt;Building a Reliable REST API Client in Go for PokedexCLI&lt;/h2&gt;
&lt;p&gt;A command-line application becomes considerably more interesting when it has to communicate with a remote service.&lt;/p&gt;
&lt;p&gt;PokedexCLI does not contain all of its data locally. Much of the information the application needs comes from the Pokémon API, which means the application has to deal with HTTP requests, JSON responses, network failures, pagination, and external service boundaries.&lt;/p&gt;
&lt;p&gt;Rather than allowing every command to construct its own HTTP requests, I treated API communication as a dedicated responsibility.&lt;/p&gt;</description></item><item><title>Building Reliable Tool Use into an AI Agent</title><link>https://ikwukao.dev/journal/ai-agent-tool-use/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/ai-agent-tool-use/</guid><description>&lt;h2 id="building-reliable-tool-use-into-an-ai-agent"&gt;Building Reliable Tool Use into an AI Agent&lt;/h2&gt;
&lt;p&gt;The moment an AI agent needs to interact with something outside the language model, tool use becomes central to its design.&lt;/p&gt;
&lt;p&gt;A model can explain how to query a database.&lt;/p&gt;
&lt;p&gt;It cannot query the database unless the surrounding application gives it a mechanism to do so.&lt;/p&gt;
&lt;p&gt;That mechanism is the tool.&lt;/p&gt;
&lt;h2 id="why-tools-matter"&gt;Why Tools Matter&lt;/h2&gt;
&lt;p&gt;A language model operates primarily through generated information.&lt;/p&gt;</description></item><item><title>Building Strata-Log: Designing a High-Throughput Distributed Log Aggregator in Go</title><link>https://ikwukao.dev/journal/building-strata-log/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/building-strata-log/</guid><description>&lt;h2 id="building-strata-log-designing-a-high-throughput-distributed-log-aggregator-in-go"&gt;Building Strata-Log: Designing a High-Throughput Distributed Log Aggregator in Go&lt;/h2&gt;
&lt;p&gt;Log aggregation looks simple until the volume increases.&lt;/p&gt;
&lt;p&gt;At low traffic levels, accepting a connection, reading log lines, and writing them to disk is straightforward. The problem changes when thousands of clients begin producing data concurrently and the system has to keep accepting connections without allowing slow storage operations to become a bottleneck.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strata-Log&lt;/strong&gt; started from that problem.&lt;/p&gt;
&lt;p&gt;The goal was to build a high-throughput log aggregation engine in Go that could safely process large numbers of concurrent log streams over raw TCP while keeping memory usage predictable and the architecture understandable.&lt;/p&gt;</description></item><item><title>Caching API Responses in PokedexCLI: Reducing Network Work in Go</title><link>https://ikwukao.dev/journal/pokedexcli-caching/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/pokedexcli-caching/</guid><description>&lt;h2 id="caching-api-responses-in-pokedexcli-reducing-network-work-in-go"&gt;Caching API Responses in PokedexCLI: Reducing Network Work in Go&lt;/h2&gt;
&lt;p&gt;One of the easiest performance problems to overlook in an API-driven application is repeated work.&lt;/p&gt;
&lt;p&gt;If an application repeatedly requests the same resource from a remote service, every request introduces network latency and another dependency on the availability of that service.&lt;/p&gt;
&lt;p&gt;PokedexCLI provides a useful environment for exploring this problem because the application repeatedly interacts with the Pokémon API while the user navigates locations and explores areas.&lt;/p&gt;</description></item><item><title>Designing a CLI Architecture for PokedexCLI in Go</title><link>https://ikwukao.dev/journal/pokedexcli-architecture/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/pokedexcli-architecture/</guid><description>&lt;h2 id="designing-a-cli-architecture-for-pokedexcli-in-go"&gt;Designing a CLI Architecture for PokedexCLI in Go&lt;/h2&gt;
&lt;p&gt;Building a command-line application can look deceptively simple.&lt;/p&gt;
&lt;p&gt;At first, the requirements for PokedexCLI seem straightforward: accept a command, execute it, call the Pokémon API when necessary, and print the result.&lt;/p&gt;
&lt;p&gt;But even a small CLI becomes difficult to maintain when command handling, application state, networking, caching, and presentation logic are allowed to grow together.&lt;/p&gt;
&lt;p&gt;For PokedexCLI, I wanted to approach the problem as a real software-engineering exercise rather than simply building a collection of commands that happened to work.&lt;/p&gt;</description></item><item><title>Designing the Architecture of an AI Agent</title><link>https://ikwukao.dev/journal/ai-agent-architecture/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/ai-agent-architecture/</guid><description>&lt;h2 id="designing-the-architecture-of-an-ai-agent"&gt;Designing the Architecture of an AI Agent&lt;/h2&gt;
&lt;p&gt;Building an AI agent is very different from building a simple application that sends a prompt to a language model and displays the response.&lt;/p&gt;
&lt;p&gt;A useful agent needs to do more than generate text. It needs to interpret a goal, decide what should happen next, use tools when necessary, maintain enough state to complete the task, observe the result, and recover when something goes wrong.&lt;/p&gt;</description></item><item><title>Making an AI Agent Reliable</title><link>https://ikwukao.dev/journal/ai-agent-reliability/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/ai-agent-reliability/</guid><description>&lt;h2 id="making-an-ai-agent-reliable"&gt;Making an AI Agent Reliable&lt;/h2&gt;
&lt;p&gt;The most impressive AI agent demo can still be a poor piece of software.&lt;/p&gt;
&lt;p&gt;A demonstration may work perfectly when the model responds as expected, every API is available, every tool succeeds, and the task is small.&lt;/p&gt;
&lt;p&gt;Real systems are not that forgiving.&lt;/p&gt;
&lt;p&gt;Models produce unexpected outputs.&lt;/p&gt;
&lt;p&gt;Networks fail.&lt;/p&gt;
&lt;p&gt;Tools time out.&lt;/p&gt;
&lt;p&gt;External APIs change.&lt;/p&gt;
&lt;p&gt;Users provide ambiguous instructions.&lt;/p&gt;
&lt;p&gt;An agent that cannot handle these conditions is not reliable.&lt;/p&gt;</description></item><item><title>Managing Memory and State in an AI Agent</title><link>https://ikwukao.dev/journal/ai-agent-memory-and-state/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/ai-agent-memory-and-state/</guid><description>&lt;h2 id="managing-memory-and-state-in-an-ai-agent"&gt;Managing Memory and State in an AI Agent&lt;/h2&gt;
&lt;p&gt;An AI agent becomes significantly more useful when it can maintain context across multiple steps.&lt;/p&gt;
&lt;p&gt;But &amp;ldquo;memory&amp;rdquo; is often used too loosely.&lt;/p&gt;
&lt;p&gt;For an engineer, it is more useful to distinguish between the different kinds of information an agent needs to retain.&lt;/p&gt;
&lt;p&gt;Some information belongs to the current execution.&lt;/p&gt;
&lt;p&gt;Some belongs to the conversation.&lt;/p&gt;
&lt;p&gt;Some may need to persist beyond the current session.&lt;/p&gt;</description></item><item><title>What Building an AI Agent Taught Me About Backend Engineering</title><link>https://ikwukao.dev/journal/ai-agent-lessons-learned/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/ai-agent-lessons-learned/</guid><description>&lt;h2 id="what-building-an-ai-agent-taught-me-about-backend-engineering"&gt;What Building an AI Agent Taught Me About Backend Engineering&lt;/h2&gt;
&lt;p&gt;Building an AI agent initially appears to be an exercise in working with language models.&lt;/p&gt;
&lt;p&gt;In practice, much of the work quickly becomes familiar backend engineering.&lt;/p&gt;
&lt;p&gt;Requests need validation.&lt;/p&gt;
&lt;p&gt;State needs to be managed.&lt;/p&gt;
&lt;p&gt;External services need timeouts.&lt;/p&gt;
&lt;p&gt;Failures need to be handled.&lt;/p&gt;
&lt;p&gt;Operations need to be observable.&lt;/p&gt;
&lt;p&gt;Components need clear boundaries.&lt;/p&gt;
&lt;p&gt;The language model adds a new dimension, but many of the underlying engineering principles remain the same.&lt;/p&gt;</description></item><item><title>What Building PokedexCLI Taught Me About Backend Engineering in Go</title><link>https://ikwukao.dev/journal/pokedexcli-command-lessons-learned/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://ikwukao.dev/journal/pokedexcli-command-lessons-learned/</guid><description>&lt;h2 id="what-building-pokedexcli-taught-me-about-backend-engineering-in-go"&gt;What Building PokedexCLI Taught Me About Backend Engineering in Go&lt;/h2&gt;
&lt;p&gt;PokedexCLI began as a relatively small Go application.&lt;/p&gt;
&lt;p&gt;The premise is simple: interact with Pokémon data through a command-line interface.&lt;/p&gt;
&lt;p&gt;But projects do not remain simple merely because their initial requirements are simple.&lt;/p&gt;
&lt;p&gt;As functionality grows, the application has to deal with API communication, pagination, application state, caching, command dispatch, data modeling, errors, and testing.&lt;/p&gt;
&lt;p&gt;That made PokedexCLI valuable as more than a CLI exercise.&lt;/p&gt;</description></item></channel></rss>