I’m developing my own Foursquare client for the Windows Phone

10 March 2011

I’m developing an unofficial Foursquare client app for Windows Phone in my spare time that will be available free on the Windows Phone marketplace this month. I will have another blog post soon introducing the app in a more official capacity, this is just setting the stage.

With an emphasis on design that you’d expect from a great Windows Phone app, the app is fun to use, responsive, and almost as addictive as coffee if you’re into 4sq like I am. Here’s a quick look at the app – it respects your theme preferences, accent coloring, and looks beautiful.

A preview of my unofficial Foursquare client

Building a complete app of this size from the ground-up has been a great learning experience. It has given me a lot of good perspective to bring back to the product team (the day job), and it fits my needs perfectly, since I love Foursquare and am passionate about having the best experience using it on my phone.

The Windows Phone development environment is stellar, really productive; I’m amazed at how quickly I can add new endpoints, build up functional UI, and in general be productive.

Full disclosure, I’m a developer on the Silverlight Phone & Devices team, so I have my own fine opinions in this space. But it’s fun, easy, and I can’t wait to see more people get into the groove.

Why build yet another Foursquare app?

Although the Foursquare app for Windows Phone today is ok, it doesn’t support a number of great new features that Foursquare has added to their iPhone and Android apps, such as photos, commenting, and new features released at SXSW this week (such as leaderboard updates whenever you check-in at a place), so I’m focusing on adding that sort of functionality, while polishing the user interface and experience to better match how I would expect a world-class app for the Windows Phone to look and feel.

I’m sure, in time, the official app will be updated as well. It makes perfect sense to me why they should focus development on those platforms initially given the number of users they are serving with those devices. There’s going to be a chicken-and-egg situation with apps for a while on any new platform.

So I’m not looking to completely replace that nice official app, but if others find my client useful, that’s great, too! I know my Windows Phone friends on Foursquare want a better experience, and I’ve had a number of good friends testing my new application to help get it ready to release into the wild. Stay tuned.

Loving Windows Phone development today

I’ve been using a Windows Phone (Samsung Focus) since mid-November last year, and I’m happy to say that it’s been a pretty good process overall. I’m consistently amazed at how many people ask to see it when I’m out on the town – it is my opinion that in time this is going to be a very strong contender, and the Nokia involvement is pretty exciting. The marketing is right about one thing: having your next meeting right on the lock screen is super important for my day job, I’m always running from meeting to meeting.

Interest in the dev platform is going to grow, and so it’s very important for me as a member of the Silverlight for Windows Phone team to have a good understanding of the lifecycle of app development, especially a hard look at platform limitations, where we can do better, and what’s missing, in building out a complete Windows Phone app that matches the user experience expectations that our users have.

Building such an involved app has helped me get into the customer mindset even more: experiencing some of the pains today, the joy of getting something working, and then having the experience of using my very own app out in the real world as I check-in to places.

I traveled the world last year meeting with customers large and small to make sure that the initial applications all had a good launch, and along the way helped build guidance about performance, common issues and pitfalls, and came up with a number of suggestions I think all wp7 app devs should consider. That knowledge, combined with my experience building my own Foursquare app, is really interesting, and I cannot wait to share some of those tips because I think it will help drive quality into all the apps out there.

Why Foursquare

I’m an avid Foursquare fan. I’ve been using it for a long time now, find it a really fun way to share experiences with friends (the new more visible leaderboard in v3 is fun, as are check-in comments!), and yes, I admit that I use my phone for only a few things: e-mail, 4sq, the occasional Facebook or Twitter update, and maps. That’s in priority order. I’m always checking in, because it’s fun with Foursquare – Facebook places is just boring in comparison.

From an application perspective, Foursquare is a sufficiently complex application (over 40 views/pages) that the learning experience has so far been valuable, and it covers many typical application scenarios for the smartphone form-factor: location services, camera and picture integration, privacy, and plenty of web services and rich content.

From a development standpoint, Foursquare has a solid application programming interface that is pretty open, uses OAuth2, JSON, and represents the state of the art for most strong web services today. Perfect candidate.

Though I briefly considered charging for the app, this is my gift to the Windows Phone world – hopefully there are some Foursquare fans on WP7 that will appreciate that!

Looking at recent Foursquare innovations

As I mentioned at the start, Foursquare has recently made exciting new improvements to its service, expanding the “game”, and so there are a number of features that are not supported on the Windows Phone client today.

As a Windows Phone user, I want to be able to enjoy the same experience as friends with iPhones and Androids… and it’s just a matter of the software here. I want to experience these great Foursquare features:

  • Photos of venues
  • Photos with tips
  • Associating a photo with a check-in
  • Commenting on check-ins
  • Leaderboard results when checking in
  • Additional special types
  • and more

I hope to fully support all these great new features where I can, enabling Windows Phone users to experience the same great things that our iPhone and Android friends can today with the latest Foursquare 3 client.

The Windows Phone development environment

Touchscreen panel + emulator!Visual Studio has always been a great place for coding, but combining that with the rich Silverlight design surface, the free Expression Blend tool for UI tweaking, and a way of debugging using my phone device or the Windows Phone emulator, it’s all very solid.

Most recently, I was able to setup a station with a touch-screen monitor on a Windows 7 machine. The result is the ability to use the Windows Phone emulator more like a real phone – being able to pinch, flick, and pan using real touch manipulations is a great improvement over using the mouse in testing before. All I did was plug in the touch-screen monitor and go! Here’s a short YouTube video of that experience while debugging.

Components, components, components

One reason that I have not yet released my app on the marketplace is that I’ve been tweaking, polishing, and filling out the user experience through a large component/control library. As a side project in my evenings, this has been a labor of love.

Building out an application this large with the right level of performance is not easy, and I’ve had to build a number of specialized components along the way. Many of these components I’ve polished enough to behave just like you would expect the Windows Phone to – and this is important to me. I don’t want a user to have an inconsistent experience from the rest of the phone, and so I’m taking the time to build these to a high level of quality.

I have an eye for detail and as a result really find it offensive when I’m using apps that don’t respect the OS design and user’s preferences, for example: I want my selected “accent color” to come through in the app. I would like the experience to feel authentic to the Windows Phone, and not be a “port” of some other app experience from another platform.

So now I’ve built up an army of components. Most are specialized, but over time, I will find a way to share them with the community at large. Give me time!

A core part of this application is a sweet way of loading and caching data from the web for use in model objects and data binding. Details will be out on that in a bit, too.

Do we need a Three20 for Windows Phone?

If this reads a lot like Joe Hewitt’s “Developing Facebook for iPhone” post, it is on purpose - I’ve drawn a lot of inspiration from learning about the Three20 project that Joe started. It started for a similar reason as why I am building so many custom components – matching the OS, filling gaps where there are no official controls in the SDK yet, and working to improve the ease of use (pulling and caching data from the web, for instance). It’s also somewhat comforting (and maybe a little disturbing) to me that I can read posts about the Apple development platform, mentally replacing “Apple” with “Microsoft”, and understand that all app platforms seem to go through the same trials and tribulations.

Three20 is an open source project initially started by Joe, offering a number of the components built for the Facebook app for iPhone, generalized and polished for use in pretty much all the top iOS apps today.

I’m not ready to commit to releasing my mixed-quality-bag specialized-components, but I think the community at large is going to continue to build out additional solid components – I’m already seeing many active phone and Silverlight developers starting to share their components, which is sweet.

Excited to share more with you all over the coming months. I will be blogging technical details on my blog here, as well as sharing tidbits on Twitter – so please do follow me, @jeffwilcox.

Jeff Wilcox is a Software Engineer at Microsoft in the Open Source Programs Office (OSPO), helping Microsoft engineers use, contribute to and release open source at scale.

comments powered by Disqus