Short Stories from the Life of a Developer

Tag: tech fiction

  • How I got deprecated by AI

    How I got deprecated by AI

    I used to be a brilliant developer. I could write beautiful code, understand stakeholders even before they spoke, and I was able to answer any question about our complex domain in seconds. Sometimes all at the same time. I could tell the history of every line of code in our projects — when it was written, why it was written, who modified it, and who wrote the best and worst version of it.

    I used to spend my evenings reading about how Java counts references to objects to dispose of unused ones. I used to discuss the differences between pointers and references in C++ over coffee. Man, I was living my dream.

    I had great conversations with my peers regularly. One day, I was having coffee by the water cooler when my colleague Shanya came along. She was mumbling something about wasting so much time trying to get answers from ChatGPT.

    • I should’ve googled it, like every normal developer. Stack Overflow, whatever…

    Back then, AI was pretty new, but people had already started fearing it would replace us all eventually. I wanted to get another opinion, so I said with a grin:

    • Hey Shanya, take it easy — in a few years, it’ll just be ChatGPT. No more us.
    • Yeah, right! — she almost yelled. — I can totally see ChatGPT setting up Service A, B, and C, Kafka and AWS queues, plus external CRM and payment integration every time Jim from Product wakes up with another brilliant idea — one that’s not even clear to him.
    • Sure, just tell it to ChatGPT and by lunch your idea will be in production.
    • He he, yeah, that’ll be the day.
    • Don’t worry, Miro. From what I’ve seen, it won’t be able to replace us anytime soon.
    • You’re safe for at least 10 years! — Shanya said.

    I must say I felt a little reassured, but I still decided to check the job market later that evening. I had a habit of browsing new opportunities from time to time, even when I wasn’t actively looking — but I hadn’t done that in a while.

    I was surprised to see how many developers were looking for jobs. Every open position had 100+ applicants. Hundreds of developers like me, searching. Had I missed something in the last few years?

    I explored the companies deeper. I found startups building very simple products. I installed some of them — they were really easy to use. Judging by the reviews, mostly young people instantly embraced and understood these tools. Literally products for a new generation.

    Some of these companies offered similar products and services to what my company was doing at the time. My company had over 1,000 employees. These startups? Five or six people total.

    I shut the laptop and went to dinner. I didn’t know what to think, but it seemed to me that companies with 10 employees couldn’t build serious services. Anyway, under my mantra #ForeverDeveloper, I decided to double down on sharpening my skills. All this AI fuss was just an empty balloon. AI would never reach my level of ninja developer.

    And indeed, over the next year, I mastered Kotlin and Spring. I could talk about JVM internals like people talk about the weather. You could’ve woken me up in the middle of the night and asked about lambda expressions — and I’d know the answer.

    But during that year, I also noticed changes in the company. I saw more and more new colleagues without any deep knowledge of a particular domain. Power users of hundreds of tools — not developers. None of us devs knew how to work with them. We made jokes internally, wondering what their role was and what they were even paid for.

    We didn’t know how to refer to them, so we jokingly called them Z vibers.

    But then we started to notice how well they handled business people. Tech and business had always felt like two separate worlds. Our Z vibers were the ones finally bridging that gap. They could talk about tech with business — and business with tech. And somehow, we understood it. It felt natural.

    In crisis situations, when we had to fix something fast, we ninja developers usually did something ugly, just to make it work. Fix now, improve later. But Z vibers? They were able to come up with beautiful classes and solutions, even in those chaotic moments. They contributed code I’d later study, wondering, How did this person come up with such elegant code, solving exactly what was needed, in such a short time?

    But my status as a ninja developer was still unshaken. I was learning new things. Reaching developer sensei level. I was safe.

    Until one day, I found myself looking for job opportunities. For real this time — not just browsing the market.

    It’s 2030. HR asks me what I can do. I say:

    • I can code.
    • Haha, phew! Even ChatGPT can code! But can you do something real?
    • You can ask me about JVM internals. Or lambda expressions.
    • Do you have any real skills?
    • No, I’m a developer. Senior developer.

    It’s 2030… or 2025? I’m not sure…

    Read the story from parallel universe here.

  • I am a developer. Senior developer

    I am a developer. Senior developer

    Everybody wants to be a developer. You get a MacBook, a kicker table at the office, free lunch, coffee and fruits and, if you’re lucky, you can even get a chance to work from your home most of the time. How cool is that?

    Because being a developer is so awesome, I was curious to explore a couple of days in software developers’ lives. From my view of the fly on the wall, being the most invaluable and insignificant employee on the team.

    Analysis and Synthesis are developers, senior developers. Everybody suspects they are Greek, but nobody ever dared to ask them. Our company’s Manifest of Seven Great Values strictly forbids conversations about nationality, gender, religion, sports or literature. In fact, the only things that the Manifest allows are conversations about weather, Netflix series and software engineering topics. We value freedom, diversity and openness, and that’s why these topics are forbidden.

    • It is raining today…
    • Yes, indeed. It also rained yesterday…
    • And the day before – someone would add.
    • No, I am sure I was fixing the deployment pipeline the day before. And I never fix the pipelines when it rains. – someone would reply.
    • Actually, I am not sure myself. I spent the whole day watching Netflix.
    • I hope it will not rain tomorrow…
    • Why?

    These kinds of talks were happening by the water dispenser.

    Soon after the morning chat, it was time for daily standup. The team went to their desks and then met in the Slack room for a meeting. Besides Analysis and Synthesis, there were two more developers – Greeny and Pushy, product owner Prodo, and scrum master Scrumico.

    • Good morning, team! – Prodo started – I hope you had time to rest and you are ready for new challenges. Because we have a new requirement and a big challenge ahead. Yesterday evening I was approached by the finance team, and they brought to my attention the difficulties they have with inconsistent address format in our orders. At some point, our fellow Shouldy decided to make an address field in the orders table a free text entry, and that makes it hard to create data analysis for the finance team. We will have to find a way to split this into separate fields: street, number, zip code and city. And we have to treat this with the highest priority. What do you think, team?

    The awkward silence broke out in the virtual room. Here and there some ‘Hmmm’ could be heard.

    Shouldy was also a senior developer. He spent an extremely long period at the company, somewhere between 2.5 and 3 years, and he designed most parts of the application. His name could be heard very often among current members of the team, what he did well, but mostly what he did wrong and how he succeeded in blocking 80% of all further development even after he left the company.

    • I think this opens up a lot of questions – first started Analysis. – What should we do with existing data which is all contained in a single field in who-knows-what format? Besides reports, we need to change the user interface. What about the validation? We should allow input of only valid zip codes and cities. Maybe there is some external service for validating if the street exists, maybe from the National Post?
    • Hmmm… – Synthesis added.

    Another round of awkward silence. Luckily, Scrumico had a suggestion.

    • Hm… I remember the customer service team did a similar thing some time ago. They faced a similar problem when trying to make a breakdown by city and region, so they added zip code to their reports. They might be able to help us.
    • Customer service has a completely different database and what they did was probably just adding a field in their SELECT queries – concluded Synthesis quickly.
    • Are you sure that’s what they did? How do you know this information? – Scrumico asked.
    • Well, not sure, but I assume – Synthesis confessed.
    • Ha! Never assume! One of the main principles of agile. Have you been visiting the agile workshops I’ve been organizing?
    • Yes, but I will apply again – said Synthesis, a little bit ashamed.
    • Anyway, I know who can help. I will send you the contact later, so you can ask about their experience and see if there’s something you can take away from there. – concluded Scrumico.
    • Good, that’s fixed – said Prodo. He had the habit of using that word ‘fixed’ so it seemed like he was actually always fixing something.

    After the daily standup, Analysis was still confused. So many questions he had were simply ignored and the ball was transferred to Synthesis. He wanted to discuss it with Synthesis, but not until he had everything sorted out in his head. So he started to investigate on his own a little bit, then he would align with Synthesis and get back to his own task.

    In the afternoon, Synthesis got a message from Scrumico: “Hi, sorry for my late response, I was jumping from meeting to meeting and didn’t have time to ping you earlier. You can contact Rupert from reports, he will be able to help you.” Synthesis had a feeling this was a waste of time, but he had to fulfill his prophecy.

    • Hi Rupert, sorry for interrupting you. I was told that you have recently added zip code to your reports, so you can make a regional breakdown easier. We are facing the same challenge and I was wondering if you could share your experience and maybe help us out. Thanks!

    After an hour and a half, Rupert answered:

    • What zip?
    • Did you add a zip code to your reports recently?
    • No
    • Did you have problems making a breakdown by city in your reports?
    • Yes
    • How did you solve it?
    • We added a postal code to our reports.
    • Ok, can you share your experience with that, maybe it will help us do the same? – Synthesis was already green in his face.
    • Sure, why don’t you simply ask clearly what you need 🙂 Have you been visiting structured communication workshops? You should check them out 🙂 But anyway, we added a field ‘postal_code’ in our SELECT queries.
    • So you didn’t need to normalize the database, or anything?
    • Can you repeat the question?
    • You already had a ‘postal_code’ field in your table?
    • Of course we had it, how would we add it if we didn’t have it?
    • Cool, thanks Rupert for sharing your experience, it was very helpful.
    • Always man :+1

    Synthesis had a feeling he already wasted a lot of time for nothing and the job needed to be done. So he decided to take things into his own hands. He made a migration to add new fields and then he took sample data and started looking for patterns. He was able to quickly come up with a couple of regular expressions to extract data into new fields. He made the migration script out of it. He was also good at JavaScript, so he adjusted the user interface in no time.

    Everything seemed in place and he felt a wave of joy and satisfaction for doing the job himself, without these unnecessary and fruitless back-and-forths imposed by others.

    He also added indexes for all new fields, so the aggregation and all the crazy joins that the finance team may come up with can be possible and even performant. He also added a few compound indexes to make sure all the combinations were covered. He gave his pull requests to Greeny, a young and smart developer who was still new to the company and mentored by Synthesis.

    Greeny had quite a few comments and suggestions about code formatting, forgotten block comments, unused imports, and shortening conditions using the coalesce operator. But those were just small things for a senior developer like Synthesis was. It was corrected in no time and pull requests were merged. Release was happening.

    Synthesis was happy he did the task so quickly. He went to take a coffee and talk about the weather. He even went home earlier because he felt he had accomplished his mission for today.

    All this time, Analysis was trying to find the answers to his questions, to be able to join forces with Synthesis and do the task together. However, there were many unknowns, so he did not have anything in hand to start the conversation with. Prodo was not able to provide any answers to the questions already asked. Prodo just mentioned that, whatever we do, we want to have the metrics to measure the impact of our change.

    Metrics! Now Analysis was paralyzed!

    Tomorrow morning, everything seemed normal. A bunch of people around the water dispenser, discussing the rain and some new Netflix show that was announced. Synthesis was still full of confidence because he solved the problem so easily and fast and, most importantly, by himself. Analysis looked already exhausted and ready for retirement.

    When Synthesis logged into his computer, he saw a dozen messages in the deployment channel in Slack.

    • Who added these new fields to the orders table?!?! The ALTER command took 4 hours to execute!!!

    Synthesis knew that the table was locked for 4 hours and no user could use the application during this period.

    And that was not all. Customer support had been receiving a lot of complaints about extremely slow application performance ever since the last release. Synthesis saw a message in the database channel:

    • Who added so many indexes on a table this big?!?!

    The primary instinct of a developer in this situation is: rollback. And Synthesis hit the button automatically…

    This time the service was down for 5 hours… but this time not due to the database, but that’s a topic for a whole other story…