TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Ask HN: Where to learn about driving engineering change in large organizations?

8 pointsby greymalikover 5 years ago
I’ve helped establish best practices and healthy engineering cultures in greenfield scenarios, when I was the first technical hire in an early stage environment. I’ve also come into a small company with significant technical debt and introduced changes to the engineering practice in ways that were embraced by the legacy team. But I’ve never had the chance to reform engineering practices and culture at a very large organization, I’m considering it as a path for professional growth, and I’m looking for ways to learn more about doing it before I dive into the deep end.<p>I’m talking about a software company with dozens or even hundreds of engineers, with large amounts of technical debt, that has a giant, monolithic codebase that’s highly-coupled and poorly tested, a release process that is slow and brittle. And in this scenario, I either lack the authority to dictate global change or I think that an authoritarian approach would be inappropriate and ineffective, or I have no authority at all and have to drive change locally, from the bottom up.<p>If I didn’t know a lot about what best practices were, I’d be reading things like Clean Code. If I didn’t know a lot about strategies for approaching technical debt, I’d be reading things like Working Effective with Legacy Code. If I didn’t know a lot about leading a small team in general, I’d be reading things like Radical Candor. But none of those quite capture the problem I’m describing.<p>Can HN recommend any books, blogs, videos, podcasts, personalities I should be looking at?

4 comments

codingdaveover 5 years ago
&gt; I’m talking about a software company with dozens or even hundreds of engineers, with large amounts of technical debt, that has a giant, monolithic codebase that’s highly-coupled and poorly tested, a release process that is slow and brittle.<p>I think you may have a flawed view of large software organizations. While I&#x27;m sure some companies exist that match the above description, I&#x27;ve more typically seen numerous siloed teams, with their own codebases, with both loose and tight coupling to other teams, with a variety of processes, and therefore a variety of quality around the teams.<p>So it is not as simple as just picking a universal pain point and transitioning to a new process. It is about understanding the drivers and history that got each team to where they are, picking apart which of those drivers is still relevant, and looking for shared pain points between teams that are now open to change due to changes in the business since things were set up.<p>Because of this, I&#x27;d focus less on the technical side, and more on communications and business, as those are the rabbit holes you&#x27;ll need to go down to build consensus from multiple teams to mutually move to a better place.
acesubidoover 5 years ago
For personalities try Jason Friedman. Martin Fowler&#x27;s Refactoring is a nice read too.<p>But personally, I&#x27;d like to ask what business goal are we looking to solve? Because regardless of how murky a codebase can be, if that codebase keeps hitting a business goal, then we really can&#x27;t drive a change in practices.<p>So, we first present business goals. Here&#x27;s a few examples:<p>If the business goal is to give better estimates for fulfilling custom features faster, then testing would be the first in the list. Not even the release process. Tests lessens cognitive load for developers when they&#x27;re asked &quot;how long can we make this feature?&quot;. They&#x27;ll have an idea that it&#x27;ll probably break a bunch of services, etc. a.) If you&#x27;re in leadership, ask for tests when people make a PR. b.) If you&#x27;re not in leadership, look for the smallest part of the monolith. Write 1 integration test, add a CI integration, put it in a PR. Co-workers would probably like that.<p>If the business goal is to give better SLA&#x27;s (turn around time for addressing breaking bugs, scaling better), then the release process would come first.<p>Regarding technical debt: One way to address technical debt is to slowly address it by folding in the effort of cleaning and refactoring inside a feature request. ex: making a new form about 2FA takes 3 days, but you can say 7 and explain that we&#x27;ll setup a CI test build, then hit and address some debt regarding User Authentication along the way.<p>It&#x27;ll introduce as a &quot;Clean As You Go&quot; culture in the legacy engineering team, which will pay off in the long-run instead of having a huge amount of time just dedicated to addressing technical debt.<p>The danger of separating &quot;address technical debt&quot; as a separate effort is it sometimes results into some unnecessary abstractions and over-refactoring: i.e. trying to make certain things too generic, bordering on building a framework.<p>But then again, if the business goal was to make a framework for a business goal (maybe something the bizdev can sell), then it can definitely be made as a separate effort. Otherwise, it&#x27;ll be seen in the bizdev as someone just &quot;playing&quot; around with tech.
d44mover 5 years ago
I&#x27;d suggest you start with identifying and quantifying the areas of improvement. Tools to analyze code quality, unit test coverage and defect leakage could give a sense of what the problem areas are. From there, you can build a consensus on the to-be state. This apprach would shine light on the relevant problems and would reduce resistance.
_ahover 5 years ago
This isn&#x27;t quite what you&#x27;re looking for, but you may find some inspiration in The Phoenix Project (Gene Kim, George Spafford, Kevin Behr).