Latest articles

Subscribe via RSS

  • Changes to Pybites in 2026

    ·

    ·

    2 min read

    TLDR After almost 6 years of coaching together through Pybites, we’ve decided to sunset the PDI and PDM Programs. We’re choosing to focus on our unique strengths and provide our own coaching services outside of Pybites: We’ll be better coaches when we each go deep on our own thing. Most importantly, and to clarify, Pybites isn’t going away. The blog, the community, and the coding platforms (Python and Rust bites) are all staying as is. We’ll still be committed to supporting these products and being present within the community. What this does unfortunately mean is that we’re also discontinuing the weekly newsletter and…


  • Adding AI to legacy code doesn’t have to be a challenge. Many devs are hearing this right now: “We need to add AI to the app.” And for many of them, panic ensues. The assumption is that you have to rip your existing architecture down to its foundation. You start having nightmares about standing up complex microservices, massive AWS bills, and spending six months learning the intricate math behind vector embeddings. It feels like a monumental risk to your stable, production-ready codebase, right? Here’s the current reality though: adding AI to an existing application doesn’t actually require a massive rewrite.…


  • A realisation about my son’s basketball team reminded me that we should never be ashamed to ask for help, or better yet, seek formal coaching/support. Last year, for two straight seasons, my son’s team got absolutely smashed on the court.  They had the energy and the determination, but they were effectively running in circles without any real guidance (and I’m definitely not a basketball player!). Sound familiar? It should! It’s exactly what it feels like when you can’t figure out where you’re going wrong, stuck in tutorial hell or banging your head against a wall trying to architect an application by…


  • How do you know if you’re actually growing as a dev? Last week I was chatting with a developer who’d hit a wall. (I talk to a lot of devs now that I think about it!) Like him, you might consider yourself a scrappy coder. You’re an all-rounder, can generally figure things out and write some sort of scrappy script to solve a problem. It’s actually a badge of pride! I myself have a bunch of scrappy scripts running in my home lab to do various things. The thing is, sometimes this confidence we feel being scrappy, may actually just…


  • There are few things in software engineering that induce panic quite like a massive git merge conflict. You pull down the latest code, open your editor, and suddenly your screen is bleeding with <<<<<<< HEAD markers. Your logic is tangled with someone else’s, the CSS is conflicting, and you realise you just wasted hours building on top of outdated architecture. It is easy to think this only happens to juniors, but it happens to us all. Case in point – this week it was the two of us butting… HEADs (get it?). When you code in isolation, you get comfortable.…


  • “Rust is too hard.” We hear it all the time from Python developers. But after building 60 Rust exercises specifically designed for Pythonistas, we’ve come to a clear conclusion: Rust isn’t harder than Python per se, it’s just a different challenge. And with the right bridges, you can learn it faster than you think. Why We Built This Most Rust learning resources start from zero. They assume you’ve never seen a programming language before, or they assume you’re coming from C++. Neither fits the Python developer who already knows how to think in code but needs to learn Rust’s ownership…


  • The issue with traditional performance tracking is that it is often an afterthought. We treat performance as a debugging task, (something we do after users complain), rather than a quality gate. Worse, when we try to automate it, we run into the “Noisy Neighbour” problem. If you run a benchmark in a GitHub Action, and the container next to you is mining Bitcoin, your metrics will be rubbish. To become a Senior Engineer, you need to start treating performance exactly like you treat test coverage. The Solution: Continuous Performance Guardrails If you want to stop shipping slow code, you need…


  • ,

    The Vibe Coding trap

    ·

    ·

    3 min read

    One of my readers replied to an email I sent a couple of weeks ago and we got into a brief discussion on what I’ll call, Skills Erosion. They brought up the point that by leaning too heavily on AI to generate code, people were losing their edge. It’s a good point that’s top of mind for many devs. I’m guessing you’ve thought about it too. After all, if AI writes all of our code, how are we actually learning anything? The exchange made me go down a rabbit hole and I found the data quite interesting. We all know what Vibe…


  • Most Python web frameworks make you choose between testability and convenience. You either have clean code with complex test setup, or you use global state and hope your tests don’t interfere with each other. FastAPI’s Depends() solves this elegantly. Here is an example how you would use it in your API: What’s happening here: Type-safe – Your editor knows repo is a SnippetRepository. Full autocomplete, type checking works. Automatic cleanup – The context manager ensures the database session closes, even if an exception occurs. No global state – Every request gets its own session. No risk of one request interfering with another. Testable –…


  • I interview a lot of professionals and developers, from 20-year veterans to people just starting out on their Python journey. But my conversation with Asif Pinjari was different. Asif is still a student (and a Teaching Assistant) at Northern Arizona University. Usually, when I talk to people at this stage of their life and career, they’re completely focused on passing tests or mastering syntax. Asif on the other hand, is doing something else: He’s doing things the Pybites way! He’s building with a focus on providing value. We spent a lot of time discussing a problem I’m seeing quite often…