BenNorthrop.com http://www.bennorthrop.com/ Thoughts on economics, philosophy, and building software. en-us Thu, 20 May 2010 00:00:00 -0700 An Architect's Morality http://www.bennorthrop.com/Essays/2010/architect-morality.php

There was an interesting article in Nature, arguing that our moral intuitions are formed as much by rational deliberation as by our experiences (despite the latter being more en vogue in academic circles - who knew!).

It got me thinking about how in any field (whether it be software development or biology, finance, etc.) people have very finely developed intuitions about what is "right" or "wrong" - something that seems akin to moral judgement. This happens in software development without a doubt - people who have been in the field for a while can have very powerful, immediate, gut reactions to problems - they just know that a certain path is "right" or "wrong".

The question I'm kicking around is, in software development, how are our "moral" intuitions best formed - by rational deliberation (e.g. reading, observing, studying, listening) or personal experience (playing many roles, living in the trenches)? In other words, which route would lead to greater "moral wisdom" - more study or more lived experiences?

(This question is a lot like the kerfuffle about Justice Sotomayor's "wise latina" comments months back - is she more "wise", coming from a rough neighborhood in the Bronx, than someone who came from the upper-middle class 'burbs?)

My sense is that no amount of study or observation can make up for living in the trenches and feeling the pain of bad decisions (your own and others'!). I can read all day about why unit testing is great, but it doesn't sink in to the level of "moral intuition" until I live through an experience where there's a million lines of code, no unit tests, and so no clue as to whether your change broke something else or not.

Anyway, just a thought...

Thu, 20 May 2010 00:00:00 -0700 http://www.bennorthrop.com/Essays/2010/architect-morality.php
Collective Code Ownership and Craftsmanship http://www.bennorthrop.com/Essays/2010/collective_ownership.php

Agile methodologies hinge on a model of collective code ownership - basically, the idea is:

I may work on module A this iteration and you on module B, but next iteration I may work on B and you on C.

No developer has sole responsibility for any piece of the system, we all own it together. If I need to update some piece of the system to implement my assigned user story, I can do it, with the caveat that unit tests should pass and probably some quality check should be met (e.g. peer review, etc.).

In any non-trivially sized team, this is probably a necessity; the alternative model, strict ownership of code, will just yield unnecessary gridlock, turf-wars, and code ghettos as developers operate unchecked in their own silo, hording knowledge, and protecting the sanctity of their individual assets at the expense of the overall architecture.

And even knowing this, that individual code ownership isn't really feasible in an organization, I still think that when we accept the model of collective ownership, something important is lost: craftsmanship.

Sure, Agile advocates would argue that pride of ownership just extends to the work of the team rather than just that of the individual. To some degree this does exist, but it's not the same. When we have ownership of something, whether a design document, an API, or a UI screen, it's our reputation on the line, our creativity and execution that make it a success or failure. We make decisions on our own, quickly, without having to reach team consensus, for good or for ill, accepting the consequences. And when it does succeed, we derive a strong satisfaction from knowing that someone found value in what we alone designed and created. We helped make something better, easier, faster. The freedom of owning our work is what makes programming fun...and meaningful.

Without ownership, this satisfaction is muffled. When people collectively own everything, no one owns anything in particular. Collective ownership often means collective design, and so there's less investment in the overall success, because, hey, these aren't necessarily my ideas, they're the group's. And because everyone's a stakeholder in all the code, decisions are often made via sophistry and compromise, producing an end design that often looks more like a piece of legislation and less like a piece of craftsmanship.

It reminds me of a favorite quote of mine from Steinbeck in East of Eden:

Our species is the only creative species, and it has only one creative instrument, the individual mind and spirit of man. Nothing was ever created by two men. There are no good collaborations, whether in music, in art, in poetry, in mathematics, in philosophy. Once the miracle of creation has taken place, the group can build and extend it, but the group never invents anything. The preciousness lies in the lonely mind of a man.

And now the forces marshaled around the concept of the group have declared a war of extermination on that preciousness, the mind of man. By disparagement, by starvation, by repressions, forced direction, and the stunning hammerblows of conditioning, the free, roving mind is being pursued, roped, blunted, drugged. It is a sad suicidal course our species seems to have taken.

And this what I believe: that the free, exploring mind of the individual human is the most valuable thing in the world. And this I would fight for: the freedom of the mind to take any direction it wishes, undirected. And this I must fight against: any idea, religion, or government which limits or destroys the individual. This is what I am and what I am about. I can understand why a system built on a pattern must try to destroy the free mind, for that is one thing which can by inspection destroy such a system. Surely I can understand this, and I hate it and I will fight against it to preserve the one thing that separates us from the uncreative beasts. If the glory can be killed, we are lost.

I know, to argue against collective ownership in the era of wikipedia, social media, and open source is probably insane. Working collaboratively obviously can produce high quality results, and benefit the collaborator as well.

Even still, talking to colleagues and friends that do software development on teams, I see this unsatisfied need to own. Just about every programmer has dreams about their own side project, where he makes the decisions, where he is responsible. It's this freedom which most of us need, and which produces works of craftsmanship.

Fri, 16 Apr 2010 00:00:00 -0700 http://www.bennorthrop.com/Essays/2010/collective_ownership.php
Easy or Else http://www.bennorthrop.com/Essays/2010/cognitive_fluency.php Cognitive fluency is the theory that things that are easier to think about seem to be more true, intelligent, and likeable. What this means for programmers. Wed, 07 Apr 2010 00:00:00 -0700 http://www.bennorthrop.com/Essays/2010/cognitive_fluency.php Anchors Away! http://www.bennorthrop.com/Essays/2009/anchoring_estimates.php How can a developer communicate an honest, but high, estimate to management? Try the concept of an anchor, from behavioral economics. Tue, 21 Jul 2009 00:00:00 -0700 http://www.bennorthrop.com/Essays/2009/anchoring_estimates.php What is 'Good' Architecture? http://www.bennorthrop.com/Essays/2009/what_is_good_architecture.php Can "good" architecture be defined in purely pragmatic terms? If the system fulfills the needs of the person or organization who funds its existence, it's successful ipso facto! Thu, 30 Apr 2009 00:00:00 -0700 http://www.bennorthrop.com/Essays/2009/what_is_good_architecture.php Building a Better Resume for Developers http://www.bennorthrop.com/Essays/2008/a-better-developer-resume.php The developer resume is broken. It's dense. It's long. It's static. I recently built something better - I hope! Fri, 12 Dec 2008 00:00:00 -0800 http://www.bennorthrop.com/Essays/2008/a-better-developer-resume.php The Code Review Potluck http://www.bennorthrop.com/Essays/2008/code_review_potluck.php Fagan-style code reviews do work, but seldom do we have the time or discipline to actually do them regularly. There is another way. Fri, 17 Oct 2008 00:00:00 -0700 http://www.bennorthrop.com/Essays/2008/code_review_potluck.php Does Programming to Interfaces Buy Us Anything? http://www.bennorthrop.com/Essays/2008/program-to-interface-not-implementation.php Most often, coding to interfaces is just dogmatically applied, adding to code bloat and developer frustration and providing very little real value. Wed, 28 May 2008 00:00:00 -0700 http://www.bennorthrop.com/Essays/2008/program-to-interface-not-implementation.php Deliberative Development http://www.bennorthrop.com/Home/Blog/deliberative_development.php Silo development has it's advantages, namely speed. But political philosophy's Deliberative Democracy has something to say about the negative consequences. Tue, 22 Apr 2008 00:00:00 -0700 http://www.bennorthrop.com/Home/Blog/deliberative_development.php 7 Strategies for Unit Testing DAOs and other Database Code http://www.bennorthrop.com/Home/Blog/unit_testing_daos_and_database_code.php Creating repeatably passing unit tests for an enterprise application is hard work, mostly because of the reliance on volatile data. Here are 7 common approaches for testing database code. Fri, 21 Mar 2008 00:00:00 -0700 http://www.bennorthrop.com/Home/Blog/unit_testing_daos_and_database_code.php The Architect's Dilemma http://www.bennorthrop.com/Home/Blog/2008_01_20_decision_tree.php There's a natural tension between the philosophies of up-front design (BDUF) and in-time design (YAGNI). Can decision trees help? Sun, 20 Jan 2008 00:00:00 -0800 http://www.bennorthrop.com/Home/Blog/2008_01_20_decision_tree.php Politics and Programming http://www.bennorthrop.com/Home/Blog/2008_02_08_politics_and_programming.php We as programmers have beliefs about software development. We as citizens have beliefs about government. Is there any connection or correspondance between the two? Tue, 12 Feb 2008 00:00:00 -0800 http://www.bennorthrop.com/Home/Blog/2008_02_08_politics_and_programming.php Managing Code Quality with PMDReports http://www.bennorthrop.com/Home/Blog/2008_01_04_pmdreports.php Introducing my pet project, PMDReports, for managing code quality. Fri, 04 Jan 2008 00:00:00 -0800 http://www.bennorthrop.com/Home/Blog/2008_01_04_pmdreports.php The Search for a Good UML Tool http://www.bennorthrop.com/Home/Blog/2006_10_26_uml.php When we want a UML tool, it's most often to help us either design, understand, or maintain. There are a lot of tools out there, and all are not created equal. Thu, 26 Oct 2006 00:00:00 -0700 http://www.bennorthrop.com/Home/Blog/2006_10_26_uml.php Starting a Design Patterns Discussion Group http://www.bennorthrop.com/Home/Blog/2006_11_01_design_patterns.php Once upon a time, I started a design patterns discussion group to slog through that distinguished blue and white book that decorated my bookshelf. Here are my lessons learned. Wed, 01 Nov 2006 00:00:00 -0800 http://www.bennorthrop.com/Home/Blog/2006_11_01_design_patterns.php Why Code Quality Tools Work http://www.bennorthrop.com/Home/Blog/2007_01_17_code_quality.php Using rational choice theory to explain why PMD, CheckStyle, and other code quality tools work in the real world. Wed, 17 Jan 2007 00:00:00 -0800 http://www.bennorthrop.com/Home/Blog/2007_01_17_code_quality.php Why are our Programming Gods so Unkempt? http://www.bennorthrop.com/Home/Blog/2007_12_17_unkempt.php Does a theory of finite will-power say anything about our software Gods, or the environment we work within? Mon, 17 Dec 2007 00:00:00 -0800 http://www.bennorthrop.com/Home/Blog/2007_12_17_unkempt.php Is it Irrational to Comment your Code? http://www.bennorthrop.com/Home/Blog/2007_11_17_prisoners_dilemma.php We know we should comment code, but will we? Game Theory's Prisoner's Dilemma says, "probably not". Sun, 11 Nov 2007 00:00:00 -0800 http://www.bennorthrop.com/Home/Blog/2007_11_17_prisoners_dilemma.php