*Note this isn’t intended to drag on offshore teams. I’ve worked with many of them, with varying levels of quality and success, over my career.

I’ve been reading a lot of well-informed and skeptical posts about AI and where it will play a part in the near and distant future. It’s a long read, but I’ve really enjoyed The Future of Everything is Lies, I Guess. One of the points it makes is that AI essentially is just putting a bunch of tokens together in a way that sounds like it makes sense, and it never actually does any real thinking. This reminded me of a role where I worked with an offshore dev team, and the quality of code we got from them was usually pretty good, but you often had to guide them in the right direction.

I mentioned there were several examples of numbers being used with no real context for what they meant.

for (int i = 1; i <= 5; i++) {
    //Do something
}

if (i < 10) {
    //Do something
    }

I brought up on the call that we shouldn’t have numbers like 5 or 10 just sitting around; it should be a named variable. I was expecting

final int NUMBER_OF_RESULTS_PER_PAGE = 5;
final int MAX_NUMBER_OF_RETRIES = 10;

I looked at the code a few days later and saw this:

final int ONE = 1;
final int TWO = 2;
final int THREE = 3;
final int FOUR = 4;
final int FIVE = 5;
final int SIX = 6;
final int SEVEN = 7;
final int EIGHT = 8;
final int NINE = 9;
final int TEN = 10;

Sigh, this wasn’t a case of malicious compliance, and they did technically do what I’d asked. This result, though, is something that I’d expect from a vibe coding tool.