Original post

Sure, yeah. There’s absolutely things that I would change with a year-and-a-half of hindsight, but not as much as maybe I’d imagined we would. We’re very careful about our design process, both from an interface design point of view, but also from an API design point of view. And the design of the API came before really a single line of implementation. The project started with an ambition to rethink how you could build graphical user interfaces across platform, and then came a broad strokes design outline as to how that API might function. Then we started implementing, initially with this other back-end component; so we didn’t have to write the graphics drivers, but then eventually coached it all the way down.

So it is a very considerate approach… This is the way that I would consider any software engineering project if I was in a workplace. So when I started to think about this open source project, I wanted to make sure that we didn’t compromise at all in that way. Obviously, there’s other ways to build projects – get the code running, share it with some people and start building from there, but I felt that without a real design backing to this, it would struggle to keep its consistency over time. So when people ask for new features to be added, not only do we think “How would that look as an API?” and maybe even ask them how they’d like to interact with it, but we also have to consider “Well, is this something that makes sense for the majority of our users, and is it something that can make sense across the different target platforms that we want to support?” So that we’re not just dropping in a small feature for one platform, that then doesn’t do what you’d expect on other systems.

That process – I think it has served us very well. It does mean that sometimes features take a long time to develop… And you know, others are dropping quickly, but not always. So we have a roadmap that I’ve put together probably initially, two years ago, and it evolves all the time; first of all, we wanted to get desktop apps working, and then we thought “Okay, that’s solid. Let’s add some new widgets to it.” Then it came time to look at mobile, so we targeted that for the 1.2 release last year.

Actually, as part of that release, we wanted to get data binding in there as well, because it’s really simple to build a simple application, but then if you want to back a big data model into it, or connect more complex systems, display lots of items – even though that’s pretty slick, there’s still a lot of code to be written, and we thought “If we’re really gonna do this properly, we need a good data binding system.” And we started designing it.

There was a lot of discussion, there was a bit of experimentation to see what could work, and it came close to release time and the mobile stuff was polishing out quite nicely. We had to say “Look, actually, if we put this in right now, we don’t think that we could commit to this being the API going forward forever.” So we took that out of the release and invented a new 1.3.

[00:40:04.26] We were initially going to go directly to a big 2.0 drumroll, but we thought, “No. Actually, to do this properly, we need to take more time. We need to engage with more external developers, so we’re not just building as a development team what we think is right, but actually what makes sense for everybody else.”

I’m sure that the guys who are working on that could think it’s been a lengthy process, because we’ve been building that API now for over three months… That’s quite a long time in any engineer’s lifetime, I suppose. We’re confident that we’re gonna get it right, and actually the demos that are coming together now – they’re blowing me away, actually, what a bit of time and consideration has created. It’s really cool. So we’re gonna continue to think really hard about all of these design elements.

The items that we would change if we could – they’re very small details in the grand scheme of things, and maybe when 2.0 comes along, we can change some deprecated stuff and do a walkthrough about how people might update their code, but it shouldn’t be a big deal… Long answer.