Overall application quality goes beyond implementing features and includes:
- Accessibility
- Usability
- Performance
- Security
- Reliability
- Maintainability
Here is a rough listing of some of the procedures and processes we could follow to encourage building higher quality applications.
In the broadest terms, accessibility can make it easier for anyone to find, access, and use a website successfully.
— Laura Kalbag
- Include accessibility requirements in application design/specification phase.
- Use CSS/JS frameworks with accessibility built in.
- Use automated accessibility scanners.
- Include accessibility-related tests in design and QA.
- Involve people with disabilities in design & UAT.
User experience (UX) focuses on having a deep understanding of users, what they need, what they value, their abilities, and also their limitations... UX best practices promote improving the quality of the user’s interaction with and perceptions of your product and any related services.
— Usability.gov
- Use cross-platform CSS/JS frameworks with usability built in.
- Design iteratively with customers.
- Re-use components to encourage consistency of design and to spread best practices.
Web performance is all about making web sites fast, including making slow processes seem fast.
— Mozilla Developer Network
- Use JS/CSS frameworks with performance built in.
- Include performance requirements in application design/specification phase.
- Mandate a performance budget.
- Prefer modern technologies & frameworks.
- Use automated performance scanners.
- Use a CDN for common/static resources.
- Employ code quality analyzers.
- Enable compression where appropriate.
The American people expect government websites to be secure and their interactions with those websites to be private.
— Federal CIO Council
- Enforce HTTPS and HSTS on all sites on all servers.
- Use vetted, secure user authentication systems.
- Use vetted technologies & frameworks.
- Minimize dependencies.
- Use automated security scanners.
- Employ code quality analyzers.
- Automate the build, testing, and deployment process.
- Use site monitoring tools.
- Use crash reporting tools.
- Use automated performance scanners.
- Write unit tests, integration tests, and UI tests.
- Use version control for all aspects of development and operations.
Maintainability is the absence (reduction) of technical debt. A maintainable application is one that increases technical debt at the slowest rate we can feasibly achieve.
— Chris Fidao
- Build loosely-coupled, testable applications.
- Write unit tests, integration tests, and UI tests.
- Track all source code in a version control system.
- Use high-quality JS/CSS frameworks.
- Use LTS versions of all libraries/frameworks.
- Use crash reporting tools.
- Automate the build, testing, and deployment process.
- Implement code review.