If you're buying or building a house, go buy this book right now: The Not So Big House by Sarah Susanka. If you're building software, I also recommend it.
To me, there are a lot of similarities between architecture and computer science. It's hard to work in software and not have heard of Design Patterns, by the "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides), which was inspired by another architecture book: A Pattern Language by Christopher Alexander. Personally, I'm a big fan of Frank Lloyd Wright and his approach to architecture (though I wish he'd been taller).
Susanka has started a whole cottage industry after the success of The Not So Big House. She has a web site, http://www.notsobighouse.com, and a number of follow-on books, including Creating the Not So Big House, Inside the Not So Big House (about details within your home), Outside the Not So Big House (about landscaping and gardens), and Not So Big Solutions for Your Home. She also wrote The Not So Big Life, a book about philosophy and and living that has received mixed reviews. Maybe she should have stuck to architecture. But what she has to say really does resonate with software.
In short, Susanka says that you should build spaces that you actually need and will use, not with spaces that you're supposed to have. Build for the way you live, not the way other people live, or the way you're supposed to live. How many houses have you been in where the owners have rooms they never use? The formal living room with furniture nobody sits in, or the formal dining room with the elegant but uncomfortable chairs that have never seen a meal, or the large, cold foyer that people walk through, or avoid completely because they're coming in the side entrance (I remember visiting one house where the front door was covered with cobwebs, it had been so long since it had been used).
Build for comfort, not for scale. To use one example that I see all the time, a large kitchen isn't better -- it's simply bigger. When we redid our kitchen, I did the design myself and I'm proud to say that four people can comfortably work in it at the same time without bumping into each other, pretty remarkable for a kitchen that is only 160 square feet (and more than a third of that space is taken up by the cabinets and appliances). It does have an adjacent eating area of another 130 square feet, but if you include that area, you can another person or two. It is by no means what you would call a "gourmet kitchen" (no Wolf range, no Sub-Zero freezer), but we included things that made us comfortable and that we would use -- my wife's top wishes were a bay window, two sinks, and a broom closet, while mine were a pizza oven and a dedicated space for rolling out pizzas. And we left out things that we didn't want. The kitchen is not organized in the classic sink-refrigerator-stove triangle (it's more like a pentagon). We have very few overhead cabinets and there's no built-in desk, despite the fact that the saleswoman selling me the cabinets really thought that we needed them.
Even if you're not building (and most of us aren't), you still have a choice --it's in the way you organize the space. We didn't build our house, but we use every room in our house every day. If you can't say the same thing, reconsider how you're using your space.
Getting back to computers, if all this sounds like it's what we should do with software, it is.
- Build features that are actually needed and will get used.
- Build for the way users actually use the software, not the way we'd like them to.
- Bigger software isn't better -- it's just bigger.
- Organize what you do have in ways that make it all as usable as possible.
- If it's not working, reconsider how you're using your space.