Lost in LoC


Top Albums of 2009

Posted in Music by Ryan Baldwin on December 14, 2009

Well ladies & gentlemen, it’s that time of year again where I make a list that nobody reads or cares about. Considering this is more an exercise in reflection than it is in sharing my highly-toted-to-nobody-in-particular opinion, here are my favourite albums of 2009 without any explanation. YMMV.

#10 – Kurt Vile: Childish Prodigy
#09 – Real Estate: (ST)
#08 – Bat For Lashes: Two Suns
#07 – The Antlers: Hospice
#06 – Bonnie “Prince” Billy: Beware
#05 – Animal Collective: Merriweather Post Pavillion
#04 – Grizzly Bear: Veckatimest
#03 – Future of the Left: Travels With Myself And Another
#02 – Micachu & The Shapes: Jewellery
#01 – Do Make Say Think: Other Truths

MashedIn – Fuelling Your Connections With Oxygen

Posted in Uncategorized by Ryan Baldwin on December 10, 2009

This past week my team and I worked on version 8 (Oxygen) of MashedIn. We had 2 goals going into this version:

  • Provide a better, more predictable user experience when authenticating with the product
  • Do a better job at handling badness when talking with Facebook, Twitter, and other social partners
  • Fix bugs!

It never ceases to amaze me how much our team can accomplish in as little as 3 days of development time. Here’s the fifty thousand foot view.

  • 4 improvements to how we authenticate and manage sessions with our social partners
  • Bunch of preliminary branding work. Pretty pictures! Human readable copy! Personality provided by cheeze wiz!
  • 13 bug fixes
  • 8 bagels eaten
  • Several dozen carafes of coffee confidently consumed

Now, that may not sound like too much, but that’s a full 3 days of work across a team of 4 developers, including design meetings, decision making, and the occasional head butting. I believe we tackled some good things this sprint, and the experience we provide to the user is a little more predictable; we shouldn’t be shattering your expectations anymore.

There were 2 main challenges we faced in Oxygen. First, the more we investigated how to better manage expectations for the user (that is, not shock and awe the user with unexpected, crappy behaviour) the more subtleties we discovered. Most of these subtleties came in the form of Facebook Connect. Managing your sessions can be quite difficult thanks to the persistently authenticated nature of Facebook Connect (and the fact that we don’t control any of it). What happens when I sign into Facebook using an alternative set of credentials, but then I visit MashedIn and MashedIn determines that I have a different Facebook user associated with my account than what Facebook Connect dictates? What’s the best way to handle this? How transparent do we need to be to the user? Do we really want to provide a bunch of subtle options? Are those options going to frustrate the users? It’s a tough call, and we believe we’ve made the right decisions, but a good round of user testing will definitely help us out.

The 2nd challenge was one of irony: Facebook has been biting the proverbial dust all week. Without Facebook we can’t grab social information for the visitor. Without social information we can’t effectively perform what we want our product to do. Without doing what we want to do in the app we’re wasting the time of our users by providing them crap all for value. With Facebook crapping out this week, we were able to uncover a lot of really poorly written code. We were able to eat our own dog food, and it tasted like… well, dog food. It sucked. We all went crazy. Brett, one of our developers, started wearing a monkey suit to work. It was total chaos. As a result, we addressed a bunch of the Rainy Day scenarios and made our dog food taste more like a bottle of cheap wine. While what is there isn’t perfect, we believe the overall quality of both the code and the user experience is better. One week at a time, my friends, one week at a time.

Next week we start our 9th sprint. If you’re a chemistry buff you’ll know that Fluorine has an atomic weight of 9. You’ll also know that Fluorine is an extremely toxic element, one that may cause severe burns when it comes in contact with the skin. As such I think it’s fitting that we’re attempting to accomplish a lot of painful things in Fluorine. We have 2 goals for next week:

  • Fail faster! By that I mean improve performance by not allowing several retries that ultimately result in failure. Fail hard, and fail now! (Note: we’ll be doing lots of other things to improve performance… embracing failure is just one of them)
  • Make it pretty! We’ve spent a lot of time during Nitrogen and Oxygen gearing up our look and feel, branding, etc. Now we want to start pulling the trigger on those ideas.

Next week should be interesting and pose a lot of new challenges. I’m expecting that by the end of Fluorine we’ll have a better performing, better looking product. One that will hopefully make you smile and bring a tear to your eye. So keep checking back, and make sure to go give MashedIn a spin and let us know what you think (good, bad, terrible, fantastic – all feedback is welcome)!.

Until then, The Dude abides.

MashedIn – Bringing Y’all Together One Element at a Time

Posted in Development,Shameless Corporate Plugs,Technology by Ryan Baldwin on December 4, 2009
Tags:

Over the past 7 weeks I’ve been working on a project at work called MashedIn. The goal of the project is to provide social context to otherwise contextual-less online media. For example, pretend I write a blog (which I do… somewhat… kinda…). Using MashedIn I can put a widget on my blog which allows the visitor of my site to see how he or she is connected to me through Twitter, Facebook, and other social networking services (some coming in the near future). This may seem like something trivial (note: it’s not), and on the outset it may seem like something that provides very little value (note: not true), but the fact is it can be a tool of great power when used in the proper setting.

That proper setting is locality. If your’e reading my blog chances are you don’t know me. About 90% of my hits come from a few keyword searches and Google. If I had the MashedIn widget on my blog, and you actually decided to see what it was all about, you’d likely be quite disappointed because – well – we’re likely in different cities, if not other countries. However, imagine you’re viewing the website of your local butcher shop and they have the MashedIn widget on their site. You may have never done business with the butcher shop, you may not even know that the butcher shop in question works only with lamb (they really love their mutton), but by signing into the widget you suddenly realize that you know a few people that work there, and you have several mutual friends. Suddenly you have a boatload of people you can ask about this butcher shop.

That functionality may still sound trivial, but if you start with that foundation the power and complexity that may be provided to you the visitor can suddenly ramp up, especially if you integrate the mashed social graph with other online crowdsourced services (such as StepRep‘s recommendation system). Out of the box the widget doesn’t seem very impressive, but we’re only 7 weeks in and we have a huge backlog of ideas that can make this thing pivotal to bloggers, local businesses, etc.

We’re developing MashedIn 1 week at a time (each week named after the element with the corresponding atomic weight). Every Friday morning we plan what we’re going to do for the following Monday through Wednesday. Every Thursday we wrap things up; do one last round of integration, testing and debugging, and then release. The velocity is high and the focus intense. Lots of fun agile practices such as Test Driven Development, pair programming, etc. But more importantly there’s lots of interesting challenges to be solved.

In the 4th week of development (named Beryllium because Beryllium has an atomic weight of 4, you getting this now? Yea, nerdism at it’s best) some pretty bad design decisions were made regarding how we manage all the different social networks MashedIn works with. We spent a bunch of time on the 3 subsequent sprints (Boron, Carbon and Nitrogen) fixing these decisions, and we’re finally at a state that we’re content with… for now. This exercise has been interesting, however, and has proven what we all heard in first year comp-sci: The most expensive part of software development is adjusting code that’s already been released. Keep in mind we spent 1 week (3 days, really) back in Beryllium to write the code that’s pivotal to handling MashedIn’s core system. The design was so poor that it cost us the lion-share of Boron, Carbon and Nitrogen to fix. That’s some rather hefty opportunity cost to pay for not having spent a few more hours group-thinking about a better solution. Thankfully we can finally move on and get back to concentrating on some of the more interesting problems.

Monday marks Day 1 of Oxygen (our 8th week). This sprint’s theme is more consistent and user friendly session management with our various social partners. This is a complicated task because Twitter’s implementation of OAuth is significantly different than Facebook Connect, and who knows how that is different from all the other social networks. We’ve developed patterns over the past few sprints which have significantly improved the experience, but there are still some gotchas that need handling. How do we gracefully handle an expired session, especially since that session is outside of our control and can literally expire at any time? What do we do when a visitor is looking at a widget and the owner of that widget has failed to allow for Facebook’s persistent permissions? How do we balance what the visitor of the site cares to see and do vs. the system’s requirements to do all that crazy processing (thus requiring special permissions from the owner of the widget)? It’s an interesting mix of challenges, and I look forward to seeing what we come up with next week.

Until then, The Dude abides!