Totally Erlang Superhero: Beebole
BeeBole is a contender in what we might call the time sheet application war. All over the world both freelancers and employees of large companies are obliged to track time, so the market is, obviously, an interesting one. BeeBole offers a cloud based application with a surprisingly elegant interface. Totally Erlang noticed that BeeBole proudly boasts its use of Erlang so we decided they would be allowed to kick off the Totally Erlang Superhero series.
Beebole is run by: Yves Hiernaux, Mic Cvilic and Hughes Waroquier.
Yves Hiernaux, Founder
Hi Yves, thank you for kicking off our “Totally Erlang Superhero” series. Could you tell us a bit about your team?
Mic Cvilic and I spent years building web apps on top of SAP for big corporations. But one night in a pub of Covent Garden – London, we decided to try something else and build online software for small and medium businesses. Hughes Waroquier joined us a little later to build the back-end. He’s the real Erlang Superhero.
At what point did you pick Erlang? And why?
Mic knew LISP and wanted a functional language. Hughes was not so convinced by LISP and looked at other functional languages and found Erlang. It was totally unknown to us, but the more we tested it the more it seemed to be what we were looking for: a reliable, distributed and scalable environment. Battle tested by decades of running professional applications.
What does your product do?
BeeBole is a cloud timesheet helping companies track their time, how much they should invoice their customers or to keep projects on budget. Available in English, Spanish, French, Dutch and Polish, it can be integrated with Google Apps.
Could you describe the architecture?
Our servers are cloud servers from Linode. The backend process runs exclusively on Erlang, Mnesia being the database.
Nginx delivers the static content (HTML, JS, CSS), and everything is rendered in the web browser using pure.js, a library we open sourced.
Why did you use Mnesia? Is that working well for you?
Mnesia is a distributed database and native to Erlang. It was running out of the box. And was flexible to store either custom structures “à la” NOSQL or more classical tables like in other RDBMS.
Having the table loaded in the RAM with a copy on disc is a very powerful architecture.
We mainly store numbers (hours, ids, quantities, etc.) and small binaries (names, comments, etc.), and Mnesia is handling this perfectly.
What have you learnt from your current approach, will you change anything in the future?
We went out of beta just 2 years ago, it is still too early to tell.
The database size is growing at a predictable pace giving us enough time to react and optimize.
The only drawback is the relative 'alone' feeling. We are using a language and a DB system dedicated for specialists. Even if Erlang gained some fame few years ago, it is far from mainstream for a web app environment.
We really love your interface with the real time panels. Could you tell us a bit about how that’s done.
When you use a Mac, changes are generally saved as you type.
During the design phase, we wanted the same interaction for our web app.
After some iterations, we ended up with a very simple technique.
When a user enters a field, every ~100 millisecond the value is checked.
If a change occurs, it is saved. When the user leaves the field, the check stops
It works cross browser and cover a simple typing but as well some edge cases like copy/paste, undo in the browser etc.
Some users are still uncomfortable with this, so we provided an undo/redo for most actions.
But I guess this will be more and more common for web apps. For instance Google docs had a save button initially. And they dropped it few months ago.
What tools do you use for development work?
For Erlang: Vim and many other terminal console.
On a Xubuntu (XFCE) laptop.
And a do-it-all-in-one-step script for the deployment.
For the Frontend: Chrome Dev Tools and Sublime Text on a Mac.
Github as our source repository.
Pivotal Tracker to manage our development priorities.
And finally, kilos of Sencha Fukamushi Premium tea and hours of Blues and Jazz music.
What will happen if you start to conquer the world? Will you have to change a lot? How have you approached scaling?
The risk of a surge of users coming all of a sudden is low for a business app. Even if all our metrics have this nice exponential look, it is a very predictable growth.
Erlang/OTP/Mnesia is a distributed and scalable architecture by nature, that allow us to grow safely.
In a “conquering the world” mode, we would probably need to add few new indexes to some tables, and obviously increase our servers’ monthly plans.
What plans do you have? Will you continue working on your project or start working on other things too?
In the past two years, we grew 15% monthly. We have a stunning 10% of conversion from signups to customers ( in 45 countries!).
It’s exciting to see BeeBole grow at such speed, and we are 100% dedicated to this project.
We are a profitable business and the enthusiasm of our customers is our main driver to continue to offer the best app and support we can.
BeeBole presenting at the Google IO 2010
We noticed you offer a starter kit, what’s that about?
We say: If you plan to build a web app, give Erlang a try!
We compiled the starter kit for Web apps on our website: http://beebole.com/erlang/
It includes installation tips, several tutorials but also specific help with such things as sending mail with Erlang or testing.
More about Beebole
Sign Up at http://beebole-apps.com/?signup