Making an Impact with Lean Data


Ona Collect

Lean data, or applying lean processes to data collection and use, is an important tool for creating impact in global development programs. It was created as a response costly traditional M&E (monitoring and evaluation) practices that aren’t about the end consumer or user and only applicable to large-scale programs. The core tenet of lean data is focusing on a bite-sized goal and using customer impact data to drive your decision-making towards that goal.

 Continue reading Making an Impact with Lean Data...

Give your questions the colors they deserve



We’ve just added a small but powerful new feature that gives you more control on how you visualize data on your map.

One of the challenges with our maps to date is you could not specify the colors for specific responses to data. Since colors are randomly assigned, it’s very possible to have true show up as red and false as green on a map. Confusing, we know!

To address this, we’ve made it possible to assign colors to specific categories (options) on the choices sheet in XLSForms.

Why do this in XLSForms? We will consider a UI approach in the future. However, we have seen firsthand how XLSForms have helped organizations standardize the way they author forms to collect data. By expanding XLSforms to support basic visualization logic - we can help ensure the data is interpreted in the way the author for the form intended.

How does it work?

color options

Right now you simply add the colors you want in the “appearance” column. To allow us to support modification of other visualization properties in the future, we use a format similar to CSS, a language typically used to style web pages. You can, therefore, specify a color in the appearance column as, for instance, color: red.

Note: You can use any standard web color, such as red, yellow, green or orange. You can also use hex codes, which gives you a wider selection to choose from. The website provides a nice palette of hex alternatives to the default colors that you can choose from.

The example form used in this demo can be found here.

Happy mapping!

New Job Opportunities at Ona


We are looking to add three important new members to our team. We are actively looking to fill these positions in early January. So if one of these positions looks like the dream job for you (or you know someone who might be a great fit) please apply now!

Operations Manager, Nairobi

We are looking for someone to help build the systems required for our company to continue to grow. We are particularly interested in people with strong accounting experience and who know how to setup and run organizations in Kenya.

View full job posting

Support Specialist

We are looking to add a dedicated support person to our product team. We’re seeking someone with great attention to detail, passionate about support an ideally a bit of a data geek. French speakers are encouraged to apply.
View full job posting

Software Test Engineer

We are looking for an engineer to help lead our software quality assurance processes. The ideal peson will be a great software engineer, extremely detail oriented and passionate about the critical role QA plays in modern software development.

View full job posting

Map Your World and Ona at Geo for Good 2015


Ona Collect

This past October I spoke on behalf of Map Your World at the 2015 Geo for Good User Summit.

Map Your World empowers youth to explore issues and ideas that matter - like clean drinking water, or food justice – then write surveys, collect data, and create maps to make change in their communities. This amazing project is powered by the Ona API.

Below is a video of the talk I gave, which includes a clip from the film The Revolutionary Optimists.

Clojure Destructuring Gotcha!


Given the following function definition, what would you expect to happen if you ran (hello :person nil)?

(defn hello
      [& {:keys [person]
          :or {person "Rich"}}]
      (str "Hello, " person))

(hello) => "Hello, Rich"
(hello :person "Hickey") => "Hello, Hickey"
(hello :person nil) => "Hello, "

I’d have expected (hello :person nil) to have the same result as calling (hello), but as it turns out, Clojure seems to make a distinction between nothing and nil when it comes to destructuring.

A real world situation where this might occur would be where you, for instance, rely on the result of a destructuring operation to provide parameters for a function similar to hello. e.g.

(defn spam
      [& {:keys [person]}]
      (str (hello :person person)
            "Give me all your money."))

Calling (spam) would result in (hello :person nil) being called, which would have the - probably - unintended effect of returning "Hello, ". You may choose to add an :or when destructuring the argument to spam, but then you’ll have the same code appearing twice. A more localised solution would be changing the hello definition to be something like this.

(defn hello
      [& {:keys [person]}]
      (str "Hello, " (or person "Rich")))

This worked for my case, but I’d love to hear about more idiomatic approaches.