Never Rewrite

Jeffrey Sherman and Isaac Askew

‘Never Rewrite’ is a mantra of ours in the programming realm. Often times when software developers encounter nightmare codebases, the thought crosses their mind to work towards a rewrite, a port to a new language, or despair that their code is unfixable.

It’s not unfixable, and we explore how to get started along with an array of other software topics in our eponymous podcast.

read less
TechnologyTechnology

Episodes

Episode 48: Falsehoods Programmers Believe About Projects
Apr 5 2024
Episode 48: Falsehoods Programmers Believe About Projects
In this episode, Isaac and Jeffrey discuss falsehoods that programmers believe about projects. They explore assumptions such as projects having defined beginnings and endings, the role of priorities in project work, and the importance of clear communication and feedback. They also touch on the challenges of working on successful projects that transition into ongoing maintenance and the consequences of failed projects that continue to exist. The conversation highlights the need for programmers to question these assumptions and adapt their approach to project management.Takeaways- Projects often don't have defined beginnings or endings, and assumptions about their start and end dates can lead to confusion and miscommunication.- Relying solely on personal priorities to determine when to start working on a project can lead to conflicts and misunderstandings with others who have different priorities.- Clear communication and feedback are crucial in project work to ensure everyone is on the same page and to avoid missed signals and mixed signals. - Programmers should be proactive in sharing their expertise and insights on projects, even if they haven't been explicitly asked, to prevent unnecessary rework and improve overall project outcomes.- Successful projects often transition into ongoing maintenance and feature development, while failed projects that are not fully turned off can continue to exist and incur costs.- Questioning assumptions and adapting project management approaches based on the specific context and circumstances of each project is essential for success.
Episode 46: Workshopping Live with Dustin Rea
Mar 22 2024
Episode 46: Workshopping Live with Dustin Rea
In this conversation, Dustin Rea discusses the challenges faced by one of his clients who has a CRM. The CRM is built on a legacy codebase with issues in quality, scalability, and deliverability. The team has been working on improving the system, but there are still problems with emails, SMS, payments, and automations. The company is mission-driven and relies on the CRM to run their business, so rebuilding customer trust is crucial. They have made some improvements in infrastructure and email deliverability, but there is still work to be done. The conversation covered several topics related to database architecture and system design. The main themes include database optimization, handling heavy reads and writes, improving error handling and incident response, and enhancing observability. The speakers discussed the need for a purpose-driven database, implementing caching with Redis, tracking heavy queries, and addressing inconsistencies in the email service. They also mentioned the importance of logging and monitoring tools like Sentry and Grafana. Overall, the conversation highlighted the challenges and potential solutions for improving the performance and reliability of the system.Takeaways:- The client's CRM system is built on a legacy codebase and has issues with quality, scalability, and deliverability. - The team has been working on improving the system, but there are still problems with emails, SMS, payments, and automations.- Rebuilding customer trust is crucial for the company, as the CRM is core to their business.- Improvements have been made in infrastructure and email deliverability, but there is still work to be done.- Optimizing database performance is crucial for handling heavy reads and writes.- Implementing caching with Redis can help improve performance and reduce load on the database.- Tracking and optimizing heavy queries is important for identifying and resolving performance issues.- Improving error handling and incident response processes can help address inconsistencies and ensure reliable system operation.- Enhancing observability through logging and monitoring tools can provide valuable insights for troubleshooting and improving system performance.
Episode 45 - Year In Review
Mar 15 2024
Episode 45 - Year In Review
Isaac and Jeffrey celebrate the one-year anniversary of the podcast. They discuss the challenges of maintaining a consistent schedule and reflect on the evolution of topics covered in the past year. They also talk about running out of failure stories and the importance of finding interesting guests. The hosts discuss the concept of forcing functions for successful rewrites and the risks associated with rewrites. They also explore the idea of the Ship of Theseus and how it relates to software development. Lastly, they discuss how rewrites can discourage learning about the current system. In this episode, the hosts discuss various themes related to software development and the process of rewriting code. They emphasize the importance of the investigation process and how it can be used to improve code quality. They also discuss the benefits of tidying up code and the value of iterative workshops. The hosts highlight the importance of understanding the business side of software development and the need for developers to develop human skills in the age of AI. They also reflect on past interviews with industry experts and invite listeners to participate in future guest episodes.Takeaways- Consistency and scheduling are key to maintaining a successful podcast.- Finding interesting guests and stories is important to keep the podcast engaging.- Forcing functions are often necessary for successful rewrites.- Rewrites can be risky and discourage learning about the current system. The investigation process is crucial for understanding code and improving its quality.- Tidying up code and making small improvements can make it easier for future developers to understand and work with.- Iterative workshops can be an effective way to transform and improve code.- Developers should strive to understand the business side of software development to make better decisions.- Developing human skills is important in the age of AI.
Episode 39 - Project Risk with Jonathan Stark
Feb 2 2024
Episode 39 - Project Risk with Jonathan Stark
Jonathan Stark joins as a guest discuss the risks of hourly billing and the parallels between risk in a rewrite and in hourly billing. He explains how hourly billing puts all the risk on the client and leads to stressful relationships and arguments about hours and costs. Jonathan emphasizes the importance of trust and how it can be built through delivering on promises and becoming an authority in your field. He also provides strategies for pushing back against rewrites and making informed decisions based on cost and quality. In this conversation, Jonathan and Jeffrey discuss the importance of taking risks and understanding the business side of software development. They emphasize the need for developers to consider the financial risks their clients are taking on and the value they provide. They also highlight the benefits of speaking in terms of dollars and business outcomes rather than technical details. The conversation touches on the challenges of system rewrites and the importance of considering the cheap and easy options before diving into complex projects. They conclude by discussing the concept of value pricing and providing the best solution for clients.Takeaways- Hourly billing puts all the risk on the client, leading to stressful relationships and arguments about hours and costs.- Trust is crucial in client relationships and can be built by delivering on promises and becoming an authority in your field.- Pushing back against rewrites can be done by presenting multiple solutions and discussing the trade-offs between cost and quality.- Software estimates are important for budgeting and decision-making, and developers should be encouraged to provide estimates for different solutions.- Developers should understand the financial risks their clients are taking on and the value they provide.- Speaking in terms of dollars and business outcomes is more valuable than focusing on technical details.- Consider the cheap and easy options before diving into complex projects.- Value pricing involves providing the best solution for clients. Jonathan's website: https://jonathanstark.com/.Books mentioned (affiliate links): How to Measure AnythingThinking in BetsSuperstruct Manifesto