Short Stories from the Life of a 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…

Comments

Leave a comment