Building Ushahidi 3.0

Ushahidi
Mar 21, 2013

It's been a while since we first started working on Ushahidi 3.0, and a few people may be worndering what's happening. There's always a lot going on at Ushahidi, and I certainly remember it was hard to keep track as a community member. Last year we did a lot of good work on the 3.0 workflows, and we started laying out plans for 2.x - 3.0 migration during our annual planning retreat in January. However progress since then has been a bit derailed by Uchaguzi - an election monitoring deployment for Kenya. Now Uchaguzi is done we're getting moving building API, and starting to dig into the workflow details. Watch our progress on the wiki and on github.

Building a good foundation

Ushahidi 3.0 is a ground up rebuild of the Ushahidi platform. While some keys aspects will remain the same, the underlying code is getting a complete revamp. There are a few reasons contributing to this decision, but underlying all of this is the desire to give the platform a solid, extensible, maintainable foundation. The 2.x series code works well, but we've reached a point now we're its hard to move further forward while also ensuring we don't introduce new bugs.

Things to look forward to in 3.0:

Kohana 3 Ushahidi 2.x was built around the Kohana framework . However, it was built on Kohana 2.x. We upgraded the core to Kohana 2.3 but when Kohana released version 3 there was no real upgrade path. We've ended up maintaining our own hacks and changes to the Kohana 2.3 core, some of these were backports from Kohana 3, others just fixes to key issues like running Ushahidi on PHP 5.4. Going forward we're building on Kohana 3.3 which is both a much better framework and is actively maintained and used. API driven The API in Ushahidi 2.x was always a bit of an afterthought. As such it reproduces a lot of code, misses key REST api concepts and simply requires too much effort to work with. The web has moved on, becoming more focused on mobile and custom apps with multiple data sources. Having a solid API is now a must have. In 3.0 the API will be the core of the system, driving both the frontend and other clients. Behat tests Behat gives the ability to write simple human readable tests. It's providing the primary method for testing the API in 3.0, and is already proving invaluable. Database Upgrades Minion Migrations gives us a solid framework for database migrations. This should help us provide robust upgrades and downgrades in future versions. Support for other databases Support for PostgreSQL and other databases has been a long running request for Ushahidi. We aiming to support this from the start in 3.0, a much easier task than trying to shoehorn support in later.

Tracking the build

We're trying to keep the processes lightweight, however there's still a lot to build. I'm tracking a backlog of features and other issues through github issues. As each feature gets started we'll be adding rough spec details and comments to the ticket description, and when features are complete they'll be code reviewed using Github pull requests. Each of these steps is a chance for you to comment on how we're doing and suggest improvements. Most tasks will get assigned to and built by the internal team. But if you want to get involved in v3 development chime in on a ticket and let us know where you can help. A lot of discussion is happening between the core team at the moment, but as we get further in we'll be trying to open that up and get community feedback as well.

Early targets and migration

As we're pushing forward with v3, one the big items is going to be migration from Ushahidi 2.x. To ensure this works smoothly we've set a couple of early targets: 3.0 Alpha - due end of May/early June -  will try to cover core 2.x features and include an import script to pull data from 2.x. This will really be for developers and hard-core testers only. At this stage we won't be aiming for a nice import UI, just a solid import so we can start testing and ensure we don't lose data. 3.0 Beta - due end of June/early July - will go further on migration. Migrating from 2.x will mostly likely be integrated into the UI of the installer. The UI may not be polished at this stage, but it should be enough have early adopters trying out the process and getting running. Shout out if you have any more questions on the 3.0 build. We'll be posting regular updates and discussions to the developers mailing list as we continue to build. Keep on mapping!