4 ms·
I used to joke at work that the fastest, simplest way to get promoted to a staff engineering position was to finish a 1 yr refactor. Getting existing codebases
by omeze 5y ago
I used to joke at work that the fastest, simplest way to get promoted to a staff engineering position was to finish a 1 yr refactor.
Getting existing codebases to do new things is hard, and most of enterprise software engineering is basically "rework this API (in the general sense, not web-API sense) for a new product use case".
This tool seems to borrow the philosophy of Go's keeping the language simple, with the tradeoff of a more complex (but fairly well supported) ecosystem to account for missing language features.
IME, Golang (some would say paradoxically due to a lack of generics) is one of the best languages to refactor because of:
- Forced error handling semantics so that unhappy paths are easily enumerated
- Tooling like `rdep` to quickly grok the impact of a package refactor
- String templates/codegen being a first-class "blessed" part of the ecosystem (i.e. you can find tooling by the Go team as a reference when writing your own)
Some would balk at things like codegen being how Go handles this, but for the iteration loops at most companies at scale (where a few tools to do codegen are written & maintained by one team and consumed by others) it works well. For paradigms where you want everyone to contribute to the tooling, it works slightly less well since the barrier of understanding the ecosystem is greater than just understanding the language. Nevertheless, it seems to be the right tradeoff for most enterprise use cases.
- thanhhaimai 5y agoI'm a Googler, and while that might be true at another place, unfortunately this is not true at Google. Refactoring/Tech Debt/Eng Excellence work will not get you promoted pass L4 for the majority of teams. In some team, it will get you to L5, but that's rare. Getting to L6 based on "1 yr refactor" is... simply extraordinary. I haven't seen or heard of one case in 7 years here.
- naikrovek 5y agoI'm pretty sure that the comment you replied to was talking about "the general rule" and not "the exception to the rule." you don't need to call out that your specific employer is different than other employers. everyone here already knew that.
- rejectedandsad 5y agoI’m guessing this was really just a way to brag about where they work. Seems oddly common among people that work at that company. For what it’s worth, I’ve been at more than a few companies and this lines up. Managing a refactor or migration that’s long term and creates significant impact across an org chart or product area is definitely in the purview of promotion to senior or staff, whatever it’s called.
- joshuamorton 5y agoGiven that the tool mentioned in this thread, rf, is written by Russ Cox, who works at Google, to help refactor go, a language developed and maintained by Google, how Google addresses these things feels not totally irrelevant. I also think that "migration" and refactor are completely different concepts. And only the first is going to get you promoted (in the context of Google), because there's so much tooling for making even large refactoring relatively trivial. Pretty much every language has something like this, the build system also supports it too, so the process of, for example, taking a file, renaming it, querying and updating all dependencies (both source files and the build system), testing and sending out pull requests is essentially entirely automated. Unless there's something unique about a refactoring, it's not challenging enough to be promo-worthy.
- rejectedandsad 5y agoRefactors are rarely as simple as moving a few file names or symbols around, at least where I work. While we do have some automation to help (and not break existing consumers), it’s significantly more involved in an SOA architecture for tier1 services. These sorts of big refactors also generally come with data model changes, performance profiling etc. This tool seems fantastic for parts of that, but not all of it. Just as a friendly aside, your tone seems strangely defensive (though this may just be my fault reading this tired at 3AM) - Levels tells me you make on the order of half a million a year, while I’ll be lucky to make half of that in the next decade at my employer, so you really can’t feel persecuted by this when you most likely work half as much as me while being rewarded for it while folks like me struggle to tread water and are considered mentally deficient.
- omeze 5y agoSorry I should have clarified - by "refactoring APIs" I meant the sort of work that would e.g. be unifying all photo abstractions at Facebook behind a new service, not just refactoring package-level abstractions. That sort of work does involve a lot of symbol-level renaming and dependency hell management, but that's just a part of the work.
- whateveracct 5y agoyeah you gotta replace something in prod that already works perfectly fine - or release a greenfield feature and sunset it in 14mo lmaoo
- Cthulhu_ 5y agoI feel like I've been involved in quite a few projects like that; Some Guy sold technology X to a company, so now it's all hands on deck. Over the years, one company I've worked for off and on (as a consultant/contractor) went from a jQuery UI library, to a CSS component library (which was fine), to an AngularJS component library, then some ex-googler (younger than me) swept in and became CTO or similar and Decided that the whole company should use, drumroll please, Polymer. Then Polymer 2 came around and they had to scramble to make everything Polymer 2 compatible. They were just about done when Polymer 3 came around, which did things Differently once again. But I'm sure the guy made decent scratch and left the company right before things came crashing down to an even more cushy job. That's usually what happens.
- qaq 5y agoDoes Google actually use Polymer much?
- dmitriid 5y agoIt does: https://github.com/Polymer/polymer/wiki/Who's-using-Polymer%3F https://github.com/Polymer/polymer/wiki/Who's-using-Polymer%... The whole idea of web components was somehow sold inside Google, hard. They even re-wrote Youtube with web components v0 which was almost immediately deprecated. And Chrome had to support it for years before Youtube rewrote stuff in v1.
- ofrzeta 5y agoThis is from 2018, though.
- 5y ago
- mattio 5y agoThanks for the insight.
- cfors 5y agoWhat is `rdep`? Couldn't seem to find it with a cursory google search.
- sa46 5y agoReverse dependencies, meaning find all sources that depend on a given file. Likely inspired by the Bazel query function by the same name. https://docs.bazel.build/versions/master/query.html#rdeps https://docs.bazel.build/versions/master/query.html#rdeps
- omeze 5y agoThe sibling comment touches on this, but the class of tooling that lets you analyze (R)everse (dep)endencies. There's a bunch that do similar things, but examples: Rdep: https://github.com/axw/rdep https://github.com/axw/rdep Gomod: https://github.com/Helcaraxan/gomod https://github.com/Helcaraxan/gomod If you look at what they're doing under the hood, its mostly gluing bunch of official Golang libs that let you inspect package-level information.
- codygman 5y ago> Forced error handling semantics so that unhappy paths are easily enumerated They could have just added pattern matching and exhaustivity checking though, right?
- valenterry 5y agoDoesn't that just mean that, while Go the language is simple, to become productive one must not only learn the language but an ecosystem that is bigger than the ecosystems of other languages?