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.…
Tag Archive
python
-
-
3 Questions to go from thinking like a Scrappy to Senior Dev
·
·
2 min readHow 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…
-
How Even Senior Developers Mess Up Their Git Workflow
·
·
4 min readThere 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.…
-
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 missing 66% of your skillset
·
·
2 min readBob and I have spent many years as Python devs, and 6 years coaching with Pybites and we can safely say that being a Senior Developer is only about 1/3 Python knowledge. The other 60% is the ecosystem. It’s the tooling. It’s all of the tech around Python that makes you stand out from the rest. This is the biggest blind spot keeping developers stuck in Tutorial Hell. You spend hours memorising obscure library features, but you crumble when asked to configure a CI/CD pipeline. (That’s not just made up by the way – many of you in dev roles will have seen…
-
Try an AI Speed Run For Your Next Side Project
·
·
7 min readThe Problem I have for as long as I can remember had a bit of a problem with analysis paralysis and tunnel vision. If I’m working on a problem and get stuck, I have a tendency to just sit there paging through code trying to understand where to go next. It’s a very unproductive habit and one I’m committed to breaking, because the last thing you want is to lose hours of wall clock time with no progress on your work. I was talking to my boss about this a few weeks back when I had a crazy idea: “Hey…
-
Case Study: Developing and Testing Python Packages with uv
·
·
11 min readStructuring Python projects properly, especially when developing packages, can often be confusing. Many developers struggle with common questions: To help clarify these common challenges, I’ll show how I typically set up Python projects and organise package structures using the Python package and environment manager, uv. The challenge A typical and recurring problem in Python is how to import code that lives in a different place from where it is called. There are two natural ways to organise your code: modules and packages. Things are fairly straightforward in the beginning, when you start to organise your code and put some functionality…
-
Python generators provide an elegant mechanism for handling iteration, particularly for large datasets where traditional approaches may be memory-intensive. Unlike standard functions that compute and return all values at once, generators produce values on demand through the yield statement, enabling efficient memory usage and creating new possibilities for data processing workflows. Generator Function Mechanics At their core, generator functions appear similar to regular functions but behave quite differently. The defining characteristic is the yield statement, which fundamentally alters the function’s execution model: When you call this function, it doesn’t execute immediately. Instead, it returns a generator object: This generator object…
-
The Mutable Trap: Avoiding Unintended Side Effects in Python
·
·
5 min readEver had a Python function behave strangely, remembering values between calls when it shouldn’t? You’re not alone! This is one of Python’s sneakiest pitfalls—mutable default parameters. Recently someone asked for help in our Pybites Circle Community with a Bite exercise that seemed to be behaving unexpectedly. It turned out that this was a result of modifying a mutable parameter passed to a function. For folks new to programming it is not obvious why modifying a variable inside a function might cause a change outside of that function. Let’s have a closer look at the underlying issue. What is a Python Variable When considering variables…
-
Bridging the Skills Gap Across Africa with Pybites
·
·
4 min readWhen Bob and I first started Pybites, there was no way I could have imagined it’d grow to what it is today. Launching our first products was a massive moment for us both, not just because these were ways to sustain the business, but because we were actually HELPING people. People were coming to us and utilising our services to better themselves and their communities. The desire to help people and make some real change in the world become one of our core values: Lifting People Up. This value system has led to our very first partnership. The excitement we…