You call it tech debt I call it malpractice (Changelog & Friends #12)
Sep 1, 2023
auto_awesome
Kris Brandow, a Go Time panelist and unpopular opinion maker, discusses the waterfall paper, his dislike of the "tech debt" analogy, the importance of documentation, and the idea that everything is a distributed system.
Accountability in software engineering is crucial, and codebases should be well-documented and maintainable to avoid malpractice.
Resolving technical debt requires clear communication and understanding between engineers and stakeholders.
Proper documentation and planning are essential to avoid accumulating unnecessary technical debt.
Recognizing the importance of documentation and knowledge management can help prevent tech debt and ensure continuity in software projects.
Deep dives
The Need for Responsible Software Engineering
One of the main points discussed in the podcast is the importance of responsible software engineering. It is highlighted that many codebases lack proper documentation and comments, making it difficult for engineers to understand and maintain the code. This lack of accountability is compared to malpractice rather than debt. The argument is made that engineers should take responsibility for their work and ensure that codebases are well-documented and maintainable. This accountability includes making appropriate choices in the planning stages and clearly communicating timelines and trade-offs to stakeholders.
The Challenges of Technical Debt
Another key point discussed is the challenges that technical debt presents to software development. The analogy of debt is used to describe the cost that must be paid to resolve issues and improve codebases. The difficulty in quantifying technical debt is highlighted, as it is not as easily measurable as financial debt. The struggle to communicate the need for addressing technical debt is also discussed, as engineers often face challenges in explaining the time and effort required to stakeholders who may not fully understand the complexities of software development.
The Importance of Documentation and Planning
The podcast emphasizes the significance of proper documentation and planning in software engineering projects. It is suggested that documenting decisions, timelines, and trade-offs is essential in order to avoid accumulating unnecessary technical debt. The importance of being able to refer back to documentation in the future is highlighted, as it allows for better understanding and decision-making. The podcast also emphasizes the need to onboard new engineers effectively and reduce churn within teams, as continuous turnover can also contribute to technical debt accumulation.
Resolving Technical Debt Responsibly
The podcast discusses the importance of resolving technical debt responsibly and the need for a cultural shift in software engineering. It is suggested that rather than viewing technical debt as an unavoidable consequence, engineers should strive to be accountable for their choices and work towards making codebases more maintainable. Clear communication, proper documentation, and planning play crucial roles in addressing technical debt effectively. The focus should shift towards creating a responsible approach to software engineering, ensuring longevity and sustainability in codebases.
The importance of documentation and knowledge management
Documentation and knowledge management are crucial in the software industry. Many organizations overlook the need for thorough documentation, resulting in tech debt and problems down the line. Teams should prioritize documenting decisions, processes, and information to avoid misunderstandings and ensure continuity. The challenge lies in organizing and accessing this documentation effectively, and recognizing the value of hiring librarians and archivists to manage and present the information in a usable manner.
The value of recording and transcribing meetings
Recording and transcribing meetings can provide valuable insights and documentation. It allows team members to go back and understand the reasons behind decisions, especially when certain individuals are no longer present. Employing software and tools that automate the process of recording, transcribing, and searching through meeting content can be beneficial. This can help create a comprehensive system of easily accessible meeting notes and knowledge.
Seeing software as distributed systems
Understanding that software is essentially a distributed system is crucial. From processors to networks, all computing devices operate as distributed systems. Embracing this perspective can help developers tackle complex problems and make informed decisions. It also highlights the need for individuals to have a deeper understanding of distributed systems and work towards bridging the gap between different layers of the software stack.
The value of thinking in asynchronous models and reducing timing assumptions
Shifting towards asynchronous thinking and reducing timing assumptions can greatly improve software development. By eliminating dependencies on specific timings and embracing a more event-driven approach, developers can build systems that work reliably and are more robust. This requires a shift in mindset and may involve rethinking how to approach timing models and handling operations across distributed systems.
Go Time panelist (and semi-professional unpopular opinion maker) Kris Brandow joins us to discuss his deep-dive on the waterfall paper, his dislike of the “tech debt” analogy, why documentation matters so much & how everything is a distributed system.
Changelog++ members support our work, get closer to the metal, and make the ads disappear. Join today!
Sponsors:
Fastly – Our bandwidth partner. Fastly powers fast, secure, and scalable digital experiences. Move beyond your content delivery network to their powerful edge cloud platform. Learn more at fastly.com
Fly.io – The home of Changelog.com — Deploy your apps and databases close to your users. In minutes you can run your Ruby, Go, Node, Deno, Python, or Elixir app (and databases!) all over the world. No ops required. Learn more at fly.io/changelog and check out the speedrun in their docs.
Typesense – Lightning fast, globally distributed Search-as-a-Service that runs in memory. You literally can’t get any faster!