Cheetah Release Design Goals
Design Goals for the Mifos Cheetah release
- Simplicity
- Strive to choose the simplest solution that will solve the problem while retaining the maintainability and quality of the code base. (Note that "simplest" does not necessarily mean "easiest". For example, copy-paste-tweak reuse is often the quickest path to a solution, but adds complexity to the application, and heartburn to future maintainers...)
- Make code as easy to understand as possible.
- Acknowledge that in some cases the simplest workable solution to a complex problem may itself be complex. The main idea is that when complexity is introduced, we need to be able to justify why it is a better solution than a simpler alternative.
- Make it easy to do the right thing and hard to do the wrong thing.
- Testability
- Strive to do test driven development (TDD). Write tests first and then implement functionality to make tests pass.
- Write POJO (Plain old Java object) based code that can be unit tested independent of a database.
- Each unit test should execute independently of others.
- The entire unit test suite should execute in less than 10 minutes on "reasonable" hardware.
- Build the web user interface so that Selenium tests don't break if the text or structure of the HTML changes (use id tags with namespaces for components).
- Modularity
- Code should be divided into cleanly separated modules with minimum dependencies between modules.
- Make it easy to rewrite portions of Mifos and add new functionality in a way that impacts code outside a module as little as possible.
- Modules should be specified as much as possible in terms of interfaces. This will allow for easy reimplementation and testing.
- Pluggability - there should be a way to extend Mifos functionality by adding external code modules without having to recompile Mifos code.
- Quality
- Coding standards
- Agree on coding standards and use pair programming, code review, and automated tools like PMD to help stick to standards.
- Treat tests as first-level code, refactoring and modularizing as necessary.
- Ensure valid HTML/XHTML markup
- Acceptance tests
- Have an easy-to-run suite of acceptance tests, using tools like Selenium and Selenium-RC. Run the tests from a continuous build system.
- Add acceptance tests to the suite for every feature implemented or every bug that is fixed.
- Modularize the acceptance tests to have a smoke test that tests core functionality quickly, and a slower regression suite.
- Test coverage
- Measure code coverage of test cases to make sure untested code isn't slipping in.
- Quality metrics
- Implement an automated way to measure code quality over time, possibly integrating it with the normal build process.
- PMD
- Findbugs
- Automated HTML/XHTML validation
- Approachability
- It should be easy for developers to contribute to the project
- Write intention revealing code which can be easily understood
- There should be sufficient well written documentation to understand how to modify and extend the code.
- Coding standards
- Scalability
- Design and code with the idea that the system should support large user bases.
- Consider a SaaS environment and the need to support, administer and upgrade a large deployment.
- Performance
- Stress testing - Mifos should perform well under heavy user loads
- Performance testing - we should be able to quantify performance so that we can measure changes in it over time.
- Stability
- Mifos should not crash
- Longevity - Mifos should be able to run for extended periods of time without the need to restart.
- Design with the goal of linear scalability across server farms
- Usability
- The initial 2.0 release will retain the current UI for the most part. From this starting point we will strive to understand how best to evolve the UI to make Mifos as intuitive and easy to use as possible.
- Documentation - provide easy to understand documentation that makes Mifos easy to use.
- Speed of delivery
- Approach development such that functionality can be delivered within the time defined by the needs of business
- Deliver frequent iterative intermediate releases
- Security
- Information in Mifos must be well protected
- Ease of Administration
- Monitorability
- System should include hooks required by external monitoring tools.
- Business activity monitoring – what are users doing in the system? What features are most heavily used? Rarely used?
- Ability to easily identify the cause of problems
- Monitorability