Hail the Maintainers

I am finally clearing out some old Instapaper articles. One that I really enjoyed was Andrew Russell’s examination of our civilizational obsession with “innovation” at the expense of maintenance and sustainable operability.

This is something we in cloud services learned fairly recently. Features are increasingly table stakes, fundamentals (e.g. availability, supportability, security, privacy, operability, maintainability, etc.) are the crucial differentiators.

Hail the Maintainers 

 

 

Kevin Kelly on design and the Scientific Method

[I noticed I had 36 posts in the drafts folder some dating back years. It can be quite fascinating to see what had your attention years ago. This one, last edited in March 2009, is just collection of notes for a post, but there were some gems from Kevin Kelly]

Totally engrossed in the subject of resources and pipeline management, information design, intermediate technology and dashboard design

“n-Dimentional gigantic hypercube of all the possible solutions to how to design the things and we are just wondering around trying to find the best one.” –¬† Stack Overflow podcast

How do committees invent?

In a discussion on Zen and The Art of Motorcycle Maintenance, Kevin Kelly made this observation:

Consider a parallel with software design:

* Statement of requirements
* [ architect/design
* [ implement/test
* deliver

That is, Scientific Method consists of a statement of the
problem, followed by a repetition of: generate hypotheses
and perform experiments to test hypotheses, followed by
From Pirsig’s description of Scientific Method:

* Statement of problem
* [ hypothesis
* [ experiment
* conclusion

a conclusion. Software design can be considered to be a
Statement of requirements, followed by a repetition of:
generate a proposed design then implement and test it;
followed by delivery of the final system.

Now, Pirsig goes into the fact that what seems like it
should be the hardest part–generating viable hypotheses–
in practice turns out to be the easiest. In fact, there’s
no end to them; the act of exploring one hypothesis brings
to mind a multitude of others. The harder you look, the
more you find. It is an open, not a closed, system.

I would suggest that this correspondence holds: that
the set of possible designs to meet the requirements is
infinite; that the act of generating a design brings to
mind multiple alternatives; that generating a design
increases, rather than decreases, the set of possible
alternative designs.

This is argument by analogy and therefore not particularly
forceful, but I feel certain, myself, that it holds. It
certainly feels right, intuitively. I think it ties in
with Goedel’s work on decidability: that any sufficiently
complex system–which any programming language is–is able
to say more than it can prove. Thus there’s always another
hypothesis that might give better answers; there’s always
another design that might solve the problem better. There’s
always room for an architect that can pull the magic out
of the clouds.

That last bit ties in to a point I’d like to expand on. That
is, that all formalisms, or design methodologies, are in
some way limiting. By adhering strictly to a particular
design process, you forego the gains that come from
inventing a new, better process.

Admittedly, you also ‘forego’ the time lost on ideas
that don’t work out.

Process or methodology is a means of getting a Ratchet Effect,
or Holding The Gains. It’s a way of applying
a pattern of development to other, related, projects.
There needs to be a way of allowing for new developments
and ideas, though.

“There’s no one more qualified to modify a system than
the last person to work on it”. That seems counter-
intuitive; one would think that the people that created
it understand it best. However, they’ve moved on to
other things, while the later maintainers got the
benefit of all the original designers’ work plus,
in addition, all that was later learned about the
system, such as how it reacts to the customers, and
how it responds to maintenance.

Software design is made up partly of flashing new insights,
and partly of routine solutions that have been invented over
and over again. Codifying patterns is a way of ratcheting
the whole community up to near the level of the leaders, at
least in terms of the routine solutions.

It’s still necessary to allow for the insights, though. A
lot of the big-company emphasis on process ignores this, assuming
that nothing is ever new, and that the answers of yesterday
are good enough for tomorrow.

(this is turning into a pretty good rant, but I think I’ll
cut it off for now)

— KevinKelley – http://clublet.com/why?ZenAndTheArtOfMotorcycleMaintenance

[Dec 2014: Sadly Clublet.com is not working, and archive.org has no archive of this page]

Devops classic: Dev and Ops Cooperation at Flickr

This presentation is a classic, one of the founding media of the Devops movement.

The summary of the presentation is the kernel of what we know as Devops today:

  1. Automated Infrastructure
  2. Shared version control
  3. One step build – code to set of files in one step
  4. One step deploy
  5. Shared metrics
  6. Use IRC and IM Robots (they use IRC and squirt logs and alerts into their IRC stream. Search engine indexes them.)
  7. Culture
    1. Shared Run-books and Escalation plans
    2. Healthy attitude about failure – plan to respond, not just prevent. Fire drills.
    3. No finger-pointing and blame

The slides are here:

Also see Matt Zimmerman’s excellent post on Devops and Cloud.