Lost in LoC


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.

Traditional Skills Are Still Needed in Software Development

Posted in Development,Technology,Uncategorized by Ryan Baldwin on November 21, 2008
Tags: , , , ,

In one of my earlier posts I mentioned that for the past 7 years I primarily worked in the world of .NET.  I enjoyed those 7 years.  Microsoft’s .NET Framework is rich and fun to use.  The C# language continues to impress me as it matures, the Framework’s classes and libraries are intuitive to use, and the documentation, despite being about 2.5 gigs, is thorough, easy to understand, and complete.  As far as I’m concerned, Microsoft’s .NET Framework is a home run as far as frameworks go; it’s the big “Pro” when it comes to developing MS based applications.

That being said, there’s a lot of cons.  You pretty much have no choice but to use Windows.  You’re realistically stuck with having to use Microsoft’s flagship IDE, Visual Studio .NET.  Despite having fantastic integrated debugging, the IDE itself is very… Microsofty.  It’s very point and click.  The keyboard shortcuts aren’t very powerful (mouseless navigation is nearly impossible).  It’s expensive (if you’re not using one of the stripped down “free” versions). It’s bloated, slow, and buggy.  It crashes all the time.  It has very little support for Agile development, and what support there is completely misses the point (I’m looking at you, MSUnit).  I also think that VS.NET teaches novice developers how to do everything wrong (code-behind is a wickedly evil thing).  Overall, the entire thing really kinda sucks, and if it weren’t for ReSharper the thing would be almost useless.

About 2 months ago I started focusing hard on iPhone and Mac OS X software development.  One of the things I liked right off the bat was that I didn’t have to buy any development tools.  In fact, I didn’t even have to download anything because my Macbook Pro came with everything I needed to get going.  IDE for development? Check. Performance monitoring tools?  Check.  App for creating interfaces?  Check.  Incredibly impressed with the tools that come out of the box, ready for development (including Subversion, python, ruby, IDE’s and graphical tools)?  Check.  As far as development tools and “out of the box” readyness for somebody to get their geek on, Apple hit a home run.  This is Apple’s “Pro” entry.

Fast forward 2 months.  Ask me if I’m still developing my iPhone application.  Go on.  Ask.  I’m serious!  Do it!

Are you still developing your iPhone application?

Hell no.

Uh… why not?

Because despite having great tools out of the box (+1), the developer documentation is so horrendous that it artificially inflates the learning curve by a factor of 10 (-1 gazillion!).  Yes, there are oodles of example code at the Apple Developer site, and yes there are oodles of videos too.  That’s great if you already have a decent 5,000 foot view of the technological components you want to work with, but it sucks if you don’t have that 5,000 foot view.  And the only way to have that 5,000 foot view is if you’ve already been developing in Cocoa Framework for the past several years.

The problem is in the details, literally.  Their code examples demonstrate the raw intricacies of the how, but not the conceptual understanding of the what and why.  As a result I find it incredibly difficult to see the low level implementation details when I don’t have a decent understanding of the classes involved at a higher level.  At the other end of the spectrum are their videos.  These videos are 50,000 foot pie-in-the-sky views that give the audience a really casual understanding of general stuff.  They’re essentially marketing videos for nerds.  They’re great if you’re just getting started and you need a super-high level view of how the various frameworks piece together, but they don’t prepare you to actually do anything.

So what about the documentation that comes with the development tools?

A great question!  Let me take the Socratic method and answer your question with a question.  What documentation? Imagine, if you will, the horror of opening up the documentation tool for Xcode (an entirely separate application that helps you search and organize Apple’s documentation – good in theory, fails miserably in practice) and finding that the documentation for almost every single class and method is only 1 sentence long, and that 1 sentence is the most formal, computer-sciency idiomatic statement you can possibly imagine.  That’s Cocoa’s documentation.  The inline comments provided by the header files are better, but barely.

This has frustrated me on so many occasions that the euphoria I experienced while trying to develop my first iPhone application quickly turned into the searing pain of frustration and anger.  It frustrates me doubly so because Apple is a fantastic company with fantastic products for which I desperately want to contribute, but I can’t.  I have a limited amount of time every week that I reserve for Apple development, and their lack of documentation is completely counter productive.  I can easily spend the entire time searching for a snippet of easy to read, easy to understand documentation about, for example, what methods you have to implement in order for your class to act as a delegate to some other class.  The documentation just isn’t there, and if it is, it’s so horribly organized that I couldn’t find it if it jumped out and kicked me in the junk.

This brings me to the point which I eluded to in the title of this entry.  It’s great to have lots of fun, good looking, easy to use tools.  It’s great to sit down and hammer out oodles of code.  It’s super duper fun to compile your application and watch it run, crash, and burn.  Those are great skills to have, but the thing that really makes software development a joy is the same thing that makes almost any other traditional profession a joy:  clear communication.

I once met a kid in grade 10 that was a computer whiz, but was failing out of school because he refused to apply any of his efforts towards his non-technical, non-sciency classes.  At the top of this failure list was English.  I asked him why he didn’t like English.

Because it’s stupid.  I’m not going to use it!  I want to be a programmer, not an author!  I don’t care about that stuff!

Needless to say I had to inform him that a very large portion of my job is not writing code, but communicating complex ideas to other people.  People that are both tech-savy and technically-inept.  Communication is one of, if not the most important skill in software industry.  He was shocked.

I once had a job in which I was told, on my first day, that my responsibilities would be “to port application X into application Y”.  I asked where the requirements were and if I could have access because I will need to review those requirement in order to do the job.  I was told that there weren’t any requirements, and that I should just “read the code.”  Naturally the person who told me this was not a technical person, and I couldn’t get mad at them because as far as they knew reading code was just like reading a well written novel.  In reality, reading code is more like reading a very poorly written novel, in which there are either far too many or far too few characters, and all the pages are mixed up, and there are no page numbers, and all of a sudden it just ends.

For whatever reason, Apple has forgotten the importance of clear communication.  This is unfortunate because Apple is in a position in which they can take a significant dent out of Microsoft’s developer base if they wanted to.  Apple has all the fun sexy toys.  They have all the innovation.  They have all the trend and momentum right now.  Microsoft, conversely, has a failing strategy in almost every segment of the computer industry.  If Apple could deliver a rich, thorough, and well organized set of documentation for their Cocoa framework, it could be a huge blow to Microsoft’s developer strategy.  So far, though, Apple is completely dropping the ball.

Apple.  If you’re listening – get busy and floor me with some excellent documentation.

Readers.  If you’re willing – floor me with some excellent resources that tell me the what and why, and not the how of the Cocoa Framework.

VendAsta Technology is an All You Can Eat Buffet.

Posted in Uncategorized by Ryan Baldwin on October 24, 2008
Tags: , , , , , , , , , , , , , ,

This week marked my first week on a new project at VendAsta.  For the past 7 years I’ve spent my professional life awash a sea of .NET technologies.  Web? ASP.NET.  Desktop?  Win32 & WPF.  SOA? SOAP & WCF.  And so on and so forth.  That all came to an end this past Monday when I transitioned away from our .NET project and started work (or training, rather) on our own spin up application.

Excited?  Indeed.  But that overhwelming sense of “oh man, what have I gotten myself into” has been red-lining for 5 days.  Reason?  I have literally a dozen technologies that I need to learn… and they’re adding all the time.  Currently, this is the list of technologies I need to learn:

  • Google App Engine
  • BigTable (or is it DataStore now?)
  • Django
  • jQuery
  • Python
  • YUI (Yahoo! User Interface)
  • FBML (Facebook Markup Language)
  • Facebook API
  • CSS (Yea, it’s been years and I can’t remember jack)
  • OpenID
  • OpenSocial
  • FriendConnect

These are all technologies we are currently planning on using in our new application.  The list may (and likely will) change during as the requirements change, but so far this is it.  As I said, I’m pumped… but man… can I do it?  Can I manage this curve?  You know it.  Can you?  Would you like to find out?

You and all your mashups… like I’m afraid of you, Web 2.0!

Lets Create an Interface!

Posted in Uncategorized by Ryan Baldwin on October 6, 2008
Tags: , , ,

I stopped watching CSI a long time ago. As soon as they started franchising that show into every possible different CSI parallel I quickly lost all interest. I always thought that CSI Miami, with Mr. Carusso leading the charge with his hands firmly on his hips displaying his incredibly calm, cool and collected physical prowess, was the worst of the bunch. However, the sunglass wielding hands on hips pre-commercial suspenseful climax was out done recently by Gary Sinise and his squad of super computer hackers, as seen below.

Wow.

“I’ll create a GUI interface using of dead tree bark and a pack of wrigley’s chewing gum, see if I can track an IP address!”

“I’ll create a GUI interface using the back of a ’57 chevy and a couple of dead lumberjacks, see if I can track an IP address!”

“I’ll create a GUI interface out of the remaining tape scraps of all those terrible Seinfeld meets Gates commercials and a couple of white tigers, see if I can track an IP address!”

This has to be one of the worst written product placements I’ve ever seen… It’s almost incoherent. It’s right up there with a Season 2(?) episode of Alias when, at the start of a high-paced car chase, our faithful heroine yells “Quick! Get in the Ford F150!”, followed by a extreme closeup of the Ford logo as they peel out of the parking garage.

What can you make a GUI interface out of?