Process Standards
Test-driven Development (TDD) - we first write the unit tests for each requirement that will only pass when the requirement is met.; We then write the code that will make each test succeed, thus insuring that the requirement is met. Since the unit tests remain in place for the life of the development process, we can be sure that the code will continue to function properly, even if we all enhancements in the future.
Agile (Feature-driven Development - FDD) - Agile development processes permit us to be flexible to your changing requirements, without sacrificing quality. In particular, the Feature-driven Development agile method is the perfect tool for developing a quality object model and framework, while preserving process flexibility - like building from a feature list, planning and budgeting by feature, designing and testing (see TDD above), and building and deploying by feature.
Automated Continuous Integration and Test - We use a combination of Subversion, Cruise Control, and XUnit (NUnit, SQLUnit, JsUnit, etc) to verify that the project is always in a known good state, throughout the development process.
Coding Standards
Object-oriented Design - Liberal use of object-oriented design patterns, and adherence to coding standards (coupling minimization, adhesion maximization, preference for aggregation over inheritance, standard naming conventions).
Database Standards
Normalization to 4NF - Normalization is a foundational data-modeling skill that should be common throughout the software industry, but surprisingly it is not. Data models that are in lower normal forms remain problematic throughout the lifetime of the product - they require constant maintenance and tweaks, they cause data loss, and are error-prone in general. We normalize to 4th Normal Form. Only in exceptional cases, we may normalize to a lower form for specific performance reasons. Even in these rare cases, the remainder of the data model is normalized to 4NF.
Usability Standards
Usability testing - we perform usability testing before we begin development, and then again on the final product. This insures that our applications are highly usable on the first release.
XHTML/CSS Standards
Table-less CSS layouts because:
- content should be separate from presentation (scalability, maintdainability, etc)
- pages seem to load faster - you can load content first
- better SEO results - search bots read the first few 100 Kbytes only - so it had better be content!
- better accessability for disabled users with screen readers, cell phones & PDAs
list-based menus - semantically correct
semantic markup (rel="<relationship>")<br /><span style="text-decoration: underline;">
XHTML 1.1 doctypes
Cross-browser compatability - Gecko (Firefox, etc), IE, Safari, Opera
Validated HTML - http://validator.w3.org/ , http://www.htmlhelp.com/tools/validator/ , http://jigsaw.w3.org/css-validator/ validated
Accessibility - compliant with U.S. Law(http://www.usdoj.gov/crt/508/508law.html)
- compliant with http://www.w3.org/WAI/ (and http://bobby.watchfire.com/)
- http://www.section508.gov/index.cfm?FuseAction=Content&ID=3
- http://508as.usablenet.com/508AS/current/rules/index.html
- http://www.oreillynet.com/pub/a/javascript/synd/2001/11/30/accessibility.html
- http://diveintoaccessibility.org/
- http://www.w3.org/TR/REC-CSS2/media.html
Meaningful alt texts (including alt="" when appropriate) - semantically correct
correct MIME types
Standards: World Wide Web Consortium (W3c):
http://www.w3.org/
http://validator.w3.org/checklink
Javascript Standards
Unique Namespace
Object oriented