agile apps–effective mobile and native development

Brief

As the rise of iOS, Android, and the Mac App Store brings more web developers into the world of native applications can our existing processes and best practices survive the transition? How can we release early and often in an environment where each update must pass through a review process? How do we aggressively refactor code when outdated clients must be supported? Can we iterate efficiently on features when design changes require more than a stylesheet update? A group of experienced web, mobile, and native app designers and developers will discuss our experiences working on native applications. We will explain what unexpected challenges we encountered coming from a web background, what strategies have helped us design and develop native applications, what did not work, and what we should learn from experienced native application developers.

Notes

What do you have to have in place to iterate on a product in an efficient way? Focus on the tools around your product (build tools, versioning, analytics) to reduce friction/barriers to deliver betas/updates. Build automation around your development process (i.e., push updates out instead of waiting for devs to pull down?). TestFlight + GitHub.

Mobile: Put heavy data work / logic on server-side so that you are delivering post-logic data objects to the app instead of putting a lot of logic in the app that has to be updated often. Data-driven (drop data onto server, THEN do things to it).

Difficult to prototype. Have confidence up front that what you’re about to get into is the right approach for you. Visual mockups + image maps / javascript to get a feel for interactions.

High-fidelity mockups: Great design will make your app better, but if you’re counting on design to make your app great you’ve failed before you’ve begun.

Then we broke down into a conversation about the advantages of mobile apps…

Analytics: Apps should support a way to measure which users it is serving and what it is doing for them and start out measuring the success of that core.

Pick a single, easy win by identifying the core of what the app should do (subset of tasks users will use in mobile), build stuff on top.

Testing: Back-end developers need completely automated unit testing so that test-driven development reinforces whether or not a developer can be confident in his work. Front-end developers may not find test-driven development as useful: UI-drive tests not as useful/complex to build. Beta/usability testing, QA, and analytics are better ways to do “test-driven” front-end development. Automated unit testing tied to diffs (test what has changed in addition to standard paths)?

Feedback: If you probe beta testers with specific questions (What did you think about using this feature/option?) instead of a general open form for feedback is much more successful and provides richer information.