Sunday, January 16, 2011

Turns out, it took longer than 12 hours...

I've just released a major update for www.booark.com


The new features include:

  • If you are using the Chrome Extension, there is now the option to import your existing Google bookmarks into your BooArk account. This is pretty neat, because with just a single click you BooArk account is automatically populated. The best part of this when the bookmarks are imported, any existing folder names (and parent folders if they exist) are automatically applied as labels. This is pretty cool :)
  • Using local storage on the extension. This is a big win, and makes the extension worlds faster.
  • Preemptive caching of data. Long story short: load times are a lot faster across the board. 
  • You can edit/delete a bookmark straight from the extension. There's now no reason to go to booark.com if you have the extension.
  • Autocomplete for labels. This makes label creation much more professional.
  • Integrated FCBKComplete into the site and extension.
  • Lots of cool filtering shortcuts related to labels.
  • Lots of styling fixes to emphasize the search functionality.
  • You can now customize the columns that are displayed/searched on BooArk.com.
  • An updated intro video highlighting the new features.
  • Lots of bug fixes and browser compatibility issues.

These updates took me the better part of 2 weeks to implement. In normal working circumstances, I would have probably implemented these changes in less time, but this has not been a normal week for most people living in Brisbane, myself included.

Overall, I'm very happy with the end results. I think BooArk has now approached the point where it is ready to move out of an unadvertised beta, and be exposed to a wider audience. 

That is the task for this week: To get the word out for BooArk, and determine:
  • if my core idea that BooArk provides a better personalized bookmarking service than traditional browser bookmarks resonates with people.
  • if my planned method of attracting initial users via referrals from influential web folk will be successful.
  • if the site can hold up to an influx of traffic, and what AppEngine's performance is like.
Certainly it's going to be an interesting week for BooArk. I'll write more once I have some initial usage figures. 



Saturday, January 1, 2011

The 12 hour holiday programming challenge


Overview

This blog post deals with the conception, creation and completion of booark.com, and it's chrome extension.

The problem
A few weeks ago I spent an infuriating 45 minutes trying to track down an article I had read in the month earlier.


I searched through my web history to no avail, then flicked through every recent post on the site I believed the article came from. After that, I tried traditional Google search methods, localized to the site in question. Yet still, I could not find the link. Eventually I tracked the link down by remembering some obscure words used in the article, but not before I had wasted the better part of an hour in the process.


"Well why didn't you just Bookmark the article?" I hear you ask.


A good question. Normally when I come across an article I find noteworthy, I do add a browser bookmark. But that solution is less than ideal because it's very easy to end up with 100's of uncategorized, unsorted bookmarks. More often than not, I will likely end up purging them all in a batch at some point down the road to restore some order to my bookmarks. 


Of course there are plenty of social bookmarking tools like Digg and Delicious, but those tools have never appealed to me. Certainly I don't fancy the idea of facing community shaming if I chose the wrong category to apply to a link.


There has to be a better way right?


The proposed solution
What I really wanted was a bookmarking solution that allowed me to categorize and sort my bookmarks with labels relevant to me. For example, I might want to apply labels to an article such as:
  • present idea for wife
  • contact this person
  • research, programming
  • hotel, nyc


After doing a touch of reflecting on this problem in my idle time, I conceived a very simple solution to the problem: I would write a simple bookmarking utility, integrated into my primary web browser (Chrome), which would allow me to apply custom labels to links. It must be simple and fast to use. 


As an extra requirement, it would have to be written, from start to finish, in 12 (non-consecutive) hours or less. I am currently in the final stages of another (much larger) project, so I really couldn't afford to spend any considerable time on this side project. 


Development
Initially development progressed very quickly. I'd estimate it took me 4 hours to design the database & public API and deploy a functional version on the server that communicated with the extension. After that I got the initial table interface working (using the excellent DataTables) on my local development server, as well as writing the shell index page for the site.


At this point, I'd spent about 6 hours on the project and I had a fully functional prototype. As such, I was thinking I'd come pretty close to hitting my original time 12 hour time estimate.


Alas, this was to prove wishful thinking. As is almost always the case with any software project I've been involved in previously, the 'little details' end up taking the most time. Even on a project with a scope as small as this, this proved true here.


The rest of my time was spent like so:
  • Table styling and configuration - 4 hours
  • Page styling - 2 hours
  • Extension styling - 6 hours
  • Privacy policies & terms of service related work - 2 hours
  • Database reworks, server error checking, comm interfaces, page handlers, etc - 6 hours
  • Misc (Domain configuration & forwarding, creating Twitter accounts (@booark), logo creation, writing this blog, finding icons, etc) - 3 hours

Lessons learnt
The biggest lesson learnt is that my time estimates proved to be very inaccurate. I'd say I did a good job of estimating the points I was aware of at the time of making estimates. But I would have been better served adding some buffer time for points I haven't thought of yet. 


As an example, I decided to implement a Jquery Star Rating plugin to turn this:





into this:




Integrating the library proved easy enough. But as a result of integrating this library, the following work also had to be done:
  • Add a custom render method to the site and extension tables to convert the numerical  rating to use the star images
  • Add a custom filter method to the site and extension tables
  • Modify the initialized code of the stars on the extension once an existing rating had been retrieved
None of the work above was particularly difficult. But it did consume a few hours that hadn't been allocated for initially.


Of course I could just make a definitive task list and never allow myself to deviate from it. I am currently employing this plan with my other project to good results. But in this instance, I figured it would be better to spend some extra time really polishing the project to completion. 


Conclusion
Overall, I am very happy with the end result. Booark does everything I need it to do, it looks good, and is simple to use. I especially like how well integrated the Chrome Extension is.


My 12 hour project did balloon out to 29 hours in total, which on face value seems dreadful. But large portions of that extra work will be amortized into my other project, so I'm quite OK with the extra time spent. 


Also, considering the fact that this project was created from scratch, I think coming in well under a standard 40 hour work week is more than acceptable here.


As for future expansion, that really depends on how well Booark is received. If enough people use the application, I will likely look iPhone & Android apps, as well as a Firefox extension. 


Thanks for taking the time to read this. If you have any suggestions for this application, please feel free to contact me at lacy@digitalashes.com.