Sunday, 22 November 2009

RESTful Teamwork – Tips for Agile iPhone Development

[Concrete/Interesting] I’ve been working with a small team on an iPhone project. I bet half of you out there are doing something similar. One member of the team is struggling with Objective-C – I need to understand the costs and benefits of native development on the iPhone. The rest of us are working on a WebKit browser app for the iPhone . Naturally, I decided we must use REST to provide a good balance of speed and functionality on the device. I’m using the jQTouch framework (based around jQuery 1.3.2)with a bit of AJAX on the device framework and the server is developed in C#. The REST service is implemented under WCF, so building server side is a dream (see REST in Windows Communication Foundation).

Team working is a breeze – we have a basic data model and use this for reference. However, under my direction we are building up the solution screen by screen, focusing on the end user application and looking server side when we need data or processor. The team works very well because all we need to do is agree on the REST interface – the server implementation and implementation of the data model comes second. And to test, just dummy up an interface – it proves the workflow and allows the device team to focus on usability and the server team to focus on the service implementation.

I chose this approach for speed – I want to engage our client as we explore the iPhone and to do this, we needed to be agile, developing our prototypes quickly. Web developments are quick, especially if you chose the right framework. REST allows us to focus on the client with our client while perfecting the implementation in a background mode.

So here are my tips for agile iPhone Development:

  • Develop the client as a web application, it looks good with WebKit extensions and can always be re-implemented as a native application as and when you firm up the implementation. No messing with Apple and Mac – you can even test using Safari under windows.
  • Use Web Services and a bit of AJAX– this helps you prototype because interfaces can easily be dummied up, then perfected in the background. And if your services are doing the real work for you, the client takes on a more disposable nature. If you want to rewrite native later on, you don’t have a lot of core implementation to throw away
  • REST under WCF allows for fast interface development. Server side in .NET opens up technologies like LINQ and magically, your server side code is a lot more fluent.
  • Don’t worry too much about the data model – focus on getting the interface correct. This will start to dictate the model requirements – if you need the data in the client, the XML on the interface provides a schema that will be close to your required data model. It all just unfolds before your eyes.
  • Have someone working on a native client in the background – this helps build skills but buffers you from having to experience any pain in front of your client.
Finally, it’s RESTful, but is it Agile? Don’t know but my client is happy.