Upload
ajevans
View
632
Download
3
Tags:
Embed Size (px)
Citation preview
Children’s interactive
Making the case for Play
Children’s interactive
Adam Evans
Asher Glynn
CBeebies Tech Lead
Technical Architect
Children’s interactive
CBeebies
Children’s interactive
What is it?
• Website for children aged 4-6
• An aggregate view of BBC content
• 2 million unique users a week
• High UX demands, our audience cry’s
• Built using PHP and a long forked version of Zend MVC
Children’s interactive
The (old) Architecture
CBEEBIES
SOLR ELECTRON NITRO GAMES GRID
PAL
RESTFUL SERVICES
FORGE
Children’s interactive
The Issues• Large legacy codebase
• Cutting edge in BBC at time
• Original developers long gone
• Hard to work on new features with confidence
• Quality of tests vary
• Retro fitted on top
• Hard to do well with the existing codebase
• PHP’s not designed for aggregating data from multiple restful services
• Business needs have changed
Children’s interactive
The Opportunity
“Responsive”
Children’s interactive
What we done on our summer holiday• Clear message to management
• What the problems were
• What we should do about it
• What they should expect
• Used experience and judgement for recommendations
• Time critical - we were in trouble
• No beauty competitions
• Had clear justifications
• Confidence and decisiveness gave management confidence for a spike
Children’s interactive
Play frameworkWhy did we choose it?
• Scala
• Full stack Web Framework
• Reactive architecture is great when calling web services, non blocking - fits
exactly our problem type
• Typed template system is amazing
• Lots of industry buzz
Children’s interactive
The First Spike
• Addressed stakeholder concerns:
• Business value of the product is in the front end
• Could show (visually) immediate progress
• Backends aren’t (visually) impressive
• Created responsive templates from a mocked data layer
• Setup basic build pipeline to AWS - immediate productivity impact
• Demonstrated skills transfer to existing team members
Children’s interactive
The First Spike
• Success!!!
• Compelling enough to have our stakeholders commitment
• A 2 man team of Java/Scala + PHP/Javascript
• Collaborate effectively
• Become productive quickly
Children’s interactive
Moving forward
• How do we take a team of developers into Scala?
• How do we resource?
• How do we manage the risks?
AND
• How to migrate smoothly from the previous Apache/Tomcat platform???
Children’s interactive
The Team
• Started small - 3 developers
• Split frontend/backend
• PHP focused on front end to get familiar (avoid Scala overload)
• Backend started out Java-like with Scala’s syntactical sugar
• Big recruitment drive
Children’s interactive
The New Architecture
• Version Control - GIT
• Build - Jenkins
• Deployment - AWS
• Continuous Delivery (almost)
• App and Web server - Play 2
[Should be pretty diagram here]
Children’s interactive
… after rethinking
Varnish
Nginx + mod_pageseed
Play
Nginx + mod_pageseed
Play
Started with Ended with
AWS ELB
Play Play
…overthought the problem
Children’s interactive
Risky business
• Heavy use of Java in the BBC. Extensive expertise on the JVM
• Already some use of AWS for internal systems
• Extensive change was unavoidable - regardless of the change was
We’re doing things differently not necessarily new (Going outlaw but in a nice Robin Hood kind of way)
Children’s interactive
The approachNo more tears - set by Editorial children's not developers tears
(or product managers or development managers)
• Iterative • Discrete • Tough editorial demands • Tough editorial timeframes • Tough audience!
Children’s interactive
The approach• Distinct vertical sections
• A section at a time
• Updated content item pages first
• Index pages after content pages
Children’s interactive
The approach
Default Theme Templates
Data Access Libraries/Templates
Game Songs Makes Storie Watch Radio Shows
DAO/ Templates
DAO/ Templates
DAO/ Templates
DAO/Templates
DAO/ Templates
DAO/ Templates
Vertical Plugins
DAO/ Templates
Horizontal Plugins
• Play allows modularisation
• Can develop in isolation
• Can deploy in isolation
• Can test in isolation
Children’s interactive
Keeping it real (simple)
• Local in memory cache • Used Guice rather than Cake • Simpler, less boilerplate • More familiar for Java devs • Runtime configuration changes possible
• Opted out of some “kitchen sink” components in Play • Started at the view/templates to drive design
Children’s interactive
Where we are now
• We have our first live release.
• First public facing AWS + Scala Application
• Management buy in for new model with Continuous Delivery
• Stakeholders very happy with turnaround of features
Children’s interactive
Things we’ve learnt
• Hit a few small bugs in Play
• Open source makes it easier to find root cause
• Vast number of base libraries/products
• Constantly learning
• Scala’s cool factor makes it easier to recruit
• Some things are hard to test in Play out the box
• It’s easy to get carried away with idiomatic Scala
Children’s interactive
• Constant engagement with stake holders managing a risky move
• PHP Developers have found it hard
• Syntax / FP concepts appear scary/overwhelming
• Patterns such as DI are new
• Lots of Scala tries to be academically clever
• Java developers
• Find certain aspects hard being different (testing)
• Can sometimes get carried away with new power sacrificing simplicity