Sherman On Software Latest

  • The Never Rewrite Podcast, Episode One Hundred Seven: Rebuilding vs. Rewriting vs. Refactoring?

    The Never Rewrite Podcast, Episode One Hundred Seven: Rebuilding vs. Rewriting vs. Refactoring?

    This week, Isaac and I dive deep into an Allen Holub suggestion that developers should ‘rebuild’ instead of ‘rewrite’ software. Are we all saying the same thing? Is there some neuance between rebuilding, rewriting, and refactoring?

    If you’ve been wondering if you should even bother updating your legacy system, this is the episode for you!

    Watch on YouTube or listen to it at Spotify, Apple Podcasts, or your favorite podcast app, and let us know if you have ever been involved in a rewrite. We would love to have you on the show to discuss your experience!

  • The Never Rewrite Podcast, Episode One Hundred Six: How to Stop a Rewrite in Progress

    The Never Rewrite Podcast, Episode One Hundred Six: How to Stop a Rewrite in Progress

    It is all well and good to say “Never Rewrite”, but what do you do if you find yourself part of one?
    In this episode Isaac and discuss the steps and thinking that will help you stop a rewrite faster and safer than waiting for it fail.

    If you’re working on a rewrite and don’t know what to do, this is the episode for you!

    Watch on YouTube or listen to it at Spotify, Apple Podcasts, or your favorite podcast app, and let us know if you have ever been involved in a rewrite. We would love to have you on the show to discuss your experience!

  • The Never Rewrite Podcast, Episode One Hundred Five: A Core Engine Rewrite with Nick Gerace

    The Never Rewrite Podcast, Episode One Hundred Five: A Core Engine Rewrite with Nick Gerace

    Guest Nick Gerace discusses how he backed into a rewrite of the core engine at System Initiatives. Nick walks us through how and why his work to add plugins and package management ended with a new core engine that still lacks package management.

    If you want to hear about the philosophy and tradeoffs behind a successful rewrite, this episode is for you!

    Watch on YouTube or listen to it at Spotify, Apple Podcasts, or your favorite podcast app, and let us know if you have ever been involved in a rewrite. We would love to have you on the show to discuss your experience!

  • The Never Rewrite Podcast, Episode One Hundred Four: Iteratively Replacing Logging Infrastructure with Guest Paul Stack

    The Never Rewrite Podcast, Episode One Hundred Four: Iteratively Replacing Logging Infrastructure with Guest Paul Stack

    Paul Stack shares his experiences transforming his company from individual server based logs, to a unified log stream searchable with Grafana. Paul walks us through the stepwise iterations: going from single machine logs to aggregated, how aggregating the logs overwhelmed the service so they brought in kafka, how kafka made it difficult to restart, and so on. This story is pre-cloud and years before the concept of Open Telemetry; Paul’s deep dive sheds light on some of the very difficult problems that modern observability stacks make easy.

    If you’ve ever wondered about how aggregated logging systems evolved, this is the episode for you!

    Watch on YouTube or listen to it at Spotify, Apple Podcasts, or your favorite podcast app, and let us know if you have ever been involved in a rewrite. We would love to have you on the show to discuss your experience!

  • Context Required For Static Vs System Optimizations

    Context Required For Static Vs System Optimizations

    A static analyzer can go through code and find big-O type problems.  A developer can go through and refactor the code to make it run more efficiently.

    Neither of these tasks requires much context about the larger system.

    For example, a function can take a list of contacts and load each one from the database.  After loading the contact, it can then load each activity that the contact has done, one at a time.  This is a standard nested for loop with O(n^2).

    With no further context, you could modify the code to load all of the contacts in a single query.  You could then load all of the activity with a second query.

    From the perspective of querying the database, the function would go from O(n^2) to O(1).  The only context you would need to know is if N could be large enough to exhaust your software’s memory.  (There would still be O(n^2) work in memory to assemble the data objects, but that is negligible against the cost of DB calls)

    But if you had deeper knowledge you might realize that you don’t need the data in the first place.  No database calls are not only faster, but deleting the code is a whole lot easier than refactoring.

    AI and other tools make static type efficiency optimizations much easier; but they can’t ask “Should the code even be doing this?”  System context is where developers still shine.

  • The Never Rewrite Podcast, Episode One Hundred Three: Recognizing When a Rewrite is Failing

    The Never Rewrite Podcast, Episode One Hundred Three: Recognizing When a Rewrite is Failing

    What are the signs of a failing rewrite? This week Isaac and I discuss the signs to watch for when you’re on a team doing a rewrite.

    If you’re on a rewrite and wondering if the project is in trouble, this is the episode for you!

    Watch on YouTube or listen to it at Spotify, Apple Podcasts, or your favorite podcast app, and let us know if you have ever been involved in a rewrite. We would love to have you on the show to discuss your experience!

  • You Can’t Change Your Answers

    You Can’t Change Your Answers

    Without showing your work. 

    When you have customer reports, you will eventually want to change how and what you measure.  That’s fine!  You have to explain the differences. 

    Especially if the change is because the old system’s measurements were wrong.

    Your customers calibrated their business decisions around the old system. Changing it, even for the better, throws off their calculations. 

    Always improve your systems, and when calculations share, you need to overshare.

    Remember the golden rule of SaaS: Do unto others as you would have AWS do unto you.

  • The Never Rewrite Podcast, Episode One Hundred Two: Rewrite Stories with Guest Nick Stinemates

    The Never Rewrite Podcast, Episode One Hundred Two: Rewrite Stories with Guest Nick Stinemates

    Nick Stinemates from System Initiative joins us to discuss his experiences with software rewrites. We cover a lot of ground in the episode, from the difference between rewrites and refactors, the importance of incremental changes, and team dynamics during rewrites.

    If we’ve been confusing you about the difference between a rewrite, and iteratively replacing all of the code over time, this is the episode for you!

    Watch on YouTube or listen to it at Spotify, Apple Podcasts, or your favorite podcast app, and let us know if you have ever been involved in a rewrite. We would love to have you on the show to discuss your experience!

  • Rewrite Anti-Patterns: The Writeback

    Rewrite Anti-Patterns: The Writeback

    In my post, The Strangler-Fig Pattern Has An Implementation Order; Outputs First, I mentioned The Writeback Anti-Pattern.  Turns out, that this anti-pattern hasn’t been named and described before; so I get to be first!

    The Writeback Anti-Pattern is when a new Source Of Truth has to write data back to the legacy Source Of Truth because consumers are still getting data from the legacy source.

    The Anti-Pattern allows you to pretend that the new system is indeed The Source Of Truth, and the legacy system has become an adapter.  This is a lie that lets teams declare success and get the new system into production.

    The reality is that the new system is really just another bolt on to the old.  The new system now needs to transform all the inputs into the old format, creating tons of technical debt.  You have the data model you want, the data model you don’t want, and all the business logic in between.

    Another way to explain it, is that the new system tried to do a strangler-fig backwards.  Instead of inserting itself between the old system’s outputs first, the new system intercepted the inputs.  For the strangler-fig pattern to work it needs to replace the outputs first, or both the inputs and outputs simultaneously.  Redirecting the inputs first leads to The Writeback.

  • The Never Rewrite Podcast, Episode One Hundred One: Relief vs. Cure

    The Never Rewrite Podcast, Episode One Hundred One: Relief vs. Cure

    Fix the problem, or mitigate the issue?

    This week Isaac and I explore the complex trade-off between providing immediate relief versus investing time and resources into finding and fixing the underlying bug. Sometimes, fixing the bug is the wrong choice!

    If you’ve ever agonized between fixing a bug, or just mitigating and moving on, this is the episode for you!

    Watch on YouTube or listen to it at Spotify, Apple Podcasts, or your favorite podcast app, and let us know if you have ever been involved in a rewrite. We would love to have you on the show to discuss your experience!