Contents
Agile
Ideally, we should found all our development effort in the Agile model. It fits well our reality, being a distributed, small, and well qualified development team ;-)
There are some things to consider though. One of the most important concepts behind Agile is that the development is driven by face to face communication. In our project instead, it is quite rare to have such kind of personal contact.
In the other hand, we are constantly working to provide tools that could help us interacting as straight as possible, like our Mailing List, IRC Channel, Forums, IM and e-mail communication. All those communication channels can easily diffuse and dilute our ideas in many separated pieces. To glue everything together, we have created this web site. It is an ideas repository.
In these pages you will not find precise low level specifications about each feature to be developed. You will instead find the results of our research, our decisions and a general overview of our objectives.
Feature Driven
The project is mainly based on the Feature Driven Development model (FDD). This model guarantees and incremental evolution of our software, providing working software right from the first stages.
Test Driven
Another important aspect we're pushing during the development is the Test Driven Development model (TDD). Its concept can be defined by a series of tasks to be done when coding:
- Write tests first for all possible cases regarding a piece of code.
- Check test failure.
- Write the minimum code to pass the tests.
- Refactor the code until the final solution is achieved. All tests must pass while refactoring.
The code must be written in a way that makes it testable in its small fractions. Modularity is a key factor to help achieving it.
KISS: Keep It Simple, Stupid
Our code should be developed, reviewed and refactored to be as simple as possible to achieve our needs. No superfluous code is to be written. No "maybe we gonna need it".
Great code is the code that solves a task in the simplest way. Code that achieves the same result with a super-complex genial solution is bad code.
Performance and Profiling
This is one of the strongest blocks to build quality software. We must be constantly focused on provide the best performance while coding. We advocate it, being pedants with ourselves to make things run fast, showing others the importance of it, and exciting them about it.
One of the basic tools to achieve high performance is profiling. There are dedicated tools that can be used for that, like Firebug. Another important approach is writing test code that tests for performance, or even compare different coding approaches in dedicated test pages.
Interface Elements Prototyping
For any UI element, develop interface prototypes first, and then the code to achieve the prototype features. In other words, do no start coding before having the definitive HTML+CSS definition of the desired code results.