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