Steven Sinofsky, former president of Microsoft's Windows division, writes about shipping software, product management, and how large organizations work.
HN commenters recommend it as a good read, and link it for his posts on remote engineering, performance appraisals, and decision-making from a former Microsoft executive.
I don't think the paper contradicts the second quote. It just points out that things got a lot more complex since.
"this again shows that getting software right is not easy."
Not easy, yes, but in my experience getting software right isn't too difficult. What seems impossibly hard is keeping software right, maintaining correctness in the presence of new requirements, compatibility constraints and just sheer caring about different things than we used to[1]. At some point I suspect you'd get a better design by rewriting things from scratch. But the way we do development makes rewriting stressful and error-prone, leading to the repeated arguments about whether rewriting is good or bad[2]. The question isn't whether rewriting is good or bad. Software is the most malleable medium known to man, and we should do all we can to embrace that essential malleability that is its primary characteristic and boon. The question is how not to mess up rewriting, how to keep our clay from gradually getting more and more brittle under the weight of added constraints.
(I work on this problem: https://github.com/akkartik/mu/blob/7f5a95cdbe/Readme.md. It's been 31 days since I last got on my soapbox in this forum: https://news.ycombinator.com/item?id=11285529.)
[1] "The future is a disagreement with the past about what is important." http://carlos.bueno.org/2010/10/predicting-the-future.html
[2] Against rewrites: http://www.joelonsoftware.com/articles/fog0000000069.html;…
Just a few days ago, Steven Sinofsky of a16z addressed some of the great points in this article. All the more relevant since he was in charge of some major MS products early on.[1]
Here's the part I most enjoyed:
"The bottom line is a decision has to be made. A decision means to not do something, and to achieve clarity in your design. The classic way this used to come up (and still does) is the inevitable “make it an option”. You can’t decide should a new mouse wheel scroll or zoom? Should there be conversation view or inbox view? Should you AutoCorrect or not? Go ahead and add it to Preferences or Options. But really the only correct path is to decide to have the feature or not. Putting in an option to enable it means it doesn’t exist. Putting in an option to disable means you are forever supporting two (then four, then eight) ways of doing something. Over time (or right away) your product has a muddled point of view, and then worse, people come to expect that everything new can also be turned off, changed, or otherwise ignored. While you can always make mistakes and/or change something later, you have to live with combinatorics or a combinatoric mindset forever. This is the really hard stuff about being a PM but the most critical thing, you bring a point of view to a product—if a product were a person you would want that person to have a clear, focused…
An interesting read related to the topic -- Sinovsky on performance evaluation and large orgs:
http://blog.learningbyshipping.com/2013/11/09/realities-of-performance-appraisal/
If Steve Sinofsky is to be believed, this is the natural order of things:
http://blog.learningbyshipping.com/2013/10/25/on-the-exploitation-of-apis/
This article was written by Steven Sinofsky, former president of the Windows Division at Microsoft.
http://blog.learningbyshipping.com/stevesi/
My $0.02 all here http://blog.learningbyshipping.com/2014/12/30/why-remote-engineering-is-so-difficult/