Logo

    The problem with the tech debt mindset

    enJuly 23, 2024
    What is the definition of tech debt according to John Bevin?
    How can tech debt affect a business's financial viability?
    What examples of reliable code are mentioned in the text?
    Why is building psychological safety important in a team?
    What trade-offs should be considered when adopting new technologies?

    Podcast Summary

    • Tech DebtOutdated technology choices, shortcuts taken to meet deadlines, and changing requirements or new technologies can result in tech debt, impacting a business's financial viability and ability to innovate

      Tech debt is a term used to describe various issues that arise in software development over time. John Bevin, a guest on the show, defines tech debt as outdated technology choices, shortcuts taken to meet deadlines, and the need for long-term re-architecting or even re-platforming due to changing requirements or new technologies. He shares his personal experience of building cloud products and the resulting tech debt. The debt can manifest in different ways, from outdated languages or dependencies to the need for complete system overhauls. The importance of addressing tech debt is highlighted, as it can impact a business's financial viability and ability to keep up with new technologies. A friend of the host shared an example of companies re-architecting their software due to performance issues, which can be seen as a form of tech debt bankruptcy.

    • Maintaining old codebaseNeglecting tech debt in an old codebase can lead to larger problems and unexpected scope creep, making it essential to strike a balance between maintaining and upgrading existing code and introducing new features and technologies.

      Maintaining an outdated codebase while continuously developing new features comes with its challenges. Joel Spolsky's famous blog post advises against rewriting everything from scratch but acknowledges the difficulty of balancing the need to adapt to new technologies with the importance of existing code that generates revenue. As the codebase grows and technology changes, maintaining the product becomes increasingly complex. Every line of code is both an asset and a liability, and neglecting tech debt can lead to larger problems down the line. One such problem is the scope creep of requirements and features over time. Making a decision with old code may require upgrading or introducing new technologies, leading to incompatibilities and unexpected bugs. This was the case when we wanted to improve the scripting editor in our SAS product, ScriptRunner. Customers weren't asking for the latest version of Groovy, so we hadn't upgraded. However, when we introduced a new feature requiring the latest version, we faced numerous incompatibilities and had to anticipate and address the bugs carefully to ensure minimal downtime and maintain the high user experience our customers expect. Balancing the need to maintain and upgrade existing code with the desire to introduce new features and technologies is a constant challenge. Neglecting tech debt can lead to larger problems and unexpected scope creep, making it essential to strike a balance between the two.

    • Technical debt updatesUpdating technical debt requires significant resources and communication to justify the investment, but can lead to increased productivity, new capabilities, and better onboarding for engineers.

      Maintaining and updating technical debt can be a time-consuming and never-ending process. As technology evolves, so does the need to upgrade and keep up. This was highlighted in a discussion about the challenges of moving away from outdated web server technology and the subsequent need to update Gradle and Groovy. The process can be complex and requires a significant amount of resources, leading to the need for a dedicated team to handle these tasks. To make a case for this, it's important to quantify the impact of technical debt on productivity and business requirements. This can be done by measuring the amount of time spent on these tasks, the frustration level of engineers, and the roadmap of necessary technology changes. It's not just about keeping up with the latest technology for the sake of it, but rather unlocking new capabilities and working more efficiently. Historically, approaches have included drip feeding these tasks into regular work or dedicating entire weeks to tech work. However, the results have varied, with some projects completing successfully and others getting stuck on sharp edges of the codebase. The challenge is to clearly communicate the benefits of investing in these upgrades and make it quantifiable to those in charge of the budget. Ultimately, the goal is to create a more efficient and reliable technology stack that enables faster development and better onboarding for new engineers.

    • Code as liability and assetCode requires maintenance and investment for better customer experiences and reliable outcomes. Choices impact architecture and require careful consideration.

      Code is both a liability and an asset for businesses. It can be seen as debt that needs to be managed, but it can also appreciate in value as the customer base grows and the software becomes more valuable. It's important for software engineers to focus on the positive aspects of the technology and celebrate the solutions it provides to customers. Every piece of code, including dependencies and libraries, requires maintenance and can impact the overall architecture of the software. Investing in the quality of the software and keeping it up-to-date can lead to better customer experiences and more reliable and predictable outcomes. Some examples of code that has held up well over time include the Wrap Hack web framework and React. However, every choice comes with its own trade-offs, and it's essential to consider the maintenance and potential impact on the software's architecture when adopting new dependencies or frameworks.

    • Balancing innovation and team needsConsider team expertise, experience, and psychological safety when implementing new technologies. Trust gut instinct but learn from mistakes. Build psychological safety for open communication and adjust to team culture.

      As a engineering leader, it's important to be open to new ideas and technologies, but also to consider the team's expertise, experience, and psychological safety when making decisions. The speaker shared experiences of implementing libraries that didn't work out due to testing issues, lack of understanding, and team resistance. They emphasized the importance of trusting one's gut instinct, but also recognizing that some mistakes can only be learned from experience. Building psychological safety in the team is crucial for allowing team members to voice their opinions and challenges, which is essential for maintaining a productive and happy team. The speaker also highlighted the importance of considering the team's culture and allowing them time to adjust before implementing new technologies. Overall, the takeaway is that as a leader, it's important to balance the desire for innovation with the team's needs and capabilities.

    • Technology choices, developer experienceAdvocating for technology improvements and better developer experience collectively leads to better products for customers. Technology is a people problem.

      Improving technology choices and developer experience can lead to a better product for customers. This was a key theme discussed during the podcast. Some engineers may feel that advocating for changes is not their responsibility, but it ultimately impacts the customer. The podcast emphasized the importance of addressing these issues collectively. As the speaker noted, "technology at its base is a people problem." A user named Nikko Skur and IKO KSR were recognized for their insightful question during the show, and the answer to using math.pow with integers in Golang can be found. The podcast was hosted by Ryan Donovan from Stack Overflow and JD Bevan from Scibrona. To learn more, check out stackoverflow.blog, leave a review, or find them on Twitter.

    Recent Episodes from The Stack Overflow Podcast

    At scale, anything that could fail definitely will

    At scale, anything that could fail definitely will

    Pradeep talks about building at global scale and preparing for inevitable system failures. He talks about extra layers of security, including viewing your own VMs as untrustworthy. And he lays out where he thinks the world of cloud computing is headed as GenAI becomes a bigger piece of many company’s tech stack. 

    You can find Pradeep on LinkedIn. He also writes a blog and hosts a podcast over at Oracle First Principles

    Congrats to Stack Overflow user shantanu, who earned a Great Question badge for asking: 

    Which shell I am using in mac?

     Over 100,000 people have benefited from your curiosity.

    The Stack Overflow Podcast
    enSeptember 03, 2024

    Mobile Observability: monitoring performance through cracked screens, old batteries, and crappy Wi-Fi

    Mobile Observability: monitoring performance through cracked screens, old batteries, and crappy Wi-Fi

    You can learn more about Austin on LinkedIn and check out a blog he wrote on building the SDK for Open Telemetry here.

    You can find Austin at the CNCF Slack community, in the OTel SIG channel, or the client-side SIG channels. The calendar is public on opentelemetry.io. Embrace has its own Slack community to talk all things Embrace or all things mobile observability. You can join that by going to embrace.io as well.

    Congrats to Stack Overflow user Cottentail for earning an Illuminator badge, awarded when a user edits and answers 500 questions, both actions within 12 hours.

    Where does Postgres fit in a world of GenAI and vector databases?

    Where does Postgres fit in a world of GenAI and vector databases?

    For the last two years, Postgres has been the most popular database among respondents to our Annual Developer Survey. 

    Timescale is a startup working on an open-source PostgreSQEL stack for AI applications. You can follow the company on X and check out their work on GitHub

    You can learn more about Avthar on his website and on LinkedIn

    Congrats to Stack Overflow user Haymaker for earning a Great Question badge. They asked: 

    How Can I Override the Default SQLConnection Timeout

    ? Nearly 250,000 other people have been curious about this same question.

    Ryan Dahl explains why Deno had to evolve with version 2.0

    Ryan Dahl explains why Deno had to evolve with version 2.0

    If you’ve never seen it, check out Ryan’s classic talk, 10 Things I Regret About Node.JS, which gives a great overview of the reasons he felt compelled to create Deno.

    You can learn more about Ryan on Wikipedia, his website, and his Github page.

    To learn more about Deno 2.0, listen to Ryan talk about it here and check out the project’s Github page here.

    Congrats to Hugo G, who earned a Great Answer Badge for his input on the following question: 

    How can I declare and use Boolean variables in a shell script?

    Battling ticket bots and untangling taxes at the frontiers of e-commerce

    Battling ticket bots and untangling taxes at the frontiers of e-commerce

    You can find Ilya on LinkedIn here.

    You can listen to Ilya talk about Commerce Components here, a system he describes as a "modern way to approach your commerce architecture without reducing it to a (false) binary choice between microservices and monoliths."

    As Ilya notes, “there are a lot of interesting implications for runtime and how we're solving it at Shopify. There is a direct bridge there to a performance conversation as well: moving untrusted scripts off the main thread, sandboxing UI extensions, and more.” 

    No badge winner today. Instead, user Kaizen has a question about Shopify that still needs an answer. Maybe you can help! 

    How to Activate Shopify Web Pixel Extension on Production Store?

    Scaling systems to manage the data about the data

    Scaling systems to manage the data about the data

    Coalesce is a solution to transform data at scale. 

    You can find Satish on LinkedIn

    We previously spoke to Satish for a Q&A on the blog: AI is only as good as the data: Q&A with Satish Jayanthi of Coalesce

    We previously covered metadata on the blog: Metadata, not data, is what drags your database down

    Congrats to Lifeboat winner nwinkler for saving this question with a great answer: Docker run hello-world not working

     

    How we’re making Stack Overflow more accessible

    How we’re making Stack Overflow more accessible

    Read Dan’s blog post about the process of making Stack Overflow more accessible.

    We followed the Web Content Accessibility Guidelines (WCAG), with a few exceptions. For example, we chose to measure color contrast using the Accessible Perceptual Contrast Algorithm (APCA)

    We quantified the accessibility of our products using the Axe accessibility testing engine.

    Our accessibility dashboard helps our internal teams and the community track the accessibility of our products: Stacks (our design system), the public platform (Stack Overflow and all Stack Exchange sites), and Stack Overflow for Teams (including Stack Overflow for Teams Enterprise products). 

    We also implemented robust accessibility testing and made those rules open-source in a comprehensive package you can find here.

    Shoutout to user Beejor for an excellent answer to the question What is the largest safe UDP packet size on the internet?.

    Unpacking the 2024 Developer Survey results

    Unpacking the 2024 Developer Survey results

    Read the blog post or dive into the results of our 2024 Developer Survey.

    A few highlights to get you started: 

    Speaking of our developer community, Stack Overflow user Frank earned a Stellar Question badge by wondering How to use C++ in Go.

    How developer experience can escape the spreadsheet

    How developer experience can escape the spreadsheet

    Cortex is an internal developer portal that cuts noise and helps devs build and continuously improve software. Explore their docs or see what’s happening on their blog.

    Cortex is also hiring, so if you’re an engineer who wants to work on these kinds of problems, check out their careers page.

    Connect with Anish on LinkedIn or X.

    Ganesh is also on LinkedIn and X.

    Shoutout to Alex Chesters, who earned a Great Question badge with How to count occurrences of an element in a Swift array?