Ducksboard: from nothing to private beta in four months

It’s done. Ducksboard has entered private beta. The four months from drawing the first lines on a piece of paper to flipping DNS entries at 6AM have been a fun ride. Go see the homepage and play around with the demo or read on about some of our experiences.

Ducksboard is a real-time dashboard for tracking your internal metrics and webservices. A single place where you can gather data from all SaaS apps you use (GoogleAnalytics, Mailchimp, Sendgrid, Zendesk…), as well as pushing us any internal metric you might consider through our REST API.

A walk through the architecture

(a very brief one)

Most of the original design sketched at the beginning has survived, which might be a concidence or the effect of choosing simple interfaces and deciding to go with technologies we already knew. All of our backend is Python and we make heavy use of Twisted. Persistent storage is provided by PostgreSQL and realtime updates are pushed to RabbitMQ and delivered to clients through WebSockets. We have almost 17,000 lines of Python code, 10,000 of which are tests. Our unit tests coverage oscillates around 98% and in a few days we hope we’ll be pushing it back to 100%.

A common concern throughout the whole project was security. We care about security and we’re serious about it. We try to cover all our bases and we’re considering hiring outside penetration testers to make sure our customer’s data is safe. We use SSL between the backend and the database, between the backend and the queue and for the entire frontend. We check for certificate validity. We use bcrypt to store customer’s passwords, use symmetric encryption to scramble customer’s API tokens and encrypt our database backups.

Another point worth mentioning is Open Source. We’re using lots of open source, which today never surprises anyone. However, stopping to think about it, the amount of raw functionality and saved time we get from projects like jQuery, txamqp, txWebSocket, countless Python packages from PyPI, not to mention the database software, queue software, the editors we use (yes, one of us uses One Editor, the other one uses The Other Editor) and finally the operating system our servers and desktops run is *amazing*. Open Source is a phenomenon that never ceases to amaze me. We have identified parts of our code that are generic enough to be reusable by other people and we will soon publish them with a liberal license and we are deeply thankful to all the people whose code powers Ducksboard in its everyday tasks.

The architecture really deserves a longer post (and a more serious one than the last one) which we’ll try to put together in a few weeks.

Good decisions

Start gathering emails from interested people from day one

The rate of new signups served as a constant validation, reassuring us that there is demand for what we were making. We asked the people from that email list for some early feedback that helped us take product decitions at early stages. The last poll we did has been filled by +700 people.

Create an interactive teaser page

Software development is like playing frisbee, you should never say anything else than “hey, look!”. Our first appearance on the Internet has been a realtime Twitter timeline, deployed using our own software. It gave us a first glimpse at how well do we scale and forced us to document the deployment process. The timeline was tracking mentions of our Twitter account, which encouraged users to tweet something about us to see the message appearing. That gave a nice viral touch to the teaser.

Hire a top-notch UX dexigner

We’re a startup and we’re bootstrapping. Every dollar (actually, every euro) spent means one day less before we run out of juice. It was a difficult decision but we knew that you sell a dashboard throught the eyes. It turned out to be by far the best investment we did (maybe after NBA2K11 for the Xbox :) ). We are completely in love with the design of our dashboard and we are hearing similar opinions for people all over.

Not so good decisions

(also known as bad decisions)

Optimistic estimation for the front-end

We thought this wasn’t gonna happen to us… But it happened. It’s really hard to make good estimations when you are using fringe technologies (WebSockets, anyone?) and you have to test it in several browsers and devices. We’re server people, Javascript is not our strongest point and our application  is definitely Javascript heavy. We already decided our first hire will be a front-end engineer. If you are interested, please contact us.

Delaying front-end development until we have finished the backend

Writing network servers is so much fun you forget you need to deliver something a browser can render and execute. We thought it was as easy as turning the HTML into templates and connecting the frontend through our internal API… but as the frontend took shape it made us realise we needed several changes to our original design and the damn HTML never rendered as it should. We ended up with a backend we’re very happy with and a frontend that could definitely use some cleanup.

Hopfully you found some of that useful. Expect to hear from us soon!

Share:

There are 11 responses to this article:

  1. thanks for sharing.

    why did you choose twisted and not tornado or eventlet?
    What testing framework are you using?

    1/6/2011
  2. Jan says:

    Twisted because it offers much more than just a web server. We’re using it as a WebSockets server, a Flash socket policy server, you can find libraries that integrate with Twisted for asynchronous database and queue connections, basically anything you’d like to do with the network.

    Another big reason is that we already knew Twisted when we started.

    For testing we’re using the builtin Twisted testing tool (trial) and we use mock (http://www.voidspace.org.uk/python/mock/mock.html) a lot.

    1/6/2011
  3. Zaki says:

    How did you get in touch with your designer? And why not have an in-house person?

    1/6/2011
  4. Aitor says:

    Hi Zaki.

    Given the very visual nature of a dashboard, we understood from the beginning that we needed the best possible UX designer.

    The very good ones we know have their own studios, and the one we had in mind from the start (the top one is Spain in our opinion :) is not an exception. We knew him because of his previous amazing projects for successful Spanish Internet companies.

    Hiring someone as good would have been difficult: being tech and biz people, we don’t know many good designers not working as freelance, and it’s not easy for us to evaluate their portfolios. On top of that, being a startup we can’t offer the high salary a top designer would expect.

    1/6/2011
  5. Michael says:

    Great post, thanks. What would be your advice on getting people who may be interested to your site to sign up for your email list? What sorts of things did you guys do?

    It’s great that you guys managed to do all of this in four months though, congratulations! (The app looks great, by the way. :)

    Mike

    1/6/2011
  6. rok says:

    Aitor, amazing work!

    But I have to ask – who is your UX designer?

    1/6/2011
  7. diego says:

    #Michael

    Nothing special…a big button with a shiny color :D

    We are the first ones impressed with the warm welcoming from people

    2/6/2011
  8. Pingback: Babeando | externalidades

  9. Michael says:

    Cool, thanks Diego. Do you happen to have any advice for startup entrepreneurs trying to get people to their website, so that they’ll have some people to actually getting see the big, shiny button? :)

    Thanks again,
    Mike

    3/6/2011
  10. Great job guys! Glad to see it’s finally ready to enter beta, I’ve been waiting to get my hands on it for quite a while.

    Congratulations on entering beta, best of luck with the product, and I hope you take some time to sit back and play more NBA 2K11.

    Cheers!

    6/6/2011

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">