Xp User Interface Pitfalls

XpPitfalls

Solution: merciless model-view separation.

Solution: mock objects.

[JimKingdon?: Which object are you mocking? If you are mocking the model object in order to test the view, I've done some of that but the mock objects can be a little cumbersome to deal with. Often it is better just to use a real (or in-memory) model object, together with a relatively simple-minded way of assessing success (e.g. in a Web application assert that HTML contains the string "A Touch of Honey" having used that string only one place in your test data).]

Solution: Break your user interface into multiple classes and test them separately. For example, if your test code is confused by "Book" showing up in navigation and also as a table heading, test the display of navigation and the display of table code separately. -- JimKingdon?

Solution: design your interface per release, not per iteration. Just because you implement the application one feature at a time doesn't mean you don't have any idea where you're going, and it definitely doesn't mean you are forced to churn the UI every iteration. The Planning Game should produce a set of features covering many iterations. Give the designers this more complete set of features (with the understanding that there may be additions or deletions as time goes on) and let them work alongside the developers to create a pleasant user experience.

Solution: Release at the end of each iteration and make no more than one major UI change per iteration. Alert the user to the change in a "tip o' the day" feature. (I guess it's a "tip o' the iteration".) I think anyone can deal with one major UI change per week.

Solution: inform the users of changes (verbally, release notes, whatever works). They aren't necessarily as hostile to change as they appear to be if things are sprung on them and they don't understand the new way of doing something. -- JimKingdon?

Solution: Use a UI framework which generates a usable default interface for every object. NakedObjects describes one such implementation.

Solution: Don't have enabled or disabled non-implemented elements. Disabled (gray) items should mean that the feature is there but you can't use it right now because of some state the application is currently in. Non-implemented features that for some reason have a UI already should be drawn in red, have rough-looking icons, non-anti-aliased (I guess that would be aliased) text, etc.

Idea So Crazy It Just Might Work: Perhaps have your UI objects linked to the customer tests; if the tests fail, the UI elements are drawn in red. If the tests pass, the UI elements are drawn regularly. -- ErikHanson

Solution: Clarify where you are in the project. Do you want a tool which handles one small part of the job, and can be used for such in production (this is great if feasible, but often isn't feasible)? Is the main function of the system for providing demos (in which case top-level screens should generally look complete even if some of the screens 2 or 3 levels in are rough or nonexistent)? Or is the Customer-as-part-of-developer-team the only one looking at it at this stage (in which case it is probably better to omit all non-implemented items)? -- JimKingdon?

When the time comes to CaptureBugsWithTests, you need a test framework to hang the new test in. If the test framework does not exist yet, you have two bugs, and a hit to your velocity.

Start the GUI TestFirst, even if you eventually author most changes without bothering to test them.


EditText of this page (last edited July 2, 2003) or FindPage with title or text search