Friday, October 30, 2020 in ArticlesDon’t Make Me Touch Ordering! The PM thought the feature was simple. And it should have been. Unfortunately, it requires making a tiny change to payment processing. And payment processing is part of the Order system…which is one monster class. More than half of our code depends on Order to do something. Each part of that code depends on the Order for a different set of responsibilities. Although there are patterns, the Order class’s sheer size and number of responsibilities make these patterns hard to see.
Monday, August 31, 2020 in ArticlesMy Service Interaction Tests are Slow and Fragile! Any legacy system needs to connect with other systems. However, coding and verifying changes in your legacy system requires the following things. Simulate remote faults and verify your response. Verify that what you send to the remote system will cause it to do what you want it to do. Know when a release, rollback, or failover of the other system will change a behavior that you depend on.
Wednesday, August 26, 2020 in ArticlesI got a good legacy code question today in the Code by Refactoring Slack channel. We have a code module called the state machine which is poorly written and has no tests. We all (we the engineers) agree that we should rewrite the state machine from scratch. However, the current implementation ‘works’, and we are not adding states or other stuff to that module. Here’s the questions: a) Do we need to add tests (unit & integration tests) at all?
Thursday, July 30, 2020 in ArticlesMy product is written in the wrong language! Legacy systems tend to be old, and thus written in languages and frameworks that were available at the time they started. It’s no one’s fault, but the code is in the wrong language. This causes: Slow development. Difficult testing - my tech predates the TDD movement. Reinvention - libraries for new techniques are written in new languages. Difficult hiring - my tech predates most developers.
Thursday, June 25, 2020 in ArticlesI hate changing the database! Legacy databases present two challenges: Bad schema that is hard to change. Too much logic in the database. Both delay stories and generate bugs. Both waste your time and each will require thousands of person-hours to fix. We need to find a way to pay that cost incrementally; preferably divided among all the developers on the project. First let’s divide the problem in half by ignoring the logic for now.
Thursday, May 28, 2020 in ArticlesAll I want to do is edit the freaking document! Unfortunately, so does everything. CDocument is central to what we do. Users think of documents, and so does the UI. Every piece of code reads the CDocument class…unless it modifies CDocument. And now I need to unit test my code. Also, I want to ship my team’s code independently of the other team. But every single feature touches CDocument. Many of them change CDocument - or one of the 6 wrappers we have created around CDocument over the years to reduce changes to CDocument.
Wednesday, May 27, 2020 in ArticlesWhat do you hear with the terms “scaling learning?” The most common reaction focuses on the logistics. This results in many less-than-adequate web-based training programs. The idea of scaling learning also suggests that a LOT OF PEOPLE need to consume the learning. Developers may not like legacy code, much like instructional designers do not like wide audience delivery. Put together a nice little niche piece of learning? Fun! Make learning work for 100% consumption over a large audience?
Thursday, April 30, 2020 in ArticlesI changed a piece of code and 75 tests broke… It was a simple feature. I just added a GDPR approval checkbox when creating a new account. And suddenly half our tests broke. Tests for reporting, tests for core features, all kinds of tests for all kinds of things. Because every one of them needed to create an account. So I added a default to the test mocks. I updated lots of expecteds.
Wednesday, April 08, 2020 in Surviving DisruptionsImposed change on a global scale shifts how the world works. For example, the industrial revolution eventually replaced cottage industries with at-scale manufacturing. Similarly, the rise of the Internet shifted the meaning of expertise from what-you-know to what-you-can-find-and-apply. And now we are watching another global shift, from tolerating remote work to embracing it as a value. We are seeing the first glimmers of a new reality. Last week we wrote about mindshifts that are necessary to prepare your technical teams for the ways of working required by COVID-19.
Thursday, April 02, 2020 in Surviving DisruptionsIn the United States we are a month into the quarantine, give or take a little depending on your geographic location. Dr. Fauci, Director of National Institute of Allergy and Infectious Diseases, informs us that the infection rates will not truly curb until a vaccine is created. While J&J and other companies are working to deliver a vaccine, we know this is not a quick fix. Regardless of how many safety protocols they are ignoring to speed delivery.