![Page 1: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/1.jpg)
Going UniversaliPad Lessons Learned at ING
Age MooijAndrew Snare
![Page 2: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/2.jpg)
![Page 3: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/3.jpg)
![Page 4: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/4.jpg)
Things were going well...
Background
![Page 5: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/5.jpg)
The Challenge
• Strong focus on UI look and feel
• Heavily customized/styled UI
• Complex security requirements
• Coming from behind the market
• There was an existing app based on the MSN chat-bot: universally embarrassing.
![Page 6: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/6.jpg)
The Process
• A pilot scrum project at ING
• 2 week sprints
• Started with one team, grew to 3 teams (iOS, Android, backend)
• Dedicated UX people
• Lots of internal stakeholders!
![Page 7: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/7.jpg)
“That’s great, but will it also work on my iPad”?– Really Important Manager
The Big DemoSeptember 2011
![Page 8: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/8.jpg)
“That’s great, but will it also work on my iPad”?– Really Important Manager
The Big DemoSeptember 2011
![Page 9: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/9.jpg)
BigPhone™ — Just Scale Up
Plan A
![Page 10: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/10.jpg)
Plan A: Results
• Took 2 weeks
• Developer hated being isolated
• Did not meet UX requirements
• It let us estimate the real effort.
![Page 11: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/11.jpg)
Lesson Learned
For a high quality app, you really need to create a separate iPad UI.*
*Duh!
![Page 12: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/12.jpg)
A Tale of Two Teams
Plan B
iPhone
Universal
iPhone
![Page 13: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/13.jpg)
Plan B: Results
• Lasted half a sprint
• Not sustainable due to merging overhead
• New team couldn’t help but slow the original team: they needed help.
![Page 14: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/14.jpg)
Lesson Learned
This was a really bad idea!
![Page 15: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/15.jpg)
One Big Happy Family
Plan CnewTeam
oldTeambigTeam = zip(newTeam, oldTeam)
![Page 16: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/16.jpg)
One Big Happy Family
Plan C
newTeam oldTeambigTeam = zip(newTeam, oldTeam)
![Page 17: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/17.jpg)
Plan C Result: 1.0
• This worked!
• Some pairs worked on new functionality, some on existing screens.
• Took 6 weeks, instead of 3
• Business very very happy.
![Page 18: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/18.jpg)
Lesson Learned
Pair-programming is a fantastic tool for scaling a team up quickly.
![Page 19: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/19.jpg)
So what did we really need to do?
The Nerdy Bits
![Page 20: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/20.jpg)
Splitting the Screen
![Page 21: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/21.jpg)
Splitting the Screen
• Oh, the pain: UISplitViewController
• It must be the root, but our starting grid is.
• View controllers could no longer be in charge of the entire screen.
• Handling teardown on errors was very very hard.
• Keeping the two sides synchronized:
• Current balance
• Refresh detail triggers refresh of master
• Refresh master triggers selection, which forces refresh of the detail.
![Page 22: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/22.jpg)
Lessons Learned
Custom UI and navigation flow is expensive.
View controllers should use a shared model.
![Page 23: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/23.jpg)
Reuse existing view controllers inside model dialogs.
This saved us a lot of time.
Modal Popovers
Here be dragons:-(UIViewController *)parentViewController;-(UIViewController *)presentingViewController;
![Page 24: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/24.jpg)
if (iPad) …
• Sometimes we could get away with a more generic solution:view.autoresizingMask = UIViewAutoresizingFlexibleWidth | …;
• We used a lot of if-iPad blocks:if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { … }
• We used subclassing:@interface FooViewController_iPad : FooViewController@end
![Page 25: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/25.jpg)
Rotation
• Rotation was originally omitted to save time.
Not an acceptable compromise on the iPad: people expect all orientations to work.
• Lots of small changes required, mainly with autoresizing behaviour.
![Page 26: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/26.jpg)
Cleaning up the mess…
Technical Debt
![Page 27: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/27.jpg)
Conscious Compromise
• Decision to trade off technical debt for meeting the deadlines.
• Paying off the debt is still an ongoing effort.
![Page 28: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/28.jpg)
Lesson Learned
Technical debt can be acceptable…
BUT
…be aware it may never be paid off.Don’t make the compromise if this is unacceptable.
![Page 29: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/29.jpg)
Next time?
Just start with universal from the start…?
Stay agile, but anticipate going universal:
• For example, UI/UX design that is easier to scale.
![Page 30: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/30.jpg)
And what’s next?
Where are we now?
![Page 31: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/31.jpg)
A Success Story
> 1,000,000downloads
Lots of feedback (about
missing features)
Consistent 4.5 star rating
4 major releases2 minor releases
About every 6-8 weeks
![Page 32: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/32.jpg)
Sneak Preview
![Page 33: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/33.jpg)
Sneak Preview
![Page 34: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/34.jpg)
Sneak Preview
![Page 35: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/35.jpg)
One more time…
• For a high quality app, you really need to create a separate iPad UI.
• Bad idea: 2 teams, 1 product.
• Pair-programming is a fantastic tool for scaling a team up quickly.
• Custom UI and navigation flow is expensive to build and maintain.
• View controllers should use a shared model.
• Technical debt may never be paid off: don’t make the compromise if this is unacceptable.
![Page 36: Going Universal: iPad Lessons Learned at INGgotocon.com/...amsterdam...GoingUniversalIPadLessonsLearnedAtINGMobile.pdf · One more time… • For a high quality app, you really need](https://reader034.vdocuments.us/reader034/viewer/2022042304/5ecf86401276907d56124c9b/html5/thumbnails/36.jpg)
Thank You!
Age Mooij (@agemooij)Andrew Snare (@asnare)
Questions?