SlideShare a Scribd company logo
1 of 23
Download to read offline
CBC RADIO APP 2.0
Developer: Ash Mishra
ash.mishra@cbc.ca
November 2010
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
CBC Radio App 1.0 for iPhone development started
in March 2009 - Released July 2009
No major updates since that date
Several hundred thousand downloads
High user satisfaction
Requests for background audio playback
History
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Offer Radio 1, Radio 2, Radio 3, and TV Audio
Listen to live streams and music channels
Provide CBC podcasts
Favourite audio
View schedules
Find local frequencies
Embedded CBC.ca website
Functionality
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Offer Radio 1, Radio 2, Radio 3, and TV Audio
Listen to live streams and music channels
Provide CBC podcasts
Favourite audio
View schedules
Find local frequencies
Embedded CBC.ca website
Functionality
Support iOS 4.x background audio and remote
Scaled iPhone version for iPad
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Hmmm ... Boring! And not compelling
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Designed for iPad, not a giant iPod Touch
Auto Lo / Hi bandwidth switching for 3G / WiFi
Tracked episode playback positions
Auto-play, Sleep timer, Alarm clock
Share Audio by Email, Facebook or Twitter
Embedded Radio 3 Website with native playback:
100,000 tracks on demand from 23,000 artists
These are personal ideas
Hmmm ... Boring! And not compelling
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
What differentiates a design-by-committee product
and one that exceeds expectations?
Personal attention
Alot of thought given to design, features; Humans
are emotional, so apps need to speak to our
emotions
Many minute adjustments to animations, colour
choices, layouts, font sizing, shades of grey
Hours and hours of testing, actively seeking bugs
Delivering Success
Can’t
stress this
enough !
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
One developer / producer on loan
One part-time designer
One product champion
Resources
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
One developer / producer on loan
One part-time designer
One product champion
Resources
NO project manager
NO specification!
3 months
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Know your domain
Understand your audience
Be passionate
Explore, experiment
Get business support – product champions
Organise the work
Develop intelligently *
Iterate
Technical Process
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
CBC Radio 1.0
Interface completely coded – no Interface Builder
Controller, views, model mixed together, not MVC
No clear understanding of the problem domain
Over-engineered: localisation, caching
Plus... Lower the Technical Debt
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
CBC Radio 1.0
Interface completely coded – no Interface Builder
Controller, views, model mixed together, not MVC
No clear understanding of the problem domain
Over-engineered: localisation, caching
Plus... Lower the Technical Debt
CBC Radio 2.0 is an 85% rewrite
True MVC
Interface Builder when possible
Built on a reusable framework
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Employ strategy of “Sufficient Design”
Convention-over-configuration & reflection to map
XML data into Model objects
MVC enforced by the use of protocols
UIWebView for relative positioning
Reuse of iPhone UIViewControllers for iPad
Optimise only when needed
Technical Approach
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
A convention to map XML elements and attributes
to Class properties
Fetch and digest XML; use reflection to determine if
a Class has a property that can be set
(NSKeyValueCoding protocol)
Benefits:
Dynamic mapping – no glue code
Less code – easy maintenance and extension
The Model Layer
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Multiple types of audio sources: Live Streams,
Music Channels, Podcasts, Audio from Websites
Plus multiple ways to present content visually
How to design?
If we use IF statements to differentiate between
types, we’re doing it wrong
Solution:
Design protocols that hide concrete classes
1 protocol for Audio playback, 1 for Visual display
Enforcing MVC
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Write controllers that operate on the Audio Protocol
Build views that use content from the Visual Protocol
Enforcing MVC
Live
Radio
Music
Channels
Podcasts
Website
Audio
Audio Protocol Visual Protocol
Controllers andViews
Model
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Interface Builder is good for:
basic resolution independence
orientation independence (important for iPad)
visual layout – can be used by designers
UIKit doesn’t permit relative positioning
So if you have UILabels with variable number of
lines, IB is difficult for relative layouts
One solution: use UIWebView, which supports
relative positioning
UI
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Many views don’t need a custom interface for iPad
Use UIPopoverController to reuse iPhone
UIViewControllers
Also use Modal views – presentModalViewController
Reuse iPhone UIViewControllers for iPad
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Classic issue – Business vs. Engineering:
Business wants a product as fast as possible at
lowest cost
Many places do not understand Software is an art
Developers want to craft great code – but that
takes time
Is a balance possible?
Approach to Architecture
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Under-design: Quick as possible cowboy coding
Only thinking about 1.0 release
Spaghetti code, bad coding style, buggy
No abstraction, no MVC, or even OOP
Throwaway code
Over-design: Building for worst-case scenarios
Added layers of complexity (too much abstraction)
Longer development cycles
More code to maintain, ironically less agile
The Extremes
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
Spend time designing for critical components
Example: the protocol for audio playback
Don’t spend time over-designing for components
that provide zero or no value
Example: caching where it’s not needed
Assemble parts when possible, instead of building
from scratch. Lower initial costs, as well as future
maintenance.
Example: Audio playback engine is 3rd party
Balanced or “Sufficient Design”
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
“Sufficient” doesn’t mean “compromised”. It means
lean and more maintainable.
We are still responsible for proper MVC and OOP;
these are critical parts of the architecture.
How to do it?
Protocol for Audio playback was not planned, but
developed when it was needed – iteratively
In a given problem, use the maturity of your
skillset to lower technical debt
Sufficient Design Continued ...
Thursday, November 4, 2010
CBC Radio App 2.0 - iOS
*See Industrial Logic for more on Sufficient Design
Questions?
Thursday, November 4, 2010

More Related Content

Similar to CBC Radio App 2.0 iOS

Flash for Blackberry, iPhone and Android
Flash for Blackberry, iPhone and AndroidFlash for Blackberry, iPhone and Android
Flash for Blackberry, iPhone and AndroidMindgrub Technologies
 
Battle of Music: SDK from iPhone, Nokia, BlackBerry, Android, Palm
Battle of Music: SDK from iPhone, Nokia, BlackBerry, Android, PalmBattle of Music: SDK from iPhone, Nokia, BlackBerry, Android, Palm
Battle of Music: SDK from iPhone, Nokia, BlackBerry, Android, PalmBess Ho
 
Introducing LibreOffice
 Introducing LibreOffice Introducing LibreOffice
Introducing LibreOfficeOSSCube
 
WWDC 2015, Moscone Center, San Francisco - Day 1
WWDC 2015, Moscone Center, San Francisco - Day 1WWDC 2015, Moscone Center, San Francisco - Day 1
WWDC 2015, Moscone Center, San Francisco - Day 1Appinventiv
 
Mobile Game Development using Adobe Flash
Mobile Game Development using Adobe FlashMobile Game Development using Adobe Flash
Mobile Game Development using Adobe Flashchall3ng3r
 
Long Live the Legacy of HBO Max- Insights You Need to Know.
Long Live the Legacy of HBO Max- Insights You Need to Know.Long Live the Legacy of HBO Max- Insights You Need to Know.
Long Live the Legacy of HBO Max- Insights You Need to Know.Techugo
 
Appcelerator: iOS 10, Titanium SDK & Hyperloop
Appcelerator: iOS 10, Titanium SDK & HyperloopAppcelerator: iOS 10, Titanium SDK & Hyperloop
Appcelerator: iOS 10, Titanium SDK & HyperloopHans Knoechel
 
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...Codemotion
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolAlessandro Cinelli (cirpo)
 
Text to speech converter in C#.NET
Text to speech converter in C#.NETText to speech converter in C#.NET
Text to speech converter in C#.NETMandeep Cheema
 
Lotus Messaging & Collaboration Strategy: LCTY 2011
Lotus Messaging & Collaboration Strategy: LCTY 2011Lotus Messaging & Collaboration Strategy: LCTY 2011
Lotus Messaging & Collaboration Strategy: LCTY 2011IBS Bulgaria
 
Streaming with Azure Media Services
Streaming with Azure Media ServicesStreaming with Azure Media Services
Streaming with Azure Media ServicesZeddy Iskandar
 
Droidcon 2011: Gingerbread and honeycomb, Markus Junginger, Greenrobot
Droidcon 2011: Gingerbread and honeycomb, Markus Junginger,  GreenrobotDroidcon 2011: Gingerbread and honeycomb, Markus Junginger,  Greenrobot
Droidcon 2011: Gingerbread and honeycomb, Markus Junginger, GreenrobotDroidcon Berlin
 
IE9 the story so far
IE9 the story so farIE9 the story so far
IE9 the story so farthebeebs
 
Building an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learnedBuilding an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learnedWojciech Koszek
 
Native Mobile Application Using Open Source
Native Mobile Application Using Open SourceNative Mobile Application Using Open Source
Native Mobile Application Using Open SourceAxway Appcelerator
 
OSCON Titanium Tutorial
OSCON Titanium TutorialOSCON Titanium Tutorial
OSCON Titanium TutorialKevin Whinnery
 
Magnolia for VPRO's Pinkpop Music Festival Website
Magnolia for VPRO's Pinkpop Music Festival WebsiteMagnolia for VPRO's Pinkpop Music Festival Website
Magnolia for VPRO's Pinkpop Music Festival Websitebkraft
 
Devoxx uk 2019 digital jukebox
Devoxx uk 2019 digital jukeboxDevoxx uk 2019 digital jukebox
Devoxx uk 2019 digital jukeboxScott Sosna
 

Similar to CBC Radio App 2.0 iOS (20)

Flash for Blackberry, iPhone and Android
Flash for Blackberry, iPhone and AndroidFlash for Blackberry, iPhone and Android
Flash for Blackberry, iPhone and Android
 
Battle of Music: SDK from iPhone, Nokia, BlackBerry, Android, Palm
Battle of Music: SDK from iPhone, Nokia, BlackBerry, Android, PalmBattle of Music: SDK from iPhone, Nokia, BlackBerry, Android, Palm
Battle of Music: SDK from iPhone, Nokia, BlackBerry, Android, Palm
 
Introducing LibreOffice
 Introducing LibreOffice Introducing LibreOffice
Introducing LibreOffice
 
WWDC 2015, Moscone Center, San Francisco - Day 1
WWDC 2015, Moscone Center, San Francisco - Day 1WWDC 2015, Moscone Center, San Francisco - Day 1
WWDC 2015, Moscone Center, San Francisco - Day 1
 
Mobile Game Development using Adobe Flash
Mobile Game Development using Adobe FlashMobile Game Development using Adobe Flash
Mobile Game Development using Adobe Flash
 
Long Live the Legacy of HBO Max- Insights You Need to Know.
Long Live the Legacy of HBO Max- Insights You Need to Know.Long Live the Legacy of HBO Max- Insights You Need to Know.
Long Live the Legacy of HBO Max- Insights You Need to Know.
 
Appcelerator: iOS 10, Titanium SDK & Hyperloop
Appcelerator: iOS 10, Titanium SDK & HyperloopAppcelerator: iOS 10, Titanium SDK & Hyperloop
Appcelerator: iOS 10, Titanium SDK & Hyperloop
 
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the fool
 
Text to speech converter in C#.NET
Text to speech converter in C#.NETText to speech converter in C#.NET
Text to speech converter in C#.NET
 
Lotus Messaging & Collaboration Strategy: LCTY 2011
Lotus Messaging & Collaboration Strategy: LCTY 2011Lotus Messaging & Collaboration Strategy: LCTY 2011
Lotus Messaging & Collaboration Strategy: LCTY 2011
 
Streaming with Azure Media Services
Streaming with Azure Media ServicesStreaming with Azure Media Services
Streaming with Azure Media Services
 
Droidcon 2011: Gingerbread and honeycomb, Markus Junginger, Greenrobot
Droidcon 2011: Gingerbread and honeycomb, Markus Junginger,  GreenrobotDroidcon 2011: Gingerbread and honeycomb, Markus Junginger,  Greenrobot
Droidcon 2011: Gingerbread and honeycomb, Markus Junginger, Greenrobot
 
IE9 the story so far
IE9 the story so farIE9 the story so far
IE9 the story so far
 
Building an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learnedBuilding an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learned
 
Ycs iphone-development
Ycs iphone-developmentYcs iphone-development
Ycs iphone-development
 
Native Mobile Application Using Open Source
Native Mobile Application Using Open SourceNative Mobile Application Using Open Source
Native Mobile Application Using Open Source
 
OSCON Titanium Tutorial
OSCON Titanium TutorialOSCON Titanium Tutorial
OSCON Titanium Tutorial
 
Magnolia for VPRO's Pinkpop Music Festival Website
Magnolia for VPRO's Pinkpop Music Festival WebsiteMagnolia for VPRO's Pinkpop Music Festival Website
Magnolia for VPRO's Pinkpop Music Festival Website
 
Devoxx uk 2019 digital jukebox
Devoxx uk 2019 digital jukeboxDevoxx uk 2019 digital jukebox
Devoxx uk 2019 digital jukebox
 

CBC Radio App 2.0 iOS

  • 1. CBC RADIO APP 2.0 Developer: Ash Mishra ash.mishra@cbc.ca November 2010 Thursday, November 4, 2010
  • 2. CBC Radio App 2.0 - iOS CBC Radio App 1.0 for iPhone development started in March 2009 - Released July 2009 No major updates since that date Several hundred thousand downloads High user satisfaction Requests for background audio playback History Thursday, November 4, 2010
  • 3. CBC Radio App 2.0 - iOS Offer Radio 1, Radio 2, Radio 3, and TV Audio Listen to live streams and music channels Provide CBC podcasts Favourite audio View schedules Find local frequencies Embedded CBC.ca website Functionality Thursday, November 4, 2010
  • 4. CBC Radio App 2.0 - iOS Offer Radio 1, Radio 2, Radio 3, and TV Audio Listen to live streams and music channels Provide CBC podcasts Favourite audio View schedules Find local frequencies Embedded CBC.ca website Functionality Support iOS 4.x background audio and remote Scaled iPhone version for iPad Thursday, November 4, 2010
  • 5. CBC Radio App 2.0 - iOS Hmmm ... Boring! And not compelling Thursday, November 4, 2010
  • 6. CBC Radio App 2.0 - iOS Designed for iPad, not a giant iPod Touch Auto Lo / Hi bandwidth switching for 3G / WiFi Tracked episode playback positions Auto-play, Sleep timer, Alarm clock Share Audio by Email, Facebook or Twitter Embedded Radio 3 Website with native playback: 100,000 tracks on demand from 23,000 artists These are personal ideas Hmmm ... Boring! And not compelling Thursday, November 4, 2010
  • 7. CBC Radio App 2.0 - iOS What differentiates a design-by-committee product and one that exceeds expectations? Personal attention Alot of thought given to design, features; Humans are emotional, so apps need to speak to our emotions Many minute adjustments to animations, colour choices, layouts, font sizing, shades of grey Hours and hours of testing, actively seeking bugs Delivering Success Can’t stress this enough ! Thursday, November 4, 2010
  • 8. CBC Radio App 2.0 - iOS One developer / producer on loan One part-time designer One product champion Resources Thursday, November 4, 2010
  • 9. CBC Radio App 2.0 - iOS One developer / producer on loan One part-time designer One product champion Resources NO project manager NO specification! 3 months Thursday, November 4, 2010
  • 10. CBC Radio App 2.0 - iOS Know your domain Understand your audience Be passionate Explore, experiment Get business support – product champions Organise the work Develop intelligently * Iterate Technical Process Thursday, November 4, 2010
  • 11. CBC Radio App 2.0 - iOS CBC Radio 1.0 Interface completely coded – no Interface Builder Controller, views, model mixed together, not MVC No clear understanding of the problem domain Over-engineered: localisation, caching Plus... Lower the Technical Debt Thursday, November 4, 2010
  • 12. CBC Radio App 2.0 - iOS CBC Radio 1.0 Interface completely coded – no Interface Builder Controller, views, model mixed together, not MVC No clear understanding of the problem domain Over-engineered: localisation, caching Plus... Lower the Technical Debt CBC Radio 2.0 is an 85% rewrite True MVC Interface Builder when possible Built on a reusable framework Thursday, November 4, 2010
  • 13. CBC Radio App 2.0 - iOS Employ strategy of “Sufficient Design” Convention-over-configuration & reflection to map XML data into Model objects MVC enforced by the use of protocols UIWebView for relative positioning Reuse of iPhone UIViewControllers for iPad Optimise only when needed Technical Approach Thursday, November 4, 2010
  • 14. CBC Radio App 2.0 - iOS A convention to map XML elements and attributes to Class properties Fetch and digest XML; use reflection to determine if a Class has a property that can be set (NSKeyValueCoding protocol) Benefits: Dynamic mapping – no glue code Less code – easy maintenance and extension The Model Layer Thursday, November 4, 2010
  • 15. CBC Radio App 2.0 - iOS Multiple types of audio sources: Live Streams, Music Channels, Podcasts, Audio from Websites Plus multiple ways to present content visually How to design? If we use IF statements to differentiate between types, we’re doing it wrong Solution: Design protocols that hide concrete classes 1 protocol for Audio playback, 1 for Visual display Enforcing MVC Thursday, November 4, 2010
  • 16. CBC Radio App 2.0 - iOS Write controllers that operate on the Audio Protocol Build views that use content from the Visual Protocol Enforcing MVC Live Radio Music Channels Podcasts Website Audio Audio Protocol Visual Protocol Controllers andViews Model Thursday, November 4, 2010
  • 17. CBC Radio App 2.0 - iOS Interface Builder is good for: basic resolution independence orientation independence (important for iPad) visual layout – can be used by designers UIKit doesn’t permit relative positioning So if you have UILabels with variable number of lines, IB is difficult for relative layouts One solution: use UIWebView, which supports relative positioning UI Thursday, November 4, 2010
  • 18. CBC Radio App 2.0 - iOS Many views don’t need a custom interface for iPad Use UIPopoverController to reuse iPhone UIViewControllers Also use Modal views – presentModalViewController Reuse iPhone UIViewControllers for iPad Thursday, November 4, 2010
  • 19. CBC Radio App 2.0 - iOS Classic issue – Business vs. Engineering: Business wants a product as fast as possible at lowest cost Many places do not understand Software is an art Developers want to craft great code – but that takes time Is a balance possible? Approach to Architecture Thursday, November 4, 2010
  • 20. CBC Radio App 2.0 - iOS Under-design: Quick as possible cowboy coding Only thinking about 1.0 release Spaghetti code, bad coding style, buggy No abstraction, no MVC, or even OOP Throwaway code Over-design: Building for worst-case scenarios Added layers of complexity (too much abstraction) Longer development cycles More code to maintain, ironically less agile The Extremes Thursday, November 4, 2010
  • 21. CBC Radio App 2.0 - iOS Spend time designing for critical components Example: the protocol for audio playback Don’t spend time over-designing for components that provide zero or no value Example: caching where it’s not needed Assemble parts when possible, instead of building from scratch. Lower initial costs, as well as future maintenance. Example: Audio playback engine is 3rd party Balanced or “Sufficient Design” Thursday, November 4, 2010
  • 22. CBC Radio App 2.0 - iOS “Sufficient” doesn’t mean “compromised”. It means lean and more maintainable. We are still responsible for proper MVC and OOP; these are critical parts of the architecture. How to do it? Protocol for Audio playback was not planned, but developed when it was needed – iteratively In a given problem, use the maturity of your skillset to lower technical debt Sufficient Design Continued ... Thursday, November 4, 2010
  • 23. CBC Radio App 2.0 - iOS *See Industrial Logic for more on Sufficient Design Questions? Thursday, November 4, 2010