© Manish Choudhary. All rights reserved.

    All posts
    journey
    backend
    devops
    open-source

    My Developer Journey: From Building Apps to Understanding Systems

    Manish Choudhary
    Thursday, October 22, 2026
    3 min read

    My Developer Journey: From Building Apps to Understanding Systems

    I'm studying Information Technology at North Eastern Hill University, but I don't want my learning to stop at completing coursework or getting an application to run on my laptop. I want to understand how software is structured, deployed, debugged, and kept reliable.

    The fastest way I've found to learn is to build something, hit a problem I don't fully understand, and investigate until I can explain the cause—not just copy a fix.

    Building Relay

    Relay is my real-time messaging application. It combines a TypeScript and Node.js backend with Socket.IO, database persistence, and a React frontend.

    Getting it deployed was a different challenge from getting it to work locally. I worked with Docker, Nginx, AWS EC2, HTTPS, and GitHub Actions to build a repeatable deployment flow. I also load-tested the API to get a baseline for throughput and tail latency.

    The useful lesson wasn't that one benchmark number proves a system scales. It was that performance needs to be measured under a defined workload, and that the results only mean something when the test conditions are clear.

    Learning Through Open Source

    Contributing to Kestra gave me a different kind of problem: working inside a codebase I didn't design. I merged fixes for stale unsaved-state indicators after restoring a Flow revision and for nonfunctional time-range filter selectors.

    That work required following existing component behavior, understanding how state moved through the UI, and making a targeted change without casually rewriting surrounding code. It's a useful discipline for any engineer joining an established team.

    Going Deeper on Backend Engineering

    I'm now exploring the parts of backend systems that become important when things fail: retries, idempotency, queue processing, caching, request coalescing, timeouts, and observability.

    My current project, Slivx, is a TypeScript webhook infrastructure engine. I'm using it to learn about reliable event delivery, attempts, leases, and recovery when a destination is slow or unavailable. I want the implementation and its failure cases to teach me more than a diagram alone could.

    How I Want to Learn

    I try to follow a few principles:

    • Build, then measure. Test behavior and performance instead of assuming an implementation is good.
    • Understand failure paths. Think about timeouts, retries, duplicate work, and partial failures—not only successful requests.
    • Read real code. Open-source repositories expose design decisions and edge cases that tutorials often skip.
    • Explain the trade-offs. If I choose an approach, I want to be able to say why and what it costs.

    What's Next

    I want to keep improving my backend and DevOps fundamentals, contribute to more real-world codebases, and build projects that demonstrate sound engineering decisions.

    I'll use this blog to document the work as it happens: the architecture, the mistakes, the measurements, and what I change after learning more. The aim is to share honest engineering notes—not to claim I've solved problems I am still learning to understand.

    Back to all posts