Eve Dev Diary (Mar - Jun)
It’s been a while.
So far, the monthly posts have included detailed technical descriptions of our work. I keep delaying posts until I can figure out how to coherently explain the ideas in them. In future, I will be posting short status updates every month and saving the gory details for unscheduled design posts, like this one.
March, April and May were all consumed by a single milestone. Previously we had only been building prototypes and demos - code that was thrown together to test ideas and not expected to live for long. Whenever we showed these to people the most common feedback we heard was “that’s interesting but I don’t see how it would scale to a real website”. With Chris’ keynote at the Joy of Coding coming up in May, we decided to make a push to have a clone of a real website running in Eve in time for the talk, as well as a provenance-based debugger and support for collaborative editing.
We fell far short of that goal, for a number of reasons. Firstly, we responded to the time pressure by trying to do everything at once - a kind of big bang model of development where nothing runs until everything is finished. Secondly, we often let perfect be the enemy of the good, redesigning flawed components from scratch rather than tolerating them long enough to get a working system together.
Despite our mistakes, we still managed to build a relational database, a programming language, an IDE and a UI editor from scratch in three months. In June we adopted a more incremental process - making changes via shims or feature gates to ensure we always have a stable platform to build on. At the time of writing we are able to implement much of Foursquare:
Aggregation and sorting continue to be tricky to nail down, so they are currently banished to a separate view type. To reduce the overhead of having to create all these extra views we added workspaces which can contain multiple anonymous views.
Previous versions of Eve were fairly keyboard-heavy. For this version we built an entirely mouse-driven interface for the query editor. This reduces the scope for error for non-technical users, but the code is still very difficult to read and understand. We have a much more promising idea in the works.
The runtime now lives outside the browser, which means that for the first time we can handle multiple users in Eve applications. Currently, all computation happens on the server and clients just render html and pass on UI events (much like Nitrogen).
(The editor itself can still only handle one user since we need some form of version control to handle concurrent code changes.)
The major new feature is a drag-and-drop UI editor which can bind data directly from Eve views.
For July, our goals are:
- Improve the current version of Eve until we can clone FourSquare perfectly
- Fix architectural mistakes and refactor rushed code
- Add a shiny new query editor