EppsNet Archive: Software Design

Amateur Design

The worst scenario I can imagine is when we allow real customers, users, and our own salespeople to dictate “functions and features” to the developers, carefully disguised as “customer requirements.” Maybe conveyed by our Product Owners. If you go slightly below the surface, of these false “requirements” (“means,” not “ends”), you will immediately find that they are not really requirements.… Read more →

Every New Feature is a New Failure Point

The TPMS warning light on my car dashboard is lit up, which, according to the owner’s manual, indicates a malfunction in the Tire Pressure Monitoring System, a system designed to alert me, via a different warning light, when the tire pressure gets too low. It’s a completely unnecessary system to begin with because I can monitor the tire pressure myself,… Read more →

Rough Layouts Sell the Idea Better Than Polished Ones

This was written by an ad man but I can see it applying to other endeavors, like designing a software interface: If you show a client a highly polished computer layout, he will probably reject it. There is either too much to worry about or not enough to worry about. They are equally bad. It is a fait accompli. There… Read more →

Kanban, Scrum, User Stories, System Design

Scrum-ban Kanban bootstrap Elements of taskboard design A Kanban System for Software Engineering Naked Planning Explained – Kanban in the Small Kanban Development Oversimplified The new user story backlog is a map Read more →

Customer Engagement

You want to actively elicit feedback from end users using short development cycles or by using prototypes and models during analysis. A good feedback cycle has the appearance of causing problems. It will cause emergent and latent requirements to surface. That means rework: the value of prototypes is that they push this rework back into analysis, where it has more… Read more →

Convergence

The distinctive conduct that marks successful project teams is this: They know there is a time to diverge and a time to converge. That is, in each of the project planning phases (e. g., feasibility, conceptual, definition, execution), the team first moves outward (diverge) to gather information and ideas and to generate alternatives — only then does the team move… Read more →

Visualize the Properties

Imagine and identify the few properties of your product or service that will gratify the customer’s need. Visualize the properties, desire them yourself, and everywhere ensure and intensify their presence. — Jim McCarthy Read more →

Evolving a System

A complex system that works is invariably found to have evolved from a simple system that works . . . A complex system designed from scratch never works and cannot be patched up to make it work. — John Gall Read more →

Software Tips from Bjarne Stroustrup

Here are 38 tips from the designer of the C++ programming language. These in particular jumped out at me: [5] Don’t try technological fixes for sociological problems [8] Design processes to encourage feedback [9] Don’t confuse activity for progress [10] Don’t generalize beyond what is needed, what you have direct experience with, and what can be tested [19] Use existing… Read more →

You Have to Explain Something to a Computer

When you’re doing programming, you have to explain something to a computer, which is dumb. When you’re writing a document for a human being to understand, the human being will look at it and nod his head and say, “Yeah, this makes sense.” But there are all kinds of ambiguities and vagueness that you don’t realize until you try to… Read more →

Best and Worst Software Features of the Week

I was typing in Microsoft Word and I started a bulleted list with an item like this: Topic1. A sentence about Topic1. And another one. Then I hit the Enter key. What do you think happened? Not only did I get another bulleted list item, Word set the font to bold! So I typed this: Topic2. And as soon as… Read more →

Lotus Notes Sucks

I’m working with a company that uses Lotus Notes. It’s been more than 10 years since I’ve had to use Notes and it’s as bad as ever. It’s probably the worst piece of software ever released by a major company. The worst feature — well, it’s hard to pick a worst feature, but one of the worst features — because… Read more →

Respect the Classics, Man: No Silver Bullet

This essay by Turing Award-winner Fred Brooks is almost 20 years old now. Sadly, the ideas on incremental development are still considered outside the mainstream in IT, which continues to favor the widely-discredited waterfall approach. Read more →

Requirements are Boring

You’re working on the requirements for Project X? Boring. You’ve got someone figuring out architecture for Project Y? Boring. The guys are designing Project Z? Boring. . . . Who has built something that their customer will certify is part of what they want? That’s interesting. Who has shipped something to their customer and the customer is using it? That’s… Read more →

A Couple of Quotes on Software Design

I conclude that there are two ways of constructing a software design: One way is to make it so simple there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.   A feature which is omitted can always be added later, when its design and its implications are well… Read more →