Do you remember the RAM Disk?

Not so long ago, I joined a software modernization project where my initial goal was to increase transparency, by giving better insight for the client and for management about the work that is being done by the team. When you re-engineer parts of the application or move them to a different technology stack, it is pretty hard to get a grasp on what is left to be done and what is finished.

My plan was to go through each commit the dev team makes and extract a set of metrics or indicators if you will that we expect to grow or to shrink in time, so the plan was easy

  1. Get the history of the dev branch
  2. For each commit on the branch
    1. Download the changes
    2. Run analysis

The output was a CSV file that included the metrics per commit, over which it was really easy to plot some charts, but I wasn’t really happy with the outcome.

They had more than 400 commits and that point, each state contained more than 10000 files, so running the application had to download and open about 4 million files, and took about 25-30 minutes. Now I know this doesn’t feel much, producing the data for commits in the past and from here onwards just complete with the new commits was the plan, and worked like a charm but, at that moment I didn’t had the analysis part set in stone so, I was still changing what to look for in each file.

My dilemma was to spare my SSDs life while speeding up the whole I/O part in some way, when suddenly, I heard a voice from the past giving me hope. It was whispering “raaaammm diiiisk!”

A ram disk is a great little utility that allocates a portion of your RAM, and exposes it to the operating system as a physical disk. I used this like 10 years ago as a security measure, when I was working in the casino industry. Our bootloader decrypted the application to the RAM and ran the app from there so anybody who disconnected the computer lost access to the readable files.

So I installed one and taddaaaaaa, the whole thing ran under 5 minutes.

A mixed skill level team can be the best option

I’ve seen a lot of times throughout my career, the request from clients to have a full senior development team on their software projects. While I can perfectly understand, from their point of view why this would seem as a good idea to have, honestly, I don’t feel that it is in their best interest, and I also saw it fail more times than it worked.

Now don’t get me wrong, there are project where you absolutely need this, but in regular projects a mixed skill level team would perform better in my opinion.

One of the issues you see hindering the very beginning of the project is a ton of strong opinions regarding tools used, third party packages, project structuring, heck even coding styles, etc leading to decisions done slower or not in a constructive manner.

Let’s not forget that somebody needs to take out the trash from time to time, and what I mean by that is, projects don’t always have exciting and complex tasks for every senior to work optimally. This can leads to situations where simple tasks are carried out by seniors who, in time, become less motivated and they can choose to leave the project. I take a motivated middle developer over an unmotivated senior every day of the week.

Developers don’t tend to like being on the same project for a very long time and in multi-year projects you might be better of ramping up middle developers, who in a few years can take over the more tough tasks from seniors, and you can let seniors pursue more interesting projects.

I was the technical lead on a project that ran for 5+ years having 20+ developers in multiple different feature teams. I managed to convince the client to try out having mixed skill level teams, which not only balanced their monthly budget, but also helped us with recruitment, migration, and improvement of several colleagues.

Happy New Year!

So what am I doing here?

To be perfectly honest, I’m not so sure. Lately i started to reflect on software craftsmanship a lot, not only regarding my own career, but also through discussions I have with more, and with less experienced colleges.

Since these topics are interesting, I though there might be others out here that would enjoy this, so i immediately thought about you, my dear reader who might be taking the same turns in your own roller-coaster ride called “career” as me.

I don’t know everything, god knows there are some days i feel like “i don’t know anything!”, so i’m not promising you wisdom or advice, i can only offer my own view and experience about some of the practices, situations, methodologies and struggles that one might encounter while working as a software developer.

I hope my posts will be useful or at least entertaining, otherwise they would be useless as Manoj Bhargava would put it. See you soon!