The Non-Tech Manager's Guide to (Legacy) Software Development

In my previous post, I explained why you need automated tests. It's cheaper, and more fail-safe. But not all tests are equal. And there is a place for each type of test. In this post, I will try to explain the basic types of automated tests in software development and lay out their use cases with advantages and disadvantages. Unit Tests Most developers are introduced to automated tests through unit tests. The role of unit tests is to test a single unit of code. What exactly is understood by a unit of code isn't clear. But a…

Automated tests come in all shapes and sizes, but the main idea behind it is that you can run a suite of tests on your software by clicking a button. This suite of tests then provides certain input to pieces of your software and verifies that the output is what it should be. It serves as an easy health-check of your application. One could say that writing software like this is a more scientific way of writing software. Instead of assuming the software is doing what it should, we set up a hypothesis and prove it right.…

Have your developers ever mentioned technical debt? Or are you wondering if you have technical debt? Are you interested in doing something about it? Is it even necessary to do something about it? Let's first have a look at what technical debt is. Wikipedia defines technical debt as: Technical debt (also known as design debt or code debt) is a concept in software development that reflects the implied cost of additional rework caused by choosing an easy solution now instead of using a better approach that would take longer.Wikipedia This is in fact a great definition. When…

Do you often hear your developers talking about legacy code? Most likely in a negative fashion? Let's take a moment to look at what legacy code is and what developers mean when they mention it. Definition There is no "official" definition of legacy code. Michael Feathers defines it as "code without tests" in his book "Working Effectively with Legacy Code." Others talk about "code inherited from others," or applications that run on unsupported platforms. I believe that neither of these definitions are what most developers mean when they talk about legacy code. While these can be characteristics…