-
Notifications
You must be signed in to change notification settings - Fork 123
Component Quality Evaluation
When evaluating or improving a component, check the expectations for each area you're working in. Each area lists what to look for across user experience (UX), developer experience (DX), and maintainability (MX).
Implementation code quality expectations.
UX (User Experience):
- Visual Design
- Engaging presentation with appropriate shadows, animations, depths
- Consistent with platform design language (spacing, typography, brushes)
- Polished and professional appearance
- Accessibility
- Screen reader support (narration, semantic structure)
- Localization support (multiple languages, cultures)
- High contrast theme support
- Keyboard navigation (all functionality accessible without mouse)
- Interaction
- Stable and intuitive behavior
- Delightful to use (smooth, responsive, predictable)
- Component works correctly (no broken functionality)
- Flexibility
- Responsive layouts (adapts to different screen sizes)
- Adaptive input (touch, mouse, keyboard, pen)
- Natural fit on every device (TV, desktop, tablet, phone)
- Performance
- Feels responsive and performant
- No unnecessary delays or sluggishness
- Smooth animations and transitions
- Keep choices accessible
- Sensible defaults for common scenarios
- Don't suppress or erase user choice
- Manage choice complexity (schemas, styles)
DX (Developer Experience):
- API Design Quality
- Clear, consistent, well-designed public API surface
- Not monolithic (piecemeal, focused responsibilities)
- Follows platform patterns and conventions
- Sensible defaults with flexibility for edge cases
- Discoverability
- IntelliSense tooltips clear and helpful (XML comments)
- API surface intuitive and predictable
- Non-trivial descriptions (not just property name repetition)
- Conceptual documentation available
- Learning Curve
- Easy to learn from samples and documentation
- Common use cases demonstrated clearly
- Progressive disclosure (simple scenarios easy, complex possible)
- Flexibility
- Composable (components work together naturally)
- Extensible (can derive, retemplate, extend behavior)
- Platform differences accommodated (UWP/WinUI3/Uno)
- Edge Case Accommodation
- API handles non-default scenarios
- Doesn't require workarounds for uncommon needs
- Balances MVP convenience with edge case flexibility
MX (Maintainability):
- Architectural Quality
- Self-isolated domains (changes don't cascade between components)
- Piecemeal composition (clear responsibilities, reusable parts)
- Appropriate abstraction levels
- Clear boundaries between functional areas
- Code Maintainability
- Readable, understandable structure
- Comments detail rationale, especially for non-obvious solutions
- SOLID principles applied
- MVVM patterns where applicable
- Technical debt minimal or explicitly tracked
- Test Coverage
- Prevents regressions
- Adequate MVP functionality coverage
- Maintainable test code (easy to read, reuse, update)
- Tests pass consistently (local and CI)
- Breaking Change Minimization
- Evolution paths considered upfront
- API designed to minimize future breaks
Example code quality expectations.
DX:
- Easy to learn from (clear, progressive complexity)
- Demonstrates common use cases
- Shows edge cases and flexibility
- Simple examples first, advanced scenarios available
- Demonstrates composability patterns
- Shows sensible defaults and customization options
MX:
- Demonstrates best practices (MVVM, SOLID, patterns)
- Maintainable example code (not overly complex)
- Examples show proper domain isolation
- Samples stay current with source changes
UX:
- Samples demonstrate good UX patterns
- Show accessibility features in action (RTL, High Contrast, Narrator)
- Showcase visual design capabilities
Documentation quality expectations.
DX:
- Discoverable via IntelliSense (XML comments complete)
- Clear conceptual explanations
- API reference complete and accurate
- Non-trivial descriptions (meaningful, not property name repetition)
- Shows how to integrate and use
- Progressive disclosure (getting started โ advanced)
- Edge cases documented
MX:
- Reference docs: XMLDoc comments with rationale for non-obvious solutions
- Concept docs: Complement samples, demonstrate basic and advanced usage
- Accurate (reflects current behavior)
- Up-to-date (no stale information)
- Documentation process itself documented and maintainable
Test code quality expectations.
MX:
- Prevents regressions (catches behavior changes)
- Adequate coverage (MVP functionality and edge cases)
- Maintainable test code (not brittle, survives refactoring)
- Tests pass consistently (local and CI)
- Test structure clear and organized
DX:
- Tests document expected behavior
- Tests serve as usage examples
- Test names describe scenarios clearly
Quality flows from maintainability through developer experience to user experience:
MX โ DX โ UX
Gaps earlier in this chain affect everything downstream:
- Poor maintainability makes it hard to improve the API
- Poor API design makes it hard to create good user experiences
MX gaps (maintainability):
- Highest impact โ affects your ability to improve DX and UX
- Address early to avoid compounding technical debt
- Examples: unclear code structure, missing tests, undocumented behavior
DX gaps (developer experience):
- Blocks good UX โ hard to build great experiences on a difficult API
- Address before focusing on UX polish
- Examples: confusing API surface, poor discoverability, missing docs
UX gaps (user experience):
- Can be addressed once MX and DX are solid
- Polish is easier when the foundation supports it
- Examples: visual refinement, accessibility improvements, interaction tuning
Non-breaking improvements (can address in mainline):
- Visual polish and style updates (UX)
- Additive API enhancements (DX)
- Code quality refinements, test additions (MX)
- Track as improvements, address incrementally
Breaking changes depend on component status:
For porting, new components, or Labs incubation:
- Breaking changes allowed during incubation
- Community validation before mainline commitment
- Iterate via sub-issue โ PR loop until quality requirements met
- Quality assessed throughout Labs lifecycle
- Graduate to mainline when HIGH quality achieved across all dimensions
For stable mainline components:
- Avoid parallel APIs if possible through proactive API design
- When unavoidable, ship new API alongside deprecated old API (
[Obsolete]) well before major version - Provide migration roadmap before release
- Breaking removal only in major version bumps
- Do not make major breaking changes to already stable-released parallel APIs
- If too complex โ component may return to Labs for redesign

- Home ๐
- Welcome ๐
- Principles โ๏ธ
- Roadmap ๐บ
- .NET Foundation
- Why Microsoft supports this project
- License ๐
- Getting Started ๐
- Sample App ๐ฑ
- NuGet Packages ๐ฆ
- Preview Packages ๐
- Toolkit Labs ๐งช
- Questions โ
- Discussions ๐ฅ
- Submitting an Issue โ๏ธ
- Good First Issue ๐
- Help Wanted ๐
- Bug Fixes ๐
- Feature Requests ๐ซ
- Component Quality Evaluation ๐ฎ
- Create and Submit PullRequest ๐
- Documentation ๐
- Review PR ๐
- Avoid Roadblocks ๐ง
- Required Dependencies ๐
- Quick Start โก
- Sample Development ๐ฑ
- Testing ๐งช
- Accessibility Guideline โฟ
- Coding Style and Conventions โ
- Building XAML Controls ๐
- CI and Infrastructure ๐พ
- Updating ToolkitLabs.dev ๐
- Migration Guide from v7 to v8 ๐
- How the Project is Organized ๐๏ธ
- Join the Toolkit Organization ๐ช
- Hall of Fame ๐