Maslow's Hierarchy of Needs (with the Wiki-incompatible apostrophe) 1 '''Biological''' Food and water, shelter. The obvious. 1 '''Security''' We want to feel safe. 1 '''Social''' We want to be loved and have friends. 1 '''Self-esteem''' 1 '''Self-Actualization''' Some folks would say that you don't pay attention to higher needs when lower ones remain unfulfilled. Others aren't so sure. As the Russian intelligentsia used to ask, "What is better, Pu'''sh'''kin or a pair of shoes?" (Pu'''s'''kin was a poet, considered the father of Russian literature. Yet the peasants were struggling to keep themselves fed and clothed.) I am curious as to whether a similar hierarchy might be applied to programming, whether extreme, agile, or otherwise? ---- Here's an attempt at a software development team's hierarchy of needs in relationship to their system: 1 '''Buildable''' -- the software is compilable, linkable, and installable on a target machine 1 '''Correct''' -- the software does what it is supposed to do; passes all tests 1 '''Efficient''' -- the software does not unduly burden the machine, or require users to wait for results/responses 1 '''Simple''' -- the operation of the system is easy to comprehend 1 '''Maintainable''' -- relatively easy to change the software to meet new needs 1 '''Cool''' -- the team enjoys working on the software Some people would put coolness ahead of the others. -- KrisJohnson That latter deserves a page of its own - if only I had an appropriate name for it. ''Yes, I like this "software hierarchy of needs". I know many people feel that "portable" code is important; I'm not sure where that would fit. Some people would add another level "runs without crashing" between "buildable" and "Correct". But I am reluctant to add complexity. -- DavidCary'' I like this hierarchy. Portable might be a part of "Maintainable" and "Runs without crashing a part of "Correct"? -- AurelianoCalvo I agree that portable should be part of "Maintainable". Portable's primary benefit is that you only have to maintain one version when you have different target machines. I think "Buildable" and "Correct" should be merged into a "Usable" category. The primary goal of most software is to do something useful. The user is no better off with buildable software that does the wrong think than with unbuildable software. In some cases the user might be better off with the unbuildable software. "Usable" wouldn't need to be free of crashing, but it should crash rarely enough to get something done with it. I also have some reservations about having different levels for "Efficient", "Simple", and "Maintainable". They all seem to be different forms of efficiency to me. -- MartinShobe ---- See also AbrahamMaslow