Will the team be able to implement it? Is the responsibility uniformly distributed? Is it documented? Is there duplication? High cohesion and low coupling? Is it as simple as possible?
These and the others are part of the Top 10 Elements of Good Software Design by Mr Ed. Very good list.
How do you build a good software? In this article, What Do Users Want?, Larry Constantine explains what users want and how you build software to accomodate that. I’ll give you the portions of the article that I liked the best. However, you should read the first four pages of the article: it will give the the principles of usability. A required read for all software engineers.
What users really want is good tools. They want systems that are easy to learn and easy to use, and that help them do their work. They want software that doesn’t slow them down, that doesn’t trick or confuse them, that doesn’t make it easier to make mistakes or harder to finish the job.
How do you achieve that? Usage-Centered Design
User-centered development was not really such a bad idea but it, too, missed an important point: all software systems are just tools. Since good tools support work, making someone’s job easier, faster, simpler, more flexible, or more fun, what is really important is not building software around users, but around uses. It may be nice to get software and applications developers to understand users, but what really matters is understanding what users are doing or trying to do, to understand the intended and necessary usage. Users are not the center of the universe. To design more usable software the most important issue is neither the user nor the user interface, but usage.
Why? Why is this needed? Why would users interact with this software? What are they trying to accomplish?
Just asking the question helps focus on fundamental issues of what would make the system more usable.
Principal Principles of Usability
Second Rule: Efficacy: “Good systems do not interfere with or impede efficient use by a skilled user having substantial experience with the system.”
Third Rule: Progression: “Good systems facilitate continuous advancement in knowledge, skill, and facility and accommodate progressive change in usage as the user gains experience with the system.”
Fourth Rule: Support: “Good systems support the real work that users are trying to accomplish, making it easier, simpler, faster or more fun.”
Fifth Rule: Context: “Good systems are suited to the conditions and environment of the actual operational context within which they are deployed.”
Visibility Principle: Keep all needed options and materials for a given task visible without distracting the user with extraneous or redundant information. Instead of WYSIWYG, use WYSIWYN: What-You-See-Is-What-You-Need.
Feedback Principle: Keep users informed of actions or interpretations, changes of state or condition, and errors or exceptions using clear, concise, and unambiguous language familiar to users.
Structure Principle: Organize the user interface purposefully, in meaningful and useful ways that put related things together and separate unrelated things based on clear, consistent models that are apparent and recognizable to users.
Reuse Principle: Reduce the need for users to rethink and remember by reusing internal and external components and behaviors, maintaining consistency with purpose rather than merely arbitrary consistency.
Tolerance Principle: Be flexible and tolerant, preventing errors where possible by tolerating varied inputs and sequences and by interpreting all reasonable actions reasonably; reduce the cost of mistakes and misuse by allowing undoing and redoing.
Simplicity Principles: Make simple, common, tasks simple to to, communicating straightforwardly in the user’s own language and providing good shortcuts that are meaningfully related to longer procedures.
Do you know Singleton, Factory, Decorator, Adapter, Fa軋de, Strategy, State, MVC? As you might have guessed, they are all patterns from the GoF book. But if you are like me, you might know couple of them and a lot of times you are confused. If that’s the case, you should read this article on java.net about those patterns. The authors prepare you for a holiday conversation on design patterns. They will help you look like a true guru. Fun and interesting article. I really liked it.