As most of developers working in a small teams or projects I have to work on UI. Should it be a new screen, complete feature with some UI interactions or just a fix of some font/alignment/style issues.

When you’re in “developer mode” criteria for “done” is more or less precise: tests are green, code is OK and metrics (if you have some) are acceptable.

Then I have to do some UI work and when I wear my Designer hat it gets difficult to define “done” criteria. We can easily appreciate “functional” quality of one particular screen. But it’s Design and Usability values are more difficult to formalize. You can check some UI Guidelines, you can show your work to a stakeholder or client. They both will say it’s OK. Then you’re improving it by grouping better screen’s content. They again say “it’s OK”. You’re checking alignments, highlight frequently used commands and do subtle color changes to application’s color set. And again, “it’s OK”.

Is it better than before? Definitely. Is it done? Well … If you’re at your “it’s good enough” point, you probably will stop. Until next time…

To some degree, this tendency towards perfection it’s applicable to development too. A developer can (almost) infinitely polish, optimize & refactor existing code. The code will be better. Will it be observable by final user? Less likely (unless it’s a performance issue). And this is the difference with designer’s work: any change will potentially be appreciated by end-user.

That’s why I think that impact of Design and Usability on any software product is more important that it’s internal beauty.