Doing a Job – The Management Philosophy of Adm. Hyman G. Rickover
govleaders.org
govleaders.org
My fave.
My favorite Rickover story may be an urban legend.
It is said that, when salespeople showed up at his second-floor office with sample kit, he'd grab the sample, walk over to his window, and drop it.
He would then say "If it still works, we'll talk."
Most things in software are never that challenging, but then that is a matter of perspective. Everything is challenging the moment an adult comes in and cuts off the nonsense.
Our work was far from easy. It was developing cross-platform image processing pipelines in C++. Lots of whacky stuff, like leveraging hardware threading, cache optimization, etc.
Each engineer had strengths in various areas, and we were able to work together to develop some stuff that worked nicely (it wasn't always packaged especially well, by the application implementation team, but our stuff was great).
We were a US shop that fed into a Japanese organization, and the Japanese wouldn't even acknowledge my engineers, until they had been there at least a year.
I'm not really a fan of "Programming by Dependency." I understand that it can allow relatively unskilled and inexperienced programmers to create some pretty ambitious works, but I feel the cost in quality, performance, resource usage, licensing, and future maintainability are too high, in many cases.
Because it strikes me that software can be many things, it's primary attribute of course being malleability.
Excerpt: "He was certainly thrifty, but my father could also be extremely generous with his money as well as with his time. He donated all the profits from his books and the honorariums from his many speaking engagements to a Jewish orphanage in Chicago. When one of his staff died during surgery, he made sure his widow had enough money to tide her and her family over and went to great lengths to find her a good job with the civil service."
I wonder what he would say about today’s corporate environment.
Of course, this idea is firmly rooted in the operational demands of military organizations, which is not really the same kind of work as, say, developing new weapons systems.
I really like that phrase: courageous impatience.
* KOG = Kindly Old Gentleman
https://www.theatlantic.com/ideas/archive/2021/09/manager-wo...
https://www.fiveeasypieces.xyz/p/five-easy-piecesthe-reverse...
Scalability and efficiency requires well defined specialized roles. Additionally the more specialized and "stupid" each compartmentalized role is... the more efficient and scalable the organization becomes. Heavy Specialization is in fact the root reason for the complexity of civilization in the modern world. Therefore, if the objective is growth and efficiency, management of every organization must seek to organize the hierarchy in a way where each role becomes small and extremely well defined.
See McDonald or similar for the huge scalability and efficiency that is brought on by the opposite philosophy of Rickover.
Rickovers' philosophy optimizes for flexibility and creativity at the huge cost of basically zero scalability. This type of philosophy is good for labs and R&D work.
In terms of software I currently work at a company that affords this level of flexibility, freedom and ownership. Software Engineers at my company "own" their product and are given full autonomy. But they have to deal with all the politics from other stakeholders and generally spend less time doing actual software.
A software engineer allowed to deep dive on a stream of tickets/tasks while being defended from non-software related issues by a manager is by far more efficient than one given the responsibility of "ownership."
Literally software engineers at my company are expected to push products to production and cat herd all the required people to make it a reality.
What in your mind is a better setup? One where a manager does the cat-herding and the software engineer is given the very small task of just coding? Or One where the software engineer has ownership and responsibility of the entire product and has to manage it all the way to production?
Claiming that his approach was “not scalable” and that yours is “flexible” sounds naive and conceited to me.
Insulting people for a differing opinion that is introduced neutrally is not a conductive way to communicate... it is way of communication that is both against the rules on this site and one that Admiral Rickover himself will condemn.
One thing that is for sure is that insults, rude behavior is not scalable or acceptable in any organization.
>Claiming that his approach was “not scalable” and that yours is “flexible” sounds naive and conceited to me.
Why don't you read what I wrote again. I said Rickovers' approach was "flexible" while my approach was "scalable." Another thing I should mention that I'm sure Admiral Rickover will agree with me on is that insulting people based off of a cursory reading and complete misinterpretation of a post is not productive for any organization. It's very careless
> Admiral Rickover managed nuclear submarines and aircraft carriers. Moreover, he was responsible for introducing these incredibly complex and dangerous technologies to the Navy.
It's debatable how efficient and productive these technologies are. The Defense industry is famous for inefficiencies and incompetence. While the feat you describe is impressive there is nuance that needs to be examined here. Objectivity is warranted. Learn to be able see things not in terms of black and white but in sets of pros and cons which is likely the reality here.
FYI, Admiral Rickover (born 1900) died in 1986.
> A software engineer allowed to deep dive on a stream of tickets/tasks while being defended from non-software related issues by a manager is by far more efficient than one given the responsibility of "ownership."
This works if ownership boundaries are clear and unambiguous, however defining these boundaries involves many tradeoffs which may be judged incorrectly or shift over time. If so you may hear management start talking about "breaking down silos" and ICs enter a kafkaesque knightmare as the structure chokes on the communication overflow as no one is able to get the support from colleagues to get their own issues done because they are all assigned ownership of different issues.
Overall I think we need to be careful about naively optimizing for scalability and efficiency without first identifying the goal. Just as you probably wouldn't want Rickover designing enterprise software, you also don't want an OKR-toting MBA to be responsible for designing a nuclear submarine.
However there are many other dimensions of scalability to consider. Examine the complexity of the software system itself where thousands of people have to work on it. Eventually there will be no choice but to go this route due to rising complexity of the software. You need specialists with narrow assignments because those narrow assignments are already so complex that it takes a team to comprehend it. Engineers on these projects have to give up ownership of certain things and trust that others can handle it if they ever want to get any work done.
I stated it above as a tradeoff. Efficiency and scalability vs. flexibility. I completely agree with you on being careful about optimizing for scalability but eventually a bigger org HAS to make this tradeoff because they have no choice.
If a few bespoke nuclear submarines don't necessitate the trade off that's fine, but putting a new ever complexifying smart phone in the hands of the ENTIRE population year after year requires immense sacrifices to flexibility in the name of scalability.
My key point is that people fetishize scalability, IMHO because of individual incentives towards wealth and power. However in practice making something scalable often means making it horrible. "Leaders" who get paid by scope and headcount are incentivized to build big frankenstein projects that are fundamentally disjointed. This makes it very hard to fix problems that come up once the practitioners dig in, because the structure imposed from above already precludes a solution.
This isn't universal, certainly there are problems where it can be broken down cleanly by specialization, but it really depends on the interfaces and communication bandwidth/abstraction leakiness between the working groups.
If you can avoid it great, but if you continue growing. You must face it.
An owner can see around corners. Identify patterns in customer requests and make platform-level changes to get ahead of the customer needs not yet fully articulated. If he does it right, they never will be. He has his thumb on the pulse of production. Knows, cares, and investigates when something merely seems a little weird, before it becomes a bug report or an outage. Sees the real need behind the “requirement” and negotiates a different way to satisfy the business that doesn’t tie the architecture up in knots.
Without the understanding of the codebase that comes from having written or worked on large parts of it, one cannot hope to do this well.
I get to be an owner at my current company and it is one of the reasons I’m very hesitant to ever leave.
Because a ticket churner worried about ownership of the entire product has his mind divided between the tickets and the product. A human spending all his effort on one task does a better job on that task than if he divided his effort on multiple tasks.
>An owner can see around corners. Identify patterns in customer requests and make platform-level changes to get ahead of the customer needs not yet fully articulated. If he does it right, they never will be. He has his thumb on the pulse of production. Knows, cares, and investigates when something merely seems a little weird, before it becomes a bug report or an outage. Sees the real need behind the “requirement” and negotiates a different way to satisfy the business that doesn’t tie the architecture up in knots.
Then there should be a dedicated person for this type of role. This dedicated person is called, the product manager. The product manager working closely with the software engineer is from a processing standpoint better than the software engineer owning the entire product. The software engineer no longer needs to context switch and you have two parallel brains working together.
However their is an inefficiency that exists in the communication between the product manager and the software developer. The software developer knows more about the code than the product manager and the product manager knows more about the interface between the product and the customer. Cross communication and lack of understanding between the engineer and the product manager is the source of many complaints.
If the software developer was the owner of the entire product than this communication efficiency is eliminated at the cost of the software developer having to have to divide his effort between multiple domains.
At a certain scale autonomy and complete ownership becomes impossible due to the complexity of the product. At this stage the company must embrace scalability at the cost of flexibility and ownership.
Ideally, personally and professionally we prefer autonomy but there hits a point where logistically it becomes fundamentally impossible due to complexity. Society itself must segment itself into specialists due to immense complexities it has to deal with. Eventually organizations within these societies must do the same as they grow bigger and begin to assimilate and represent a bigger portion of the society itself.
Managing 40 direct reports, each probably (given the scale the US military industrial complex operates) representing an operation of tens to hundreds more is not just difficult from a time management perspective; you're going to need to context switch between so many disciplines and activities that your head would spin.
Finally, your "bus factor" with a central manager like that would be through the roof.
Still the parts about ownership, accountability and details are all very true.
One might reasonably conclude otherwise, judging by the nuclear Navy's track record — not only on Rickover's watch, but also since his (forced) retirement in 1982.