What sacrifices have you made in life?

Daily writing prompt
What sacrifices have you made in life?

I’ve made plenty of choices where I wanted two things incompatible with one another and chose one. I don’t feel like any of that was a sacrifice, I treat it as a choice.

For example, I returned to the university in my late 20s way outside of the ordinary university age because I realized I had too many gaps in my coding & engineering skills. In the following years, I combined full-time office work (with flexible hours, thanks to my former boss) with a relatively demanding education. It’d be common to leave home before 7am for a morning lecture, drive to work, work for 6-7 hours, and then go to the university for an evening session. But although physically exhausting, it felt great and I had a purpose. It was worth the effort.

I’m trying to not look at the loss after a bad choice with too much emotion when possible. The reason is primarily work. When deploying a new change, there’s always a risk that I overlooked something and caused major harm. You need to be willing to do these things despite the possible negative outcome, otherwise you won’t ever move. Many if not all of the beautiful things in life are hidden behind a wall of risk – choosing a career path, falling in love, having kids, investing. So many things can go wrong at every step. This is not a reason to stay home and not make any steps. Once things go wrong, revert (if possible), identify what’s affected, write a plan, execute, learn, and move on. This is an oversimplification taken from the software world but I believe in it.

So no sacrifices for me. Choices.

How hiring people motivated me to grow

Daily writing prompt
Describe a decision you made in the past that helped you learn or grow.

In the early 2000s, I was a new and ambitious software engineer with very little theoretical knowledge. Worked as a webmaster, which included front-end, back-end, databases, and a bit of systems work, all with Microsoft products. My confidence didn’t match the realities of my actual knowledge. Something happened and 2-3 colleagues quit in the same year, leaving me as the most senior developer, despite my young age and limited knowledge. I had to hire replacements. So, I found some article that said that I should only hire people who are better developers than me. It said that “A people hire A people, B people hire C people” (attributed to Steve Jobs). I took that meme very seriously. The folks I hired were so good that I needed to step up my game significantly to remain relevant. In the process of learning, I decided to go back to the university and get a Master’s degree in Information Systems from Sofia University.

I’ve done some hiring work later and found loopholes in this rule (so did others on Hackernews). Looking for people who are significantly more competent than the hirer opens the gates to masters in BS language (link to a post from January on the subject). If I discuss an area where I’m not particularly knowledgeable with a candidate, the candidate could fool me by using impenetrable language, specific to that technology.

Over time, I changed. I currently believe that:

  • The ability to explain past work would be a top skill during a hiring interview, closely followed by soft skills
  • Every single person on the planet would be better than me at something and I’m just a few questions away from figuring out what that thing is

Despite that, I did hire some good folks, and they motivated me to learn and improve. Maybe not the most impactful choice I made in life but quite good.

If you could have something named after you, what would it be?

Daily writing prompt
If you could have something named after you, what would it be?

I wouldn’t mind a great-grandchild named after me. My name is cool and means happy, or happyin. Not sure where the in came from but it appeared at least a century ago.

Apart from that, perhaps I would name after myself the rule to not deploy important software changes last thing on Friday. Some things are better done at the beginning of the day.

The probability of introducing a problem is greater at the end of the day, and greater at the end of the week when you’re tired. The probability of a problem being discovered when fewer people are around is lower. Weekends also make resolving issues more difficult – critical people might be out of reach or might be surprisingly upset that you reached them.

Partial rewrites

Every complex software system tends to have sub-systems that are in the process of being rewritten but stuck in limbo. I call this myself the Hydra, although it’s a term that doesn’t exist outside of my head.

Generated with imgflip.

The subject of second systems deserves a full essay but while I sit on it and finish the books I have in mind, let’s enjoy this gem from Artur’s blog:

A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.

Gall’s law

A measure for good code

Today we discussed with a colleague what is good code and what isn’t. We somewhat agreed that good code is code that can be understood and changed by people who aren’t the author. Hours later, I found this quote in the book I’m reading and wanted to share it:

The true test of good code is how easy it is to change it.

Martin Fowler, Refactoring

There’s code people understand, change, and create a mess. There’s code people understand, change, and don’t create a mess. There’s code people don’t understand and don’t change. It stays perfect until somebody decides to start over and create a two-headed Hydra because they see no other way.