Sherman On Software Latest

  • Skipping Tests To Deliver Faster

    Skipping Tests To Deliver Faster

    Managers with looming deadlines often tell developers to skip writing tests in order to deliver code faster.  This only makes sense if you don’t believe that unit tests pay off in initial development, or you view the impact of bugs as an externality.

    I have encountered extremists who don’t believe that unit tests ever provide value; that’s not the case here.  Managers who want to skip writing tests to deliver faster are less extreme.  They are stating that unit tests pay for themselves over time and that they won’t provide a net benefit until after the first release.

    This is not as crazy as it sounds.  Tests become more valuable over time as they allow future developers to refactor with confidence.  You can reason backwards and say that if the test is more valuable in the future, it must be less valuable today.  Right now, the test could even conceivably be worth less the cost of writing it.  And when you need to ship, you cut things that don’t add value.

    Which brings forth the second part of the argument: bugs are an externality.

    If you deliver a bug ridden project on time, have you succeeded?  Sadly, the answer is usually yes.  Managers get evaluated on delivering on time, developers get evaluated on quality. Managers can believe that tests add value to the code, but they don’t add value to the manager.

    By their definition deadlines prioritize short term thinking.  Deadlines encourage managers to make short term tradeoffs at the expense of long term value creation.  When managers push to skip tests, the people who suffer most are customers who have to use the software.  The people who suffer least are the managers who traded tests for time.

  • The Never Rewrite Podcast, Episode Seventy-Eight, Is Frontend Modernization a Valid Reason for Rewriting?

    The Never Rewrite Podcast, Episode Seventy-Eight, Is Frontend Modernization a Valid Reason for Rewriting?

    Isaac and I discuss the whether front-end modernization is a valid reason to do a full, big bang, rewrite. We stress the importance of iterative updates and customer experience and argue against the notion that a dated front end requires a complete rewrite. The conversation explores the risks of big bang rewrites, the benefits of gradual improvements, the questionable need for design consistency, and delivering value to customers.

    Watch on YouTube or listen to it at NeverRewrite, Spotify, Apple Podcasts, or Amazon Music, 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!

  • Demos Disasters Teach You More Than Triumphs

    Demos Disasters Teach You More Than Triumphs

    In the vein of learning more from failure than success, a disastrous demo will teach you more than a triumphant one.  Don’t get me wrong, triumphant demos are awesome!  Triumph as much as possible and then get back to work.  

    Disasters teach you, or your stakeholders, that something is wrong.  Remember, the purpose of a demo is feedback, and the feedback may be that you are on the wrong path.

    As a developer, you may be doing a great job at building the wrong thing.  You may discover that you don’t understand what you are building or why.  The sooner you learn that you are off track, the sooner, and cheaper you can get on the right track.

    But there are two sides to a demo.

    Demo feedback is about more than just the presenter

    I’ve walked into a dozen demos expecting triumph and congratulations only to hear “now that I’ve seen it, this isn’t going to work.”

    Stakeholders get off track too.

    You can build what your stakeholder asked for, understand everything about the problem, and still deliver something that won’t solve the problem.  

    Your stakeholder will never know until they can see and touch it.  And they will see it, live, in your demo.

    The sooner that stakeholders learn that they are off track, the sooner, and cheaper everyone can get on the right track.

    Most Demos Aren’t Disasters or Triumphs

    Most demos are constructive.  You present, you get some feedback, you move on to the next slice of work.  You learn a little about the next slice of work.

    Disasters are no fun, but they do give everyone a chance to learn from the experience.  Demo early, demo often.  Demos are for feedback, and feedback leads to delivery.

  • The Purpose Of A Demo Is Feedback

    The Purpose Of A Demo Is Feedback

    Internal tech demos exist so that stakeholders can see and comment on the work being delivered.  Hopefully the demo produces smiles, cheers, and high fives.  Often, the stakeholders will ask questions and make objections that take everything off of the rails.  These can be painful moments; they are also extremely valuable.

    Disastrous demos give you at least one of two great pieces of information:

    You learn that you were building the wrong thing.  

    Having bug free, highly performant code doesn’t matter if it is correctly doing something other than what stakeholders want.  The longer it takes to learn that you’re building the wrong thing, the more time and money you’re wasting.

    It sucks to hear you spent a week or two building the wrong thing and need to scrap some work.  It sucks much harder when you’ve spent 6 months heading in the wrong direction.

    You learn that you can’t speak to the business value

    How you demo reflects your understanding of the software.  I’ve seen many demos where the developers have delivered the right thing, but they don’t understand why.  Software development in knowledge work; “I built what I was told” is the wrong answer.  

    You need to know why stakeholders want the software, and speak to it in your demo.  When you have the value wrong the stakeholders will tear the demo apart looking for their business value.

    Remember, demos are for feedback

    Disastrous demos suck.  Disastrous demos are also successes – you learned something critical about the project that you didn’t know.

    Don’t let disappointment distract from learning and improving.

  • The Never Rewrite Podcast, Episode Seventy-Seven, Who Gets To Define ‘Shit’ Code?

    The Never Rewrite Podcast, Episode Seventy-Seven, Who Gets To Define ‘Shit’ Code?

    Isaac and I explore the subjective nature of coding standards and what constitutes ‘shit code.’ We discuss the lack of industry-wide standards, the importance of intention in coding, and the balance between flexibility and adaptability in code quality. We also touch on the fluidity of language and how it parallels coding practices; coding standards should evolve with the context and needs of the project.

    Watch on YouTube or listen to it at NeverRewrite, Spotify, Apple Podcasts, or Amazon Music, 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!

  • ASCII Boobs in Your Codebase Won’t Fix Themselves

    ASCII Boobs in Your Codebase Won’t Fix Themselves

    At the start of my career I worked in a codebase with a page of giant ascii boob art that we couldn’t delete.  The identity of whomever did it was lost to time when the codebase had migrated from CVS to Subversion.  The company had matured and no one would admit it now.  

    We were in a heavily regulated industry and code changes were monitored by both our internal compliance department and random checks from external auditors.  Deleting the boobs meant putting your name on the code change and no one wanted to take the risk of having to explain why there had been ascii boobs in the codebase.  There were no questions asked about things that didn’t change.

    So the boobs stayed for years and years.

    Almost every codebase has areas that embarrass developers and the company.  They persist because tackling them requires admitting that problems have existed for years and you’ve been ignoring them.

    New blood is often able to shake up the status quo; they haven’t spent years pretending not to see the obvious.

    When it comes to the problems in your codebase, you can be brave and admit that you’ve been ignoring fixable problems, or you can wait to get replaced with someone new.  The choice is yours.  For a while.

  • The Never Rewrite Podcast, Episode Seventy-Six, Aligning Your Company Standards to its Lifecycle Phase

    The Never Rewrite Podcast, Episode Seventy-Six, Aligning Your Company Standards to its Lifecycle Phase

    Guest Dustin Rea joins us to discuss the importance of aligning a company’s standards and processes with its lifecycle stages. The discussion covers five key phases: the MVP phase, where the foundation is built; the Product User Fit phase, focusing on understanding customer needs; the Product Market Fit phase, solidifying the offering; the Scaling Up phase, managing growth; and finally, the Multi-Product Platform phase, where companies expand their offerings. Each phase presents unique challenges and requires different approaches to maintain quality and efficiency.

    Watch on YouTube or listen to it at NeverRewrite, Spotify, Apple Podcasts, or Amazon Music, 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!

  • Collaborative Breakdown: Estimating Full Projects

    Collaborative Breakdown: Estimating Full Projects

    Have you ever been asked to fully estimate a full project so that someone else can decide if it is worth pursuing?  Did the request set off alarm bells in your head?  

    It should!  Estimating full projects is a sign that the collaborative process has already broken down!  

    Estimating full projects is a trap that prevents developers from bringing their most important skills to bear.  Instead of collaboration towards a common goal, estimation pushes toxic all-or-nothing demands:

    • The project has a value, but it isn’t being shared with you.  Instead the project owner is asking for an estimate; and it needs to be less than the project’s value.  If your estimate is above the line, you’ll get pressure to revise the estimate down.  Worse, your estimates will often be ignored and timelines will be dictated.  All so that the project will hit numbers you’ve never seen.
    • You are a professional software developer and you have to accept their diagnosis about the software solution.  Is this project the best way to pursue the opportunity?  Could you do it faster and cheaper some other way?  Doesn’t matter; estimate this project.  Your expertise and creative inputs have been rejected.
    • The project will be a big bang deliverable.  You’re given a scope of work and asked how long it will take.  The asker wants the full project.  You’ll have to fight to iterate, make small releases, de-risk, or even prove the concept.
    • The project scope will always miss some requirements; the larger the project, the larger the miss.  The misses will blow out the timeline, and you will get blamed for missing the estimate.

    The alternative is a collaborative process!

    Instead of pressure for your estimate to come in below an unknown ceiling, you can scope last.

    Instead of pressure for you to accept a project, you can work together to shape the project.

    Instead of pressure for you to deliver a giant project in one perfect step, you can work together to deliver iteratively.  

    You even save all of the time spent creating a project plan, estimating the plan, and deciding whether the plan is worthwhile!

    Pushing back will uncomfortable the first few times.  The first time you have a conversation that starts with “I see this opportunity, let’s talk about how we can seize it”, it will all have been worth it.

  • The Never Rewrite Podcast, Episode Seventy-Five, Rewriting is Gambling – A Lesson in Risk

    The Never Rewrite Podcast, Episode Seventy-Five, Rewriting is Gambling – A Lesson in Risk

    Isaac and I discuss the inherent risks associated with software rewrites, emphasizing how rewrites push risk to the end of the development cycle. The discussion highlights the need for iterative development and the significance of delivering independent components to ensure project success, particularly within the SaaS model, which thrives on continuous improvement and customer satisfaction.

    Watch on YouTube or listen to it at NeverRewrite, Spotify, Apple Podcasts, or Amazon Music, 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 Seventy-Four, Musketeering

    The Never Rewrite Podcast, Episode Seventy-Four, Musketeering

    Isaac and I explore the concept of ‘musketeering’ in software development, emphasizing the importance of collaboration in solving complex problems. We discuss the challenges of legacy code, the necessity of testing, and the strategy of ‘divide and conquer’ to tackle intertwined issues effectively.

    I originally discussed Musketeering in this post.

    Watch on YouTube or listen to it at NeverRewrite, Spotify, Apple Podcasts, or Amazon Music, 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!