You and your friend are walking by a magic store and find a trick coin. You have no clue how biased the coin is, and decide that all possible levels of bias are equally likely. In order to estimate the level of bias, you toss it 14 times and end up with 10 heads. Your … Continue reading Bayes vs Frequentists – An Empirical Test In Code
When Feature Flags Do And Don’t Make Sense
Over the past years, I’ve worked in multiple teams adopting very different strategies when it comes to feature flags. I’ve seen the pros and cons of both, and over time, I found myself disagreeing with any fundamentalist position on their use. There is a lot of nuance to this topic, and I think it is … Continue reading When Feature Flags Do And Don’t Make Sense
The Birth of Legacy Software – How Change Aversion Feeds On Itself
Here's a common pattern that I see play out very often in software teams: There is a need to change the existing system behavior to accomplish new functionality. The software engineer looking at the task realizes that the existing design isn't well suited to the change needed. They suggest design changes and refactoring, as part … Continue reading The Birth of Legacy Software – How Change Aversion Feeds On Itself
Abstractions Are In The Eye Of The Beholder
One of the most common debates I see, is on the right level of abstraction to use when coding. The line between over-engineered and unnecessarily-verbose is a very fuzzy one, and is the source of never-ending debates. Unfortunately, this debate is unlikely to ever get resolved. For one simple reason. The correct answer is both … Continue reading Abstractions Are In The Eye Of The Beholder
Nuances of Overloading and Overriding in Java
I've been programming in Java for over half a decade, and thought I knew how overloading and overriding worked. It was only once I started thinking of and writing up the following corner cases, that I realized I didn't know it nearly as well as I thought. In an effort to gamify these nuances, I've … Continue reading Nuances of Overloading and Overriding in Java
Alert Fast
A dichotomy I often see in many different teams and projects, is the dilemma between “failing fast” and “failing gracefully.” Here’s a simplified example of what I see far too often, and gets to the core of the dilemma. public String generateGreeting() { try { return “Hello ” + getName(); } catch (Exception e) { … Continue reading Alert Fast
Hiring is Broken And Yours Is Too
I can't keep track of the number of articles I've read about hiring in the past few years. Inevitably, they all follow the exact same format. First, they claim that hiring is broken. Next, they describe the hiring practices used by XYZ company. The present an extremely thorough analysis of every possible way in which … Continue reading Hiring is Broken And Yours Is Too
SSH Considered Harmful – Why You Should Be Using Persistent Sessions
No, there hasn't been any new vulnerability found in SSH, nor am I denying the usefulness of SSH as a building block in the dev toolchain. This article is about why you shouldn't be (and how you can avoid) using raw SSH sessions for development work. Here’s a little story. I spent many years working … Continue reading SSH Considered Harmful – Why You Should Be Using Persistent Sessions
Cracking the Senior Software Interview
The following is a post which I found on the Blind app. It covers all the preparation and experiences of someone who received multiple job offers from the best tech companies, including multiple offers in the range of $550,000/year. Because it can only be accessed via the app, I have copied it in its entirety … Continue reading Cracking the Senior Software Interview
Rethinking Software Testing: Perspectives from the world of Hardware
The conventional view of Software Testing The hardware and software worlds may seem poles apart, and in many ways, they indeed are. But there’s a wealth of knowledge that each can learn from the other. Despite the seemingly massive differences in the final product, they share more in common than you might expect. Computer engineers … Continue reading Rethinking Software Testing: Perspectives from the world of Hardware