Development Methodology

This website contains links to software which is either no longer maintained or will be supported only until the end of 2019 (CKFinder 2). For the latest documentation about current CKSource projects, including software like CKEditor 4/CKEditor 5, CKFinder 3, Cloud Services, Letters, Accessibility Checker, please visit the new documentation website.

If you look for an information about very old versions of CKEditor, FCKeditor and CKFinder check also the CKEditor forum, which was closed in 2015. If not, please head to StackOverflow for support.

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:

  1. Write tests first for all possible cases regarding a piece of code.
  2. Check test failure.
  3. Write the minimum code to pass the tests.
  4. 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.

This page was last edited on 5 February 2008, at 15:28.