Skip to main content

Goodbye Software Developers, Hello Automation Engineers

· 7 min read

AI is going to take all the Software Developers jobs. That's what they say. There is some truth to that. Like many professions, Software Development has many facets, and many different activities to perform. Saying you are 'in Software Development' is about as meaningless as saying you are 'in Business'. Different people in the profession focus on different activities. Today's AI is very good at certain things, and very bad at others. Software developers who primarily focus on the activities that AI is good at will be replaced, mercilessly. The rest will not. Instead they will get even better, because they now have a better tool at their disposal. The true value that software developers provide are skills and activities that have been valuable to human civilization since its inception.

Smash the Test Pyramid!

· 10 min read

For many years, the Test Pyramid was (still is?) the de-facto model for formulating the testing strategy for your software system. But it's not perfect, and if you are focused on the wrong aspects of it, it could be doing you more harm than good.

Machine Learning for Programmers - Part 1 - The Fundamentals

· 10 min read

Machine Learning and AI can be a daunting domain. There is a lot of advanced math, new technical terms, and low level hardware that a typical programmer may not be familiar with. Some of the things an 'AI system' can do can seem like magic. The scale of some systems can be enormous. Models can have billions of nodes or parameters.

Observability, Testability, and Encapsulation - Opposing Tensions Shape Good Design

· 8 min read

There is so much to learn to become a good software developer. Once you get past the technical hurdle of mastering all the tools, frameworks, and languages you need to just make something work, there is still a whole world of system design and engineering practices to learn. Much of this material is not as straightforward. Everything has tradeoffs, and the right answer for how to design something is often 'it depends'. You will find differing opinions about the best way to do things. Many of the concepts and goals for building good systems can seem to be in opposition to each other. Encapsulation is a software engineering principle that encourages you to hide details. Observability and Testability are software engineering principles that encourage you to expose details. But that opposition is not a bad thing. Opposing forces lead to equilibrium, and that is a wonderful place to be. Let's take a look at how the combination of these practices can help us build better systems.

Natural Language is a Bad Way to Communicate

· 9 min read

There is a general push in the software industry towards using more natural language. Generative AI tools allow people to build software using natural language. Behavior Driven Development methodologies use natural language to shape requirements and write tests. This allows more people to participate in these activities. You don't necessarily have to become an expert in a programming language to meaningfully contribute to a software project or communicate with software developers.