Platform.sh
Presented by Larry Garfield (@Crell)
implements Huggable
Lives on as IBM zSeries
Is it still valid?
Adding [people] to a late software project makes it later.
—The Mythical Man-Month
Even for Unskilled tasks
[People] and months are interchangeable commodities only when a task can be partitioned among many workers with no communication among them.
—The Mythical Man-Month, page 16
(Depending on swim lanes,
and how early)
@Crell Get a second speaker on stage, and give both halves of the talk simultaneously. You'll be able to fit in 2x the material.
— Greg Anderson (@greg_1_anderson) September 7, 2016
What should we learn from this?
A substantial bank of test cases, exploring the input range and probing its boundaries, must be prepared, run, and recorded.
—Page 6
Automated testing was already a thing in 1975.
What's your excuse?
Extrapolation of times for the hundred-yard-dash shows that a man can run a mile in under 3 minutes.
—Page 88
Effort = Constant * NumInstructions1.5
—Nanus and Farr, Page 89
Num interactions | Instructions per person-year |
---|---|
Very few | 10,000 |
Some | 5,000 |
Many | 1,500 |
Joel Aron, Page 90
Large: 25 programmers, 30,000 instructions
But that's for assembly!
PL/I code follows same curve ...for statements
More power/statement => more productivity
Lines of code in Symfony 4: 511369
What should we learn from this?
Only when one writes do the gaps appear and the inconsistencies protrude. The act of writing turns out to require hundreds of mini-decisions, and it is the existence of these that distinguishes clear, exact policies from fuzzy ones.
—Page 111
The crucial task is to get the product defined. Many, many failures concern exactly those aspects that were never quite specified.
—Page 142 via V.A. Vyssotsky of Bell Labs Safeguard Project
The manual, or written specification, is a necessary tool, though not a sufficient one.
—Page 62
Divide and conquer
Plan to throw one away; you will, anyhow.
—Page 116
The approach necessitates top-down design, for it is a top-down growing of the software.
—Page 201
Common sense, if not common practice, dictates that one should begin system debugging only after the pieces seem to work.
—Page 147
Wrong!
(Credit: http://comunidad.iebschool.com/)
The problem space is hard
The tools are hard to use
I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation.
—Page 182
There is no single development... which by itself promises even one order of magnitude improvement in productivity, in reliablity, in simplicity
—Page 183
The most radical possible solution for constructing software is not to
construct it at all.
—Page 197
Hey, look, Open Source!
The way to be more productive is to write less code
The way to be more productive is to reuse more code
Software construction is a creative process.
—Page 202
Study after study shows that the very best designers produce structures that are faster, smaller, simpler, cleaner, and produced with less effort. The differences between the great and the average approach an order of magnitude.
—Page 202
The conceptual integrity of the product, as perceived by the user, is the most important factor in ease of use.
—Page 255
Ease of use = functionality / conceptual complexity
Simplicity and straightforwardness proceed from conceptual integrity.
—Page 44
Conceptual integrity is the most important consideration in system design.
—Page 42
...conceptual integrity of the product not only makes it easier to use, it also makes it easier to build and less subject to bugs.
—Page 142
Smart division of labor
The design must proceed from one mind, or a very small number of agreeing, resonant minds.
—Page 44
The architect… is the user's agent. It is [their] job to bring professional and technical knowledge to bear in the unalloyed interest of the user, as opposed to the interest of the salesman, the fabricator, etc.
—Page 45
But that's Cathedral design; that's aristocracy!
Cathedrals are still standing...
Designs watch dial and hands
Builds gears and bells
The architect must always be prepared to show an implementation for any feature he describes, but he must not attempt to dictate the implementation.
—Page 62
Ongoing cooperative effort, high communication
What should we learn from this?
After teaching a software engineering laboratory more than 20 times, I came to insist that student teams as small as four people choose a manager and a separate architect.
—Page 257
The idea that people knew a thing or two in the '70s is strange to a lot of young programmers.
Director of Developer Experience Platform.sh
Idea to Cloud Hosting
Stalk us at @PlatformSH