RSSAmplifier

Blog

Iain Cambridge

The technical musings of Iain Cambridge.

iain.rocksRSS feed ↗10 posts

Latest posts

How to automate AI agents to read JIRA tickets and create pull requests

During my exploration of AI and code generation I created a series of guidelines for the AI agent to follow to allow me to automate as much of the process as possible. Here I will share a view of my guideline files that I’ve created. I have them separated to allow me to be able to have the agent do stuff while not doing all of the things I usually done, normally when I’m experimenting or trying to…

Design Decision: Technical Debt in BillaBear

Like any startup code there has to be decisions made about where you’re going to spend time working and what you’re going to leave for latter when you have the time and money to resolve the issues you choose to ignore. Here I’ll list what the current problems are to prepare for when I’m going to start resolving the issues.

Rejecting rebase and stacked diffs, my way of doing atomic commits

I recently learnt about atomic commits after spotting an unusual note on a pull request someone asked me to review. While I’m a bit embarrassed it took me so long to even hear about them, once someone explained atomic commits to me—and showed me the power of bisect when you’re using them, plus how much flexibility they give you with Git, was sold.

Finding broken migrations with Bisect

I just watched Pauline Vos’ “The Business of Bisecting” talk, and one of the questions from the audience really stuck with me. During the section on automating good/bad commit checks with a script, someone asked if git passes the commit hash of the previous commit to the script, which it doesn’t. But the question was the wrong one. The real question should be “Can you get the hash of the previous…

AI is a Junior Dev and needs a Lead

Using AI to help with programming is becoming increasingly popular as time goes on, with developers across the industry embracing tools like Junie, GitHub Copilot, ChatGPT, and Claude to accelerate their workflow. We’re seeing plenty of horror stories where things go spectacularly wrong - from subtle bugs that slip through code reviews to complete architectural disasters that require massive…

How to Create Unbreakable Job Security: A Software Developer’s Guide to Making Yourself Indispensable

So you want job security in software development. Whilst your colleagues build maintainable, scalable systems that any competent developer could understand and modify, you’re about to learn how to create complex systems that your organisation will never dare let you go. After all, who else could possibly understand the intricate web of dependencies you’re about to weave?

Creating Dynamic Billing Workflows With Symfony

One of the core concepts within BillaBear is creating workflows for events such as creating or cancelling a subscription and receiving payments. There are often many things that need to happen during these process and if one fails you don’t want to carry on with the others until the failed process is fixed and you want to be able to continue a failed process with ease instead of complex…

The Reality of Not Invented Here

When I first heard of Not Invented Here (NIH) as a junior developer, I always thought it meant that the company wouldn’t use anything external. I thought it would be a case that every tool would be developed internally. I thought it was going to be driven purely by ego that they thought they could do better. And for a long time, I thought I never worked somewhere that had that problem. The reality…

Design Decision Separate Dtos

One of the decisions that had to be made early on was how to handle the input and output for the API endpoints. There are a few options such as serialising the entity and serialisation configuration is used to decide what is shown and when. Another option is to create a defined DTO that defines what should be there.

Design Decisions:Throw Custom Exceptions

Decision