I have launched a new website, to focus on software development estimates. My goal is to put longer form and higher quality posts focused on estimates on the new website. I will still be posting here regularly on all things software. 

Software development is a massive multi-billion dollar industry, but our estimation practices are not great. Computer Science degrees focus on math and algorithms without any consideration of estimating projects as a core skill. Most of us in the industry work off of whatever our flavor of Agile practice recommends whether its Scrum, Kanban, SAFE, etc. My goal is to research what we know about estimating software projects, and develop simple ways we can use that in industry. The goal is to do a combination of popularizing better techniques and developing a recommended style of performing estimates. 

Check it out at!

People have given up on performance in favor of Scalability

Scalability has been all the rage since the cloud made horizontal scaling easy. No longer do we have to order parts, lease colo space or rack servers. Instead there is an infinite supply of Virtual Machines out there we can rent at the press of a button. Because of this there is a tendency to start development with an architecture that will scale well horizontally. My entire career has been during the post AWS period. Pre-mature optimization is the root of all evil, but make sure to create a stateless service so we can scale it up later when its slow.

Web Servers

Its interesting to look at examples of projects that did not focus on scaling horizontally.

For example we have stackexchange’s public numbers on their performance.

They claim that they handle up to 450 requests/s on 9 servers. From the infographic it looks like these are 1U or 2U servers with 64GB of RAM and although its unspecified I’m guessing they have 12-24 physical cores per machine. 

These machines have around 10 times as much RAM as the VMs my team runs in production and probably over 10x the cpu performance. They handle more traffic per server with lower CPU utilization. A rough estimate from these numbers is that the stackexchange .NET service is 2.5x to 10x as performant as my Java service. That could just be the bare metal vs Virtual Machine cost since our stack has significantly less CPU. 

You might think that stackexchange is operating at an absurdly low CPU utilization at 5%, but I haven’t seen anyone operating cloud servers above 20% utilization with a sample size of 4 companies. 

Big Data

This study was done comparing single threaded performance on a modern CPU vs distributed big data algorithms. 

Single thread outperformed distributed big data computations on many (most?) problems.

They found that optimized single threaded code outperformed distributed code in the datasets they tested. Admittedly, not all datasets will fit on a single machine. But we have to remember a single machine can now have over a TB of RAM and 100s or more TB of SSD. Single threaded performance is clocking over 5GHZ now. A single server can handle all your big data needs until your dataset exceeds dozens of Terabytes. 

I’m working on learning awk to experiment in this area. It is a relatively simple domain specific language for text processing and formatting. 

If you like my writing, please buy my book on Amazon.
The Sledgeworx Guide to Getting into Software

Matias Ergo Pro review + affiliate link

I had a Matias Ergo Pro mac version for about 3 years, purchased in May 2016. It lasted until the end of 2019 when the USB C port that connects the keyboard to the computer died. I bought the keyboard after I started getting pains in my fingers during a gaming phase. Using this keyboard with a vertical mouse eliminated my hand pain. 

The Ergo Pro is pretty solidly built, the wrist pads are comfortable. I replaced the wrist pads after about 2 years when they started to come apart. The two halves of the keyboard can be positioned to match your natural hand tilt which is very nice. 

The most annoying issue I have had with this keyboard is that it collects dust and crumbs over time, (years), and that can have an effect on the keys. Your keys will start acting up in weird ways. The first option is to flip over the keyboard and shake it out, then if that doesn’t do it. Take the keys off and really clean it. I don’t remember if it came with a key removing tool, but  its pretty easy to get the keys out, harder to get them back in. 

Disassembling the case is straightforward, it has two sizes of screws and my ikea set was able to do all of them. 

I’m pretty annoyed that my keyboard broke I would have kept using it. 

I strongly recommend the Ergo Pro for mac users with a desktop style setup. I used mine with a laptop and external monitor. The best features of the keyboard are its ergonomics and its custom mac keys. I’m using a more standard windows style keyboard now and I miss having my command, fn and option keys positioned so conveniently. 

Never get in the way of people with the momentum to get things done

Most of us have productivity swings. Some weeks you are energized and getting things done. Then the next project just seems to drag on and on. Slumps and burnout happen. But usually at least one person on the team still has some momentum going. 

Don’t slow them down. Do what you can to assist in their effort. Don’t think you have to operate as effectively as they are this week. It can be intimidating to see another person delivering more value than you. Don’t hit yourself thinking “If only I was more motivated I could outperform Jack.” 

Software engineering is not a coding competition. Success or failure is evaluated at the product level by our customers. Which member of your team delivered the most story points this sprint is complete irrelevant to customers. They don’t know and wouldn’t even care if they did. 

Customers care about what your engineering organization does as a whole. Which features are shipped, how stable is the service, how good is the user onboarding, these things matter to customers. You aren’t signing each line of code for customers to look at. They don’t have a favorite programmer on the product. 

Your goal is to enhance your team’s efforts as much as possible. That is achieved by following the momentum and supporting it, to get things done .