<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Paul Owuor</title>
    <description>The latest articles on DEV Community by Paul Owuor (@paowuor).</description>
    <link>https://dev.to/paowuor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3929995%2Fa9c24a67-6e9d-4a9e-9223-69f821353db9.png</url>
      <title>DEV Community: Paul Owuor</title>
      <link>https://dev.to/paowuor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/paowuor"/>
    <language>en</language>
    <item>
      <title>Architecture Beyond the Hype: The Hidden Costs of Deconstructing the Monolith</title>
      <dc:creator>Paul Owuor</dc:creator>
      <pubDate>Wed, 23 Sep 2026 19:37:33 +0000</pubDate>
      <link>https://dev.to/paowuor/architecture-beyond-the-hype-the-hidden-costs-of-deconstructing-the-monolith-3jko</link>
      <guid>https://dev.to/paowuor/architecture-beyond-the-hype-the-hidden-costs-of-deconstructing-the-monolith-3jko</guid>
      <description>&lt;h1&gt;
  
  
  Architecture Beyond the Hype: The Hidden Costs of Deconstructing the Monolith
&lt;/h1&gt;

&lt;p&gt;In 2014, microservices transitioned from an internal architectural pattern practiced by a handful of tech giants into an industry-wide imperative. The narrative was clean and persuasive: monolithic architectures were slow to test, impossible to scale cleanly across sprawling organizations, and prone to catastrophic, single-point failures. Divide your domain into discrete services, give each bounded context its own database, and teams would ship independently at unprecedented velocity.&lt;/p&gt;

&lt;p&gt;A decade later, a substantial fraction of engineering organizations discovered that instead of eliminating their technical debt, they merely distributed it over an unreliable network.&lt;/p&gt;

&lt;p&gt;When you decompose a system across process and physical boundaries, you do not just change where code executes. You fundamentally swap predictable, in-memory function calls and local ACID guarantees for partial failures, split-brain realities, eventual consistency, and the unforgiving physics of distributed networks.&lt;/p&gt;

&lt;p&gt;Before splitting your next service—or if you are currently navigating the friction of an overly granular architecture—it is critical to evaluate the true operational taxes that distributed systems demand, and how to rigorously decide whether you actually need them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Illusion of Decoupling
&lt;/h2&gt;

&lt;p&gt;The most common justification for decoupling components into independent services is developer independence: Service A can deploy without Service B knowing or caring.&lt;/p&gt;

&lt;p&gt;In practice, operational coupling frequently survives the architectural split, masquerading as independent services that are secretly glued together by runtime dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Temporal Coupling and Cascading Outages
&lt;/h3&gt;

&lt;p&gt;In a monolithic application, if Component A invokes a function in Component B, that invocation takes nanoseconds. If Component B takes slightly longer to compute, Component A waits in memory, bounded by a thread or coroutine pool.&lt;/p&gt;

&lt;p&gt;Across network boundaries, that same invocation introduces an uncontrollable variable: the network transit time, queue depth at the remote reverse proxy, serialization overhead, and the current saturation of the downstream host.&lt;/p&gt;

&lt;p&gt;If downstream Service B encounters high CPU load or a transient database connection spike, Service A’s client connections begin backing up. In a naive system without aggressively tuned timeouts, bulkhead isolation, and circuit breakers, Service A exhausts its own socket descriptors or request worker pool waiting for Service B. Within seconds, a localized performance dip in an auxiliary service cascades upward, taking down user authentication, checkout flows, and static catalog lookups simultaneously.&lt;/p&gt;

&lt;p&gt;You have not decoupled your systems; you have created a distributed monolith that shares failure domains across a network cable.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Schema Drift and Semantic Contracts
&lt;/h3&gt;

&lt;p&gt;In a shared codebase, a breaking interface change is immediately visible. The compiler or test suite flags every caller that fails to provide the new argument, and static analysis catches regressions before code merges to the main branch.&lt;/p&gt;

&lt;p&gt;In distributed microservices, contracts are enforced at runtime across HTTP APIs, gRPC protobufs, or message schemas. Even with contract testing frameworks, versioning strategies frequently break down in the wild:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Field deprecations require multi-stage deployments spanning weeks.&lt;/li&gt;
&lt;li&gt;Serializers disagree on the handling of nulls, missing keys, or timestamp formats.&lt;/li&gt;
&lt;li&gt;A client team makes assumptions about side-effects that the upstream service alters in a patch release.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The operational overhead shifts from running a compiler to coordinating multi-repository release schedules, maintaining backwards compatibility layers indefinitely, and hunting down silent schema mismatches in staging environments.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Distributed Data Dilemma
&lt;/h2&gt;

&lt;p&gt;Software engineering is fundamentally the manipulation of state. The hardest problems in computing do not concern compute; they concern state consistency, durability, and coordination. Monolithic architectures abstract these challenges by leaning heavily on relational databases that provide ACID properties out of the box.&lt;/p&gt;

&lt;p&gt;The moment you declare "each microservice owns its private database," you abandon the single most powerful tool in modern software engineering: the atomic transaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Myth of the Easy Distributed Transaction
&lt;/h3&gt;

&lt;p&gt;In a single database, debiting an account and creating an audit record is trivial: you begin a transaction, execute two statements, and commit. The database engine's write-ahead log ensures that either both events persist across power failures, or neither does.&lt;/p&gt;

&lt;p&gt;When the ledger belongs to Service A and the audit record belongs to Service B, a simple state update requires distributed transaction mechanics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two-Phase Commit (2PC):&lt;/strong&gt; While theoretically sound, 2PC creates a synchronous coordination lock. If the coordinator or any participant stalls during the prepare phase, locks are held open, throughput drops to near-zero, and system availability plummets. In high-scale web environments, 2PC is almost universally avoided due to its severe latency penalty and fragility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Saga Pattern:&lt;/strong&gt; Most teams pivot to orchestrating sagas—a sequence of local transactions where each step triggers the next via asynchronous messaging, paired with compensating transactions to undo prior steps if a downstream phase fails.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sagas sound straightforward on a whiteboard. In production, compensating actions are notoriously leaky abstractions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens if a compensating refund fails mid-execution?&lt;/li&gt;
&lt;li&gt;What happens when the user observes an intermediate state (the money was deducted, but the inventory was not yet reserved) and cancels their order in the UI before the saga resolves?&lt;/li&gt;
&lt;li&gt;How do you reconstruct the exact state of an order when three out of four asynchronous steps executed, but network partitions delayed the fourth by twenty minutes?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You are suddenly forced to re-implement isolation and atomicity primitives within your own business logic—areas where relational database engines have spent forty years optimizing edge cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Reporting and Aggregation Tax
&lt;/h3&gt;

&lt;p&gt;Monolithic relational databases allow you to join disparate tables with index-backed efficiency. Need to display an administrative view combining user status, recent payments, risk scores, and shipping tracking? A single query resolves it in milliseconds.&lt;/p&gt;

&lt;p&gt;In a microservices ecosystem, that single query is impossible. Your application must either:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scatter-Gather at the API Gateway:&lt;/strong&gt; Issue four concurrent HTTP or RPC requests to four discrete services, wait for the slowest response, and assemble the payload in memory. This multiplies your latency by the $p99$ tail of your downstream dependencies and turns your gateway into a high-memory choke point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-Driven Materialized Views:&lt;/strong&gt; Stream CDC (Change Data Capture) or domain events from all four services into a unified read model stored in an analytical or document database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While the materialized view pattern works, the hidden cost is immense: you must now manage message streaming infrastructure, partition keys, event deduplication, out-of-order event delivery, and the engineering overhead of debugging reconciliation errors when the read store silently falls out of sync with the systems of record.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Operational Balance Sheet
&lt;/h2&gt;

&lt;p&gt;Transitioning to distributed services is not simply an architectural choice; it is an organizational restructuring that demands specialized operational tooling. Every divided boundary extracts an infrastructural dividend that must be paid continuously.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observability Under Partitioning
&lt;/h3&gt;

&lt;p&gt;Debugging an issue in a unified process space is straightforward: stack traces pinpoint the exact line of execution, and logs can be correlated by process thread.&lt;/p&gt;

&lt;p&gt;In a distributed environment, a simple user action might traverse an edge proxy, an API gateway, an authentication service, three intermediate orchestration layers, and two asynchronous worker queues. If an error occurs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Correlation IDs are mandatory:&lt;/strong&gt; Every boundary must strictly extract, propagate, and log a unified tracing context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Tracing infrastructure:&lt;/strong&gt; You must deploy, maintain, and budget for massive telemetry ingest platforms to trace spans across systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log Aggregation Volume:&lt;/strong&gt; Debugging requires aggregating terabytes of structured logs across dozens of ephemeral container clusters, where finding signal in the noise requires complex query mechanics and significant operational cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without world-class observability, mean time to resolution (MTTR) climbs exponentially. Engineers spend hours arguing which service caused a dropped request rather than resolving the underlying bug.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Development Friction
&lt;/h3&gt;

&lt;p&gt;One of the most immediate casualties of microservice proliferation is the developer onboarding experience.&lt;/p&gt;

&lt;p&gt;When a system fits into a single repository, getting started is straightforward: clone the repo, run a script to seed a local database, and run the development server. Feedback loops are tight; running integration test suites takes seconds.&lt;/p&gt;

&lt;p&gt;When a system spans twenty services, running the application locally becomes untenable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does an engineer run all twenty services in a heavyweight local container runtime, turning their laptop fans into jet engines and consuming all available RAM?&lt;/li&gt;
&lt;li&gt;Do they rely on mock services, which inevitably drift from production behavior and invalidate local testing?&lt;/li&gt;
&lt;li&gt;Do they share remote development environments in the cloud, introducing network lag, shared-state conflicts, and high monthly cloud bills?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When local test velocity degrades, developers stop running comprehensive tests before opening pull requests. Quality assurance shifts rightward into shared staging environments or production itself, directly undermining the development velocity the architecture was supposed to unlock.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Microservices Are Actually Justified
&lt;/h2&gt;

&lt;p&gt;Despite these formidable challenges, microservices are not inherently flawed. They are an advanced engineering solution to a very specific set of problems. The mistake most teams make is adopting them to solve &lt;em&gt;code organization&lt;/em&gt; problems rather than &lt;em&gt;scaling&lt;/em&gt; problems.&lt;/p&gt;

&lt;p&gt;Microservices earn their operational tax under specific conditions:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Massive Organizational Scale (Conway's Law)
&lt;/h3&gt;

&lt;p&gt;The primary beneficiary of microservices is not the computer; it is the human organization.&lt;/p&gt;

&lt;p&gt;When an engineering department grows beyond 100 to 150 engineers, a monolithic codebase becomes an organizational bottleneck. Merge queues stretch for hours, deployment schedules require cross-team coordination meetings, and a bad commit from one sub-team blocks releases for the entire company.&lt;/p&gt;

&lt;p&gt;At this threshold, microservices serve as organizational firewalls. They allow completely autonomous business units—with their own product managers, on-call rotations, and release cadences—to iterate rapidly without stepping on each other's code. You trade infrastructure efficiency for organizational decoupling. If your entire engineering department can sit in a single conference room, this tradeoff will actively harm your productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Disparate Hardware and Runtime Requirements
&lt;/h3&gt;

&lt;p&gt;A service split makes architectural sense when components have fundamentally incompatible computational profiles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An ingestion engine requiring massive network I/O and low-latency memory handling.&lt;/li&gt;
&lt;li&gt;A CPU-bound machine learning inference service needing GPU-accelerated instances and specialized system libraries.&lt;/li&gt;
&lt;li&gt;A core transactional API requiring high-memory, standard compute instances.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Forcing these wildly different workloads into a single deployment artifact forces you to provision your entire fleet to satisfy the highest common denominator, driving up infrastructure costs. Here, physical decoupling provides immediate operational and financial returns.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Asymmetric Scaling Demands
&lt;/h3&gt;

&lt;p&gt;If 98% of your system's traffic hits a public-facing read-heavy endpoint (such as a search index or real-time catalog), while your administrative and reporting dashboards receive minimal use, scaling the entire monolithic application horizontally wastes compute resources.&lt;/p&gt;

&lt;p&gt;Extracting that specific high-throughput slice into an independently scalable service running on dedicated auto-scaling pools is a surgical, cost-effective optimization.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Pragmatic Alternative: The Modular Monolith
&lt;/h2&gt;

&lt;p&gt;If an engineering team has not reached hyper-scale, how do you avoid the maintenance traps of both a chaotic, tangled codebase and the crippling complexity of premature microservices?&lt;/p&gt;

&lt;p&gt;The answer lies in the &lt;strong&gt;Modular Monolith&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A modular monolith preserves the deployment simplicity and transactional guarantees of a single binary while strictly enforcing logical domain boundaries within the code structure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explicit Module Boundaries:&lt;/strong&gt; Business logic is segmented into discrete domain packages. A domain module exposes only high-level interfaces to other packages; internal entities, database tables, and utility functions remain private.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cross-Domain Database Joins:&lt;/strong&gt; Even within a shared relational database, modules restrict their queries strictly to the tables they own. If the Billing domain needs information from the User domain, it must request it through the User domain’s internal Go, Rust, or TypeScript interface, rather than issuing a raw SQL query that joins the tables directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal Event Busses:&lt;/strong&gt; For asynchronous side-effects—such as sending a welcome email after account creation—modules publish internal events across an in-memory channel or event dispatcher rather than invoking methods directly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By structuring a monolith with rigorous internal boundaries, you retain single-command deployments, painless local development, atomic database transactions, and zero-latency in-memory execution.&lt;/p&gt;

&lt;p&gt;Most importantly, you preserve your architectural optionality. If a specific domain module eventually outgrows the monolith due to team size or extreme scaling demands, extracting it into an independent microservice is straightforward: the boundaries, interfaces, and data models are already cleanly separated.&lt;/p&gt;

&lt;p&gt;You extract the service when you have empirical data proving the necessity, rather than guessing your architectural requirements ahead of time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architectural Maturity Is Knowing What Not to Build
&lt;/h2&gt;

&lt;p&gt;Architecture is not about finding the "correct" pattern; it is the deliberate practice of evaluating tradeoffs. Every design decision is an explicit agreement to accept one set of problems in exchange for another.&lt;/p&gt;

&lt;p&gt;Microservices solve scale: scale of teams, scale of divergent workloads, and scale of organizational complexity. But they demand a high price in operational complexity, consistency challenges, and infrastructure management.&lt;/p&gt;

&lt;p&gt;Engineering excellence is not defined by how many moving parts you can stitch together across an AWS region. It is measured by your ability to deliver reliable, maintainable business value with the minimum amount of complexity required. Before you break apart your next system, ensure the problem you are solving is large enough to justify the world you are about to inherit.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>microservices</category>
      <category>softwareengineering</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Learning JavaScript by Breaking Things</title>
      <dc:creator>Paul Owuor</dc:creator>
      <pubDate>Sun, 13 Sep 2026 19:29:07 +0000</pubDate>
      <link>https://dev.to/paowuor/learning-javascript-by-breaking-things-b9j</link>
      <guid>https://dev.to/paowuor/learning-javascript-by-breaking-things-b9j</guid>
      <description>&lt;h1&gt;
  
  
  Learning JavaScript by Breaking Things
&lt;/h1&gt;

&lt;p&gt;There’s a particular kind of confidence you get from writing code that works.&lt;/p&gt;

&lt;p&gt;Then there’s the much more useful kind you get from writing code that &lt;strong&gt;doesn’t work — and figuring out why.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s where I am right now.&lt;/p&gt;

&lt;p&gt;My journey at &lt;strong&gt;Zone01 Kisumu&lt;/strong&gt; has increasingly become less about learning syntax and more about learning how to think like a developer.&lt;/p&gt;

&lt;p&gt;And the current &lt;strong&gt;Piscine JavaScript&lt;/strong&gt; phase has been making that very obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript has a way of humbling you
&lt;/h2&gt;

&lt;p&gt;A task can look ridiculously simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Write a function that does X.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You write it.&lt;/p&gt;

&lt;p&gt;You run the tests.&lt;/p&gt;

&lt;p&gt;It fails.&lt;/p&gt;

&lt;p&gt;You stare at the code.&lt;/p&gt;

&lt;p&gt;You swear the code is correct.&lt;/p&gt;

&lt;p&gt;You run it again.&lt;/p&gt;

&lt;p&gt;It fails in a completely different way.&lt;/p&gt;

&lt;p&gt;Eventually, you discover that the problem wasn't the function itself. Maybe it was how you handled an edge case. Maybe you misunderstood what the test expected. Maybe your assumptions about JavaScript were simply wrong.&lt;/p&gt;

&lt;p&gt;And that's the interesting part.&lt;/p&gt;

&lt;p&gt;I'm starting to realize that programming isn't primarily about knowing what to type.&lt;/p&gt;

&lt;p&gt;It's about developing the ability to ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What exactly is happening here?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The small things are teaching me a lot
&lt;/h2&gt;

&lt;p&gt;We've been working with concepts like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ES modules&lt;/li&gt;
&lt;li&gt;Higher-order functions&lt;/li&gt;
&lt;li&gt;Promises and asynchronous JavaScript&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Timeouts and retries&lt;/li&gt;
&lt;li&gt;File manipulation&lt;/li&gt;
&lt;li&gt;HTTP servers&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;Basic authentication&lt;/li&gt;
&lt;li&gt;Objects and functions&lt;/li&gt;
&lt;li&gt;Testing and debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these concepts are particularly mysterious on their own.&lt;/p&gt;

&lt;p&gt;The challenge is putting them together and making them behave exactly as expected.&lt;/p&gt;

&lt;p&gt;A test failing because a URL contains &lt;code&gt;hello+world&lt;/code&gt; instead of &lt;code&gt;hello%20world&lt;/code&gt; can teach you more about how a system actually works than reading ten pages of documentation.&lt;/p&gt;

&lt;p&gt;At least, that's how it feels sometimes. 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm learning to stop guessing
&lt;/h2&gt;

&lt;p&gt;One of the biggest changes I've noticed in myself is how I approach errors.&lt;/p&gt;

&lt;p&gt;Earlier, an error message could feel like something standing between me and the solution.&lt;/p&gt;

&lt;p&gt;Now I try to treat it as evidence.&lt;/p&gt;

&lt;p&gt;If something says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ReferenceError: something is not defined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the useful question isn't:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Why is JavaScript being annoying?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Where is this value supposed to come from, and what assumption did I make about its scope?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That shift sounds small.&lt;/p&gt;

&lt;p&gt;It isn't.&lt;/p&gt;

&lt;p&gt;It's changing how I debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  The goal isn't to memorize JavaScript
&lt;/h2&gt;

&lt;p&gt;There are far too many methods, APIs, quirks, and edge cases to memorize everything.&lt;/p&gt;

&lt;p&gt;What matters more is becoming comfortable navigating unfamiliar problems.&lt;/p&gt;

&lt;p&gt;Read the error.&lt;/p&gt;

&lt;p&gt;Inspect the code.&lt;/p&gt;

&lt;p&gt;Check the documentation.&lt;/p&gt;

&lt;p&gt;Write a smaller test.&lt;/p&gt;

&lt;p&gt;Make a hypothesis.&lt;/p&gt;

&lt;p&gt;Test it.&lt;/p&gt;

&lt;p&gt;Break it again.&lt;/p&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;That's becoming the real curriculum.&lt;/p&gt;

&lt;h2&gt;
  
  
  From “I know this” to “I can figure this out”
&lt;/h2&gt;

&lt;p&gt;I think that's one of the most valuable things Zone01 has been teaching me.&lt;/p&gt;

&lt;p&gt;There's a difference between saying:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“I know JavaScript.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and saying:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Give me a JavaScript problem and I'll figure it out.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm much more interested in becoming the second person.&lt;/p&gt;

&lt;p&gt;There are still plenty of moments where I get stuck.&lt;/p&gt;

&lt;p&gt;There are still bugs that make absolutely no sense for the first 30 minutes.&lt;/p&gt;

&lt;p&gt;There are still tests that seem personally offended by my code.&lt;/p&gt;

&lt;p&gt;But I'm getting better at staying with the problem.&lt;/p&gt;

&lt;p&gt;And maybe that's the point.&lt;/p&gt;

&lt;p&gt;Not becoming someone who never gets stuck.&lt;/p&gt;

&lt;p&gt;Becoming someone who knows what to do &lt;strong&gt;when they are stuck.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Still learning. Still debugging. Still breaking things.&lt;/p&gt;

&lt;p&gt;And, hopefully, getting a little better every day.&lt;/p&gt;

&lt;h1&gt;
  
  
  Zone01 #JavaScript #WebDevelopment #SoftwareDevelopment #LearningToCode #DevJourney
&lt;/h1&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>Learning to Learn: The Biggest Lesson I've Gained at Zone01 Kisumu</title>
      <dc:creator>Paul Owuor</dc:creator>
      <pubDate>Wed, 29 Jul 2026 00:36:24 +0000</pubDate>
      <link>https://dev.to/paowuor/learning-to-learn-the-biggest-lesson-ive-gained-at-zone01-kisumu-26j0</link>
      <guid>https://dev.to/paowuor/learning-to-learn-the-biggest-lesson-ive-gained-at-zone01-kisumu-26j0</guid>
      <description>&lt;h1&gt;
  
  
  Learning to Learn: The Biggest Lesson I've Gained at Zone01 Kisumu
&lt;/h1&gt;

&lt;p&gt;When most people think about learning software engineering, they picture classrooms, lectures, and hours of note-taking.&lt;/p&gt;

&lt;p&gt;That wasn't my experience.&lt;/p&gt;

&lt;p&gt;My journey at Zone01 Kisumu has been different. Instead of being told exactly what to do, I've been challenged to find answers, solve problems, and learn through building.&lt;/p&gt;

&lt;p&gt;At first, that was intimidating.&lt;/p&gt;

&lt;p&gt;Today, I realize it has been one of the most valuable learning experiences I've ever had.&lt;/p&gt;

&lt;h2&gt;
  
  
  There Are No Step-by-Step Instructions
&lt;/h2&gt;

&lt;p&gt;One of the first things I noticed was that nobody hands you the solution.&lt;/p&gt;

&lt;p&gt;You're given a project.&lt;/p&gt;

&lt;p&gt;You're given documentation.&lt;/p&gt;

&lt;p&gt;You're given teammates.&lt;/p&gt;

&lt;p&gt;The rest is up to you.&lt;/p&gt;

&lt;p&gt;That can feel overwhelming, especially when you're used to structured tutorials.&lt;/p&gt;

&lt;p&gt;But that's also how real software engineering works.&lt;/p&gt;

&lt;p&gt;Developers don't always have someone standing beside them explaining every error message or writing every function.&lt;/p&gt;

&lt;p&gt;They investigate.&lt;/p&gt;

&lt;p&gt;They experiment.&lt;/p&gt;

&lt;p&gt;They learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Became My Classroom
&lt;/h2&gt;

&lt;p&gt;Early in my journey, I thought asking for help immediately was the fastest way to solve problems.&lt;/p&gt;

&lt;p&gt;Now, my first instinct is different.&lt;/p&gt;

&lt;p&gt;I search documentation.&lt;/p&gt;

&lt;p&gt;I read official guides.&lt;/p&gt;

&lt;p&gt;I experiment.&lt;/p&gt;

&lt;p&gt;I fail.&lt;/p&gt;

&lt;p&gt;I try again.&lt;/p&gt;

&lt;p&gt;This habit has made me a far more independent learner than I ever expected.&lt;/p&gt;

&lt;p&gt;One of the greatest skills a developer can have isn't memorizing syntax—it's knowing how to find reliable information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging Is Part of the Job
&lt;/h2&gt;

&lt;p&gt;Some of my biggest breakthroughs have come after hours of debugging.&lt;/p&gt;

&lt;p&gt;At first, I viewed bugs as failures.&lt;/p&gt;

&lt;p&gt;Now I see them as feedback.&lt;/p&gt;

&lt;p&gt;Every bug teaches something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A missing validation&lt;/li&gt;
&lt;li&gt;A misunderstanding of a concept&lt;/li&gt;
&lt;li&gt;A wrong assumption&lt;/li&gt;
&lt;li&gt;A better way to structure code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more I debug, the more confident I become.&lt;/p&gt;

&lt;p&gt;Not because I make fewer mistakes—but because I know how to solve them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning With Other Developers
&lt;/h2&gt;

&lt;p&gt;One of the best parts of Zone01 Kisumu is the peer-to-peer learning model.&lt;/p&gt;

&lt;p&gt;There are no competitors.&lt;/p&gt;

&lt;p&gt;Everyone is learning.&lt;/p&gt;

&lt;p&gt;Everyone gets stuck.&lt;/p&gt;

&lt;p&gt;Everyone has something to contribute.&lt;/p&gt;

&lt;p&gt;I've learned that explaining a concept to someone else often deepens my own understanding more than simply reading about it.&lt;/p&gt;

&lt;p&gt;Software engineering is a collaborative profession, and learning to communicate technical ideas is just as important as learning to write code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects Teach More Than Tutorials
&lt;/h2&gt;

&lt;p&gt;Throughout my journey, I've worked on projects that required me to think critically rather than simply follow instructions.&lt;/p&gt;

&lt;p&gt;Each project introduced new concepts, new challenges, and new opportunities to improve.&lt;/p&gt;

&lt;p&gt;More importantly, they taught me how different parts of software development come together to solve real problems.&lt;/p&gt;

&lt;p&gt;Building projects forces you to think about architecture, debugging, testing, version control, teamwork, and problem-solving all at once.&lt;/p&gt;

&lt;p&gt;That's something no tutorial can fully replicate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Growth Happens Outside Your Comfort Zone
&lt;/h2&gt;

&lt;p&gt;There were plenty of moments when I questioned whether I was making progress.&lt;/p&gt;

&lt;p&gt;Some projects felt impossible.&lt;/p&gt;

&lt;p&gt;Some bugs took hours—or even days—to solve.&lt;/p&gt;

&lt;p&gt;But every difficult challenge became another lesson.&lt;/p&gt;

&lt;p&gt;Looking back, the problems that once seemed impossible are now things I can solve with confidence.&lt;/p&gt;

&lt;p&gt;That realization has been incredibly motivating.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Biggest Takeaway
&lt;/h2&gt;

&lt;p&gt;If there's one lesson I'll carry with me throughout my career, it's this:&lt;/p&gt;

&lt;p&gt;Learning how to learn is more valuable than learning any single programming language or framework.&lt;/p&gt;

&lt;p&gt;Technology changes.&lt;/p&gt;

&lt;p&gt;Frameworks evolve.&lt;/p&gt;

&lt;p&gt;Languages rise and fall.&lt;/p&gt;

&lt;p&gt;But curiosity, persistence, and the ability to solve problems will always remain valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;My journey at Zone01 Kisumu is still ongoing, and I know there's much more to learn.&lt;/p&gt;

&lt;p&gt;Every project presents new challenges.&lt;/p&gt;

&lt;p&gt;Every challenge presents new lessons.&lt;/p&gt;

&lt;p&gt;And every lesson brings me one step closer to becoming the software engineer I aspire to be.&lt;/p&gt;

&lt;p&gt;If you're beginning your own journey into software engineering, don't be discouraged by difficult projects or frustrating bugs.&lt;/p&gt;

&lt;p&gt;Embrace them.&lt;/p&gt;

&lt;p&gt;They aren't obstacles—they're part of the process.&lt;/p&gt;

&lt;p&gt;Keep learning.&lt;/p&gt;

&lt;p&gt;Keep building.&lt;/p&gt;

&lt;p&gt;And remember that becoming a developer isn't about having all the answers—it's about never stopping the search for them.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Have you experienced a learning environment that completely changed the way you approach software development? I'd love to hear your story in the comments.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy coding!&lt;/em&gt; 🚀&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #beginners #career #programming #softwareengineering #learning #webdev #golang #opensource&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>What I Learned at the Backend Frameworks Mini-Conference</title>
      <dc:creator>Paul Owuor</dc:creator>
      <pubDate>Mon, 06 Jul 2026 22:32:00 +0000</pubDate>
      <link>https://dev.to/paowuor/what-i-learned-at-the-backend-frameworks-mini-conference-5gik</link>
      <guid>https://dev.to/paowuor/what-i-learned-at-the-backend-frameworks-mini-conference-5gik</guid>
      <description>&lt;p&gt;As a software engineering apprentice at Zone01 Kisumu, I'm constantly looking for opportunities to learn beyond the projects and challenges I work on every day.&lt;/p&gt;

&lt;p&gt;Recently, I attended the &lt;strong&gt;Backend Frameworks Mini-Conference&lt;/strong&gt;, an event focused on backend development, modern frameworks, APIs, databases, deployment, and career opportunities in backend engineering.&lt;/p&gt;

&lt;p&gt;The experience reinforced several lessons that every aspiring backend developer should understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend Development Is More Than Writing APIs
&lt;/h2&gt;

&lt;p&gt;When many beginners think about backend development, they often imagine creating endpoints and connecting databases.&lt;/p&gt;

&lt;p&gt;While those are important skills, the conference highlighted a broader picture.&lt;/p&gt;

&lt;p&gt;Backend engineers are responsible for building systems that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reliable&lt;/li&gt;
&lt;li&gt;Scalable&lt;/li&gt;
&lt;li&gt;Secure&lt;/li&gt;
&lt;li&gt;Maintainable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A backend application isn't just code that works today. It's code that can continue serving users as traffic grows, requirements change, and new features are added.&lt;/p&gt;

&lt;p&gt;This perspective changed how I think about the projects I build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frameworks Are Tools, Not Solutions
&lt;/h2&gt;

&lt;p&gt;One of the biggest takeaways for me was understanding that frameworks are simply tools.&lt;/p&gt;

&lt;p&gt;Whether you're working with Go, Node.js, Java, Python, or another ecosystem, the framework itself won't solve architectural problems.&lt;/p&gt;

&lt;p&gt;Good software engineering comes from understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Data flow&lt;/li&gt;
&lt;li&gt;Security principles&lt;/li&gt;
&lt;li&gt;Performance considerations&lt;/li&gt;
&lt;li&gt;Maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choosing a framework should be based on project requirements rather than popularity.&lt;/p&gt;

&lt;p&gt;This was a valuable reminder because developers often spend too much time debating technologies instead of focusing on solving real problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  APIs Are the Language of Modern Applications
&lt;/h2&gt;

&lt;p&gt;Nearly every modern application relies on APIs.&lt;/p&gt;

&lt;p&gt;The conference discussions emphasized how APIs allow different systems to communicate and work together seamlessly.&lt;/p&gt;

&lt;p&gt;As someone interested in backend engineering, this reinforced the importance of understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST principles&lt;/li&gt;
&lt;li&gt;Request and response handling&lt;/li&gt;
&lt;li&gt;Authentication and authorization&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building a good API isn't just about functionality; it's about creating a reliable experience for other developers who will use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Must Be Considered Early
&lt;/h2&gt;

&lt;p&gt;Security was another topic that stood out.&lt;/p&gt;

&lt;p&gt;Many beginner developers focus on getting applications working before thinking about security.&lt;/p&gt;

&lt;p&gt;However, the conference emphasized that security should be built into applications from the start.&lt;/p&gt;

&lt;p&gt;Some key areas discussed included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Secure data handling&lt;/li&gt;
&lt;li&gt;Protecting sensitive information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A secure application is not an optional feature—it's a requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning From the Community Matters
&lt;/h2&gt;

&lt;p&gt;Perhaps the most valuable part of the conference wasn't the technical presentations.&lt;/p&gt;

&lt;p&gt;It was the opportunity to interact with other developers, learners, and industry professionals.&lt;/p&gt;

&lt;p&gt;Software engineering can sometimes feel like a solitary activity, especially when you're spending hours debugging code.&lt;/p&gt;

&lt;p&gt;Events like this remind us that there is an entire community of people facing similar challenges, learning similar concepts, and growing together.&lt;/p&gt;

&lt;p&gt;Conversations with other developers often provide insights that cannot be found in documentation alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  How This Connects to My Journey
&lt;/h2&gt;

&lt;p&gt;At Zone01 Kisumu, much of the learning process is project-based.&lt;/p&gt;

&lt;p&gt;We're encouraged to solve problems independently, collaborate with peers, and continuously improve our technical skills.&lt;/p&gt;

&lt;p&gt;The Backend Frameworks Mini-Conference complemented this learning approach perfectly.&lt;/p&gt;

&lt;p&gt;Many of the concepts discussed during the event connected directly to challenges I've encountered while building backend projects, working with APIs, debugging applications, and learning Go.&lt;/p&gt;

&lt;p&gt;It reminded me that becoming a backend engineer is not about mastering a single language or framework.&lt;/p&gt;

&lt;p&gt;It's about developing the mindset required to build reliable systems and solve real-world problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The conference left me with a renewed appreciation for backend engineering.&lt;/p&gt;

&lt;p&gt;Technology will continue to evolve, and new frameworks will emerge. But the fundamental principles of software engineering remain the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the problem.&lt;/li&gt;
&lt;li&gt;Choose the right tools.&lt;/li&gt;
&lt;li&gt;Build secure and reliable systems.&lt;/li&gt;
&lt;li&gt;Never stop learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm grateful to Zone01 Kisumu and the event organizers for creating opportunities like this for aspiring developers.&lt;/p&gt;

&lt;p&gt;The journey continues, and I'm excited to keep learning, building, and growing as a backend engineer.&lt;/p&gt;

&lt;p&gt;Have you attended a tech conference or meetup that changed the way you think about software development? I'd love to hear about your experience in the comments.&lt;/p&gt;

&lt;h1&gt;
  
  
  backend #golang #webdev #softwareengineering #career #beginners #api #programming #zone01 #learninginpublic
&lt;/h1&gt;

</description>
      <category>backend</category>
      <category>beginners</category>
      <category>career</category>
      <category>learning</category>
    </item>
    <item>
      <title>Why Learning to Debug Made Me a Better Developer Than Writing Code</title>
      <dc:creator>Paul Owuor</dc:creator>
      <pubDate>Mon, 15 Jun 2026 02:26:20 +0000</pubDate>
      <link>https://dev.to/paowuor/why-learning-to-debug-made-me-a-better-developer-than-writing-code-fe4</link>
      <guid>https://dev.to/paowuor/why-learning-to-debug-made-me-a-better-developer-than-writing-code-fe4</guid>
      <description>&lt;h1&gt;
  
  
  Why Learning to Debug Made Me a Better Developer Than Writing Code
&lt;/h1&gt;

&lt;p&gt;When I first started learning software engineering, I thought success would come from writing lots of code quickly.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;The biggest growth in my journey didn’t come from writing code — it came from debugging broken code.&lt;/p&gt;

&lt;p&gt;At first, debugging felt frustrating. I would run my program, get an error, and feel stuck. Sometimes the error message made no sense. Other times, everything looked correct, yet the program still failed.&lt;/p&gt;

&lt;p&gt;I used to think bugs were signs that I wasn’t good enough.&lt;/p&gt;

&lt;p&gt;Over time, that mindset changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging Changed How I Think
&lt;/h2&gt;

&lt;p&gt;Working on backend and algorithm-heavy projects taught me something important: bugs are not the enemy — they are feedback.&lt;/p&gt;

&lt;p&gt;Every bug tells a story.&lt;/p&gt;

&lt;p&gt;A nil pointer might reveal missing validation.&lt;br&gt;
A failing test might expose flawed logic.&lt;br&gt;
An unexpected output might uncover assumptions you didn’t realize you made.&lt;/p&gt;

&lt;p&gt;Debugging forced me to slow down and think like an engineer.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;“Why isn’t this working?”&lt;/p&gt;

&lt;p&gt;I started asking:&lt;/p&gt;

&lt;p&gt;“What exactly is happening inside my program?”&lt;/p&gt;

&lt;p&gt;That small mindset shift changed everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Skill: Problem Decomposition
&lt;/h2&gt;

&lt;p&gt;One of the hardest things about programming is that systems are complex.&lt;/p&gt;

&lt;p&gt;A single bug could come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect input handling&lt;/li&gt;
&lt;li&gt;Broken business logic&lt;/li&gt;
&lt;li&gt;State mutation&lt;/li&gt;
&lt;li&gt;Race conditions&lt;/li&gt;
&lt;li&gt;API failures&lt;/li&gt;
&lt;li&gt;Environment configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can’t solve all of that at once.&lt;/p&gt;

&lt;p&gt;I learned to break problems into smaller questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the input correct?&lt;/li&gt;
&lt;li&gt;Is this function returning what I expect?&lt;/li&gt;
&lt;li&gt;Where does the output change?&lt;/li&gt;
&lt;li&gt;What assumptions am I making?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That process made debugging manageable.&lt;/p&gt;

&lt;p&gt;And honestly, it made me a better thinker outside programming too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools That Help Me Debug Better
&lt;/h2&gt;

&lt;p&gt;Here are some practices that improved my debugging:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Reading Error Messages Carefully
&lt;/h3&gt;

&lt;p&gt;I used to ignore error messages and panic.&lt;/p&gt;

&lt;p&gt;Now I read them line by line.&lt;/p&gt;

&lt;p&gt;The answer is often already there.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Logging Everything
&lt;/h3&gt;

&lt;p&gt;Print statements still save lives.&lt;/p&gt;

&lt;p&gt;Sometimes you just need visibility into what your code is doing.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Using Git Properly
&lt;/h3&gt;

&lt;p&gt;Version control makes experimentation safer.&lt;/p&gt;

&lt;p&gt;You can try bold fixes without fear.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Taking Breaks
&lt;/h3&gt;

&lt;p&gt;Some bugs disappear after stepping away for 10 minutes.&lt;/p&gt;

&lt;p&gt;Fresh eyes matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Tell New Developers
&lt;/h2&gt;

&lt;p&gt;If you’re learning to code and constantly hitting bugs, that’s normal.&lt;/p&gt;

&lt;p&gt;Debugging isn’t a side skill.&lt;/p&gt;

&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; software engineering.&lt;/p&gt;

&lt;p&gt;The developers who grow fastest aren’t always the ones who write code fastest.&lt;/p&gt;

&lt;p&gt;They’re often the ones who investigate problems patiently and systematically.&lt;/p&gt;

&lt;p&gt;So the next time your code breaks, don’t panic.&lt;/p&gt;

&lt;p&gt;A bug might just be your next lesson.&lt;/p&gt;

&lt;p&gt;And sometimes, fixing one bug teaches more than writing 500 lines of code.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>backend</category>
    </item>
    <item>
      <title>From Operations Support to Software Engineering: My Journey Into Tech</title>
      <dc:creator>Paul Owuor</dc:creator>
      <pubDate>Sat, 23 May 2026 18:11:17 +0000</pubDate>
      <link>https://dev.to/paowuor/from-operations-support-to-software-engineering-my-journey-into-tech-2pdn</link>
      <guid>https://dev.to/paowuor/from-operations-support-to-software-engineering-my-journey-into-tech-2pdn</guid>
      <description>&lt;p&gt;A year ago, I was mostly handling support and operational tasks. Today, I’m building backend projects in Go, debugging algorithms, working with Git daily, and learning how real software systems are designed.&lt;/p&gt;

&lt;p&gt;The transition hasn’t been easy.&lt;/p&gt;

&lt;p&gt;There were moments when I spent hours fixing a single bug, struggled to understand stack operations in Push-Swap, or stared at terminal errors that made absolutely no sense at first. But every project taught me something important: consistency matters more than perfection.&lt;/p&gt;

&lt;p&gt;One thing I’ve learned during my journey at Zone01 Kisumu is that software engineering is less about “knowing everything” and more about learning how to solve problems step by step.&lt;/p&gt;

&lt;p&gt;Some lessons that changed my mindset:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugging is a skill, not a sign of failure&lt;/li&gt;
&lt;li&gt;Reading documentation is part of being a developer&lt;/li&gt;
&lt;li&gt;Git and terminal skills are just as important as coding&lt;/li&gt;
&lt;li&gt;Small daily improvements compound over time&lt;/li&gt;
&lt;li&gt;Building projects teaches faster than watching tutorials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Projects I’ve worked on recently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push-Swap algorithm project in Go&lt;/li&gt;
&lt;li&gt;ASCII Art Web application&lt;/li&gt;
&lt;li&gt;HTTP servers and web handlers&lt;/li&gt;
&lt;li&gt;Stack operations and sorting logic&lt;/li&gt;
&lt;li&gt;Git workflows and debugging practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m currently focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend engineering&lt;/li&gt;
&lt;li&gt;Go development&lt;/li&gt;
&lt;li&gt;AI/Data-related opportunities&lt;/li&gt;
&lt;li&gt;Remote software engineering roles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To anyone transitioning into tech from another field:&lt;br&gt;
Keep building.&lt;br&gt;
Keep breaking things.&lt;br&gt;
Keep learning.&lt;/p&gt;

&lt;p&gt;Your first breakthrough might be one project away.&lt;/p&gt;

&lt;h1&gt;
  
  
  100DaysOfCode #golang #backend #softwareengineering #beginners #webdev #programming #opensource #devops #careerchange
&lt;/h1&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>learning</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
