
Intro
In this post I will discuss my perspective on working as a software developer in the AI age and what it means. I will talk about how it was to look for a job first and how that changed, too. I don't mean it to be a rant, but it may become one in some places.
Looking
When I left my last job I did it without considering my next one. I just knew that it was pointless to keep working there, since it was all meetings and no code. I am a software developer, so what was I even doing in those meetings anyway? So I left. It also was a legacy code company, so I haven't learned anything remotely interesting in the last 6 years.
Then I took a break. I mean, who wants to search for a job in November, right? Waited for Christmas to pass, then I went on a vacation in Africa - it was nice, then I started to look for a developer job.
Shock!
Not that I didn't know, at an intellectual level, that things have changed. I try to keep up to date, at least at a consumer level of blogs and YouTube videos. I knew Covid and AI changed stuff, I just didn't understand the extent of the change.
For one, maybe one of the most important ones even if it doesn't sound so, is that recruitment is handled by HR people and technical people who have never seen the people they hire. Everything is remote. You talk to someone - with video if you're lucky, or on the phone, if you're not, then they pass you to another person who does the same in a different day, a different context. It's like a gauntlet of remote conversations. I could have Xi Jinping next to me telling me what to say and none would be the wiser.
Now, this is a consequence of Covid, not AI. There is an entire field of complaints about how AI does the initial screening based on resumés created by other AIs and so on. That was inevitable and I don't intend to talk about that. The problem I am explaining is that people who don't meet people are evaluating people. Even when you sign the contract you do it digitally, you don't shake anyone's hand, you just ... plug in.
What does it mean? It means people can - more than before - behave like keyboard trolls. They can lie to you with impunity, trick you or being total assholes. What are you going to do? Smash the monitor? Tell them off? That's why I went through several interviews for a company that - as I later found out from one of the employees - had a hiring freeze and were only permitted to hire from India. Why? I have no idea. I think they asked me whatever they wanted to know and were happy someone educated them. There is absolutely no emotional connection between you and the people who hire you, there is no opportunity to "get a feel" for a person unless what you get from the upper body video and whatever passes through each other's headphones.
Then there is the technical interviews. Before all of this, in the before times, people had no idea how to hire technical people. Nowadays, they REALLY have no idea, because they don't actually understand what they are hiring them for anymore. What value does a coding task have if a machine can do it already? Before it was things that you could just look up on Google and get the information on how to do it, if not a code snippet. Now you just ask any decent model to write the thing for you and it spews out exactly what they wanted.
As for what they ask you? High performance distributed cloud applications using microservices. The what?! It's like they all learned to ask for the same thing. The joke is that their applications are rarely so distributed, they are cloud applications in the sense they are served in Amazon Cloud instead of on their machines and they are almost never high performance. As for microservices? They are done as often and as right as Scrum is. I will leave it at that. All that in a climate where trendsetters are moving away from microservices.
It was basically a crap shoot, and if you are reading this while searching for a job, first of all condolences. Second of all, it's all luck. You obviously find some holes in your education that you need to fill or have to learn some new things, but what you know barely matters in this process. Thing is, it used to matter and who you were as a person also used to matter. Now all that is out the window.
Finding
As it often happens with me, I failed getting hired by every company I was reasonably confident I did well in the interviews for and got hired by the one where I was certain I had failed.
It's a nice company, too, with nice people. It does have microservices... somewhere, but I am not working on those.
When I started searching, I was looking for a decent job - money was not really an issue - in an office. I don't love people that much, but after years of doing everything remote, I kind of miss them. In the before times, one would dream of a job where you didn't have to spend 3 hours preparing for and commuting per day. Now, good luck finding one where they ask you to come to the office.
This company reluctantly and kind of apologetically said they require people to come to the office one day per week. Kind of low, but OK. Also, I can be hired as a contractor or employed, but they prefer contractor. I was kind of tired of doing invoices and stuff, but OK. And if I am a contractor, I don't have to come to the office at all.
So basically I am doing remote again!
Working
So how is work? Well, there is a lot of AI. You can ask AI about anything. Even here there is a framework that increasingly moves toward "the box". I talked about this before. It's the artificial employee. Instead of you interacting with it, it interacts with you. It's a subtle distinction, but it's the difference between a person being assigned to a task and getting help from an AI assistant and the AI working on the task itself and occasionally asking you for help with a review or question it needs answering.
We're not there, yet, though, so I asked if we were doing Scrum or Kanban. Scrum, obviously. Only the manager plans the sprint and if you don't have anything assigned to you, you can pick whatever there is in the backlog. How is that Scrum? Don't know. But frankly, I didn't mind. I came with new employee energy, took all the unassigned tasks, put the AI to work on them, reviewed them, came with advice, refined the results, created the PR and boom!
You used how many tokens?!?!
Yeah, that happened. After boasting how AI first they were, they were also kind of shocked someone used AI to the max. OK, maybe I exaggerated a little, you know, but I was experimenting.
You see, working with AI is kind of like becoming the mentor of a junior developer with encyclopedic knowledge. It knows how to do individual things, but it doesn't know why. And you can use different agents, but the balance comes as "can you be clear enough so that a cheap agent does the job or can you afford the expensive one who understands nuance?".
Personally, I am on a fence with this. I prefer to use the best engine at all times, even if I waste a lot of money, rather than have to refine the work of a lesser model or be afraid it messed something up or missed something or spend the same amount of money because I had to retry a few times. But I am also against wasting resources. I think this will become moot soon, as models will all move towards Mixture of Experts mode and make the choice themselves.
Anyway, I haven't written one line of code in a month. I am telling the AI what to do, I am reviewing, and it's good enough. I even learn new things from it, too. The bottleneck has changed, it's not the code anymore, it's the attention and the code reviews. Yeah, yeah, attention is all I need, ha ha!
But this also means I have to change. For example I did something today that would have felt idiotic a year ago. I took all of my Pull Requests - the one approved and merged, mind you - and started looking at the code to see if there is anything I can learn or understand from it. It's "my" code, but I needed a second pass - well, a tenth pass - to make the reviewing about learning rather than about finding issues or improvements.
Sometimes it feels like magic. You tell the AI "hey, I don't understand what this guy means in the Jira task!" and the AI goes "Oh, it's about this part of the project, he wants to do this, and that can be done via this method and I wrote the code and what do you think?" or you tell the AI to take the current branch, understand the independent changes and their purpose, then create different branches for each, then generate a PR with a description of what they contain and what they are doing. There is no need to use git or GitHub. It's easy to get carried away and forget that this level of AI assistance requires a scan of the entire application. Also that it doesn't mean it knows more than you or that you don't have to understand and learn that shit, quite the contrary.
It feels like... SQL, to be frank. There you also have to write declarative code and optimize on cost.
Even if you use it all the time, you must never trust the output of AI, just like you would not trust the output of your colleagues when you review their code (he he!). Sometimes it's easy to say "hey, that guy can code, I can just approve his stuff", but if they had a bad day, you just approved bugs.
That is why, just like in the development cycle design -> implement -> test -> refactor (yeah, I am standing by it, as I did for the last 30 years. If you don't like it, budgeting department or middle manager, then that's on you. Refactoring is not a dirty word!) now we must consider a personal development cycle understand -> prompt -> implement -> learn.
The AI infrastructure adapts, as well. You start with skills and MCP, but at every task that you use it for, you have to ask yourself: can I build a permanent tool that will repeat this work rather than ask the AI? It's easy to tell the AI to do things, but if it needs to reason every time to do something repeatedly, that's on you.
Structure
The structure of the planning and implementing tasks has also changed dramatically. If in the past people would avoid refactoring because they didn't trust their own test suites and were afraid of bugs introduced by small manual mistakes in the process, now you can just instruct the AI to do a full refactoring, only checking what they did and what they missed. It maintains the testing suite, too.
Projects that were unimaginable before now become options. I don't think management caught up to this yet, but they'll get there.
I feel, and it's a feeling I have to admit, that creativity gets a boost with AI. Even if your shop refuses to change their ways and just go on writing new features and never refactoring or improving or innovating, they will be pushed out by the other who do. The monopolies relying on no one making the effort to write software from scratch that performs the same function as their crappy tech indebted dinosaur will crumble. Is that good for developers? I think so.
Conclusion
I keep learning, which is cool, and I am in that nice euphoric place that decent jobs give to newly starting people. I hope I don't sour on it too soon.
To mitigate that possibility, I am planning large research projects, starting with understanding the architecture of the entire company code, how it connects, how it works, then drill down. I want to make it an interactive app.
AI can help a lot with focused learning. Instead of trying to learn everything, you can ask the computer to do something then learn from what it did. It can also summarize large swaths of information, allowing you to drill down and up from any level.
I think the future of AI is bright. It's the humans that will have problems. But can we adapt? That's the big question. We've always managed to do it before, so maybe we will continue to do so.
I am glad I get to do the thing I love, coding, and with tools that improve my speed tenfold. But I can never allow myself to get complacent. If a lot of my output is now done by machines, I must redirect the mental capacity that previously generated that output to something else, equally if not more valuable.
Here is for a hopeful conclusion!