Handwritten Text Recognition for manuscripts and early printed texts
A year in the life of a Grails startup
1. A year in the life of a
Grails startup
Tomas Lin
@tomaslin tomas@secretescapes.com
Donovan Frew
donovan@secretescapes.com
Secret Escapes
Grails Exchange 2011
Saturday, 10 December 11
2. • We will focus on the lessons we
learned working with and
changing a Grails application over
a year in a London startup.
• Focus: Technology, People,
Processes.
Saturday, 10 December 11
3. Agenda
• Who is Secret Escapes?
• Before / After we launched the site
• A work environment around Grails
• Success / Challenges / The future
• Questions?
Saturday, 10 December 11
4. Secret Escapes
• Best members-only travel site for the UK
• VC-funded ( just closed series-B )
• From founders of Dealchecker.co.uk
• More than 1 million happy users + growing
• Started with 3 full time staff in November
2010, growing to 25 in January
Saturday, 10 December 11
10. Architecture
• 2 Apps - CMS and StoreFront
• Domain classes, shared services,
controllers and views live in one
plugin.
• StoreFront and CMS live on different
servers.
Saturday, 10 December 11
11. Before Launch - Goals
• Make app easy to deploy
• Get enough tests to make it work
• Basic CMS
• Integrate third party tools quickly
• Ship!
Saturday, 10 December 11
16. January, 2011
Site is Launched
( Yes, you can build a fully transactional
website with Grails in 4 months )
Saturday, 10 December 11
17. After Launch
• Growing existing features - Booking engine.
• Third party integration - Facebook, Google
tracking, plugins.
• Build better tools for business - allocation
uploading, customer support.
• Pulling data out of the system.
• Integrate with other sites.
• Validate effect of changes ( A/B tests ).
Saturday, 10 December 11
18. Brief timeline
• End Of January - launch
• 1st Half of the year - CMS / CRM
improvements, Affiliates, Calendar
Booker.
• 2nd Half - Better invitation system,
exclusive deals, custom theming, third
Party Integration, A/B testing, Better
design.
Saturday, 10 December 11
19. Brief timeline
• End Of January - launch
• 1st Half of the year - Easier to work
with codebase as a team. Growing the
team. (Jenkins, Amazon Beanstalk, Git )
• 2nd Half - Making team better.
Devotion to testing. ( Unit testing,
Integration testing, agile, pairing )
Saturday, 10 December 11
20. Growing features-
Dealing with Changing
Domain Models
Saturday, 10 December 11
21. More Flexible Bookings
Before
Hotel
Fixed Date
DropDrown
After
Fixed Date
Flexible Dates
Hotel
Packages
Travel Only
By Departure
Saturday, 10 December 11
22. Database Migrations
• Use the dbm-gorm-diff mechanism
• Set default values via the sql( ) command
• Load automatically on application startup
• Add date of migration so that it is easier to
sort / merge across git branches
Saturday, 10 December 11
28. Third Party Integrations
• Try to capture as much as possible in one
standalone plugin
• Write tests within the plugin so you don’t
have to worry about it working in the app
• Use tag libraries to make your GSP files
very clean
• Publish plugins for feedback / sharing
Saturday, 10 December 11
29. Our Plugins
• Email Validator - Email Syntax.
• Inviter - Handles inviting friends from
Yahoo, Gmail, Facebook, Windows Live,
LinkedIn, etc.
• Website Optimizer - A/B Testing.
• CDN Resources - Adds pull-down CDN
support for resources plugin.
Saturday, 10 December 11
30. CMS - Going beyond
scaffolding
Saturday, 10 December 11
36. • Put into a domain classes
• Use bean fields plugin to manage
changes.
• Use one template for edit and new
actions.
• Mail templates, Sales, Affiliates, Themes.
Saturday, 10 December 11
39. Reporting
• We inherited a reporting framework from
Dealchecker Applications.
• Allows you to either write a grails service
or use a SQL statement.
• Can add additional query parameters like
sale / affiliate, etc.
• Exports to Excel.
Saturday, 10 December 11
43. CMS Lessons
• Move things that will change into a Domain
Object in the CMS.
• Build batch operations for editing data.
• Use g:remoteField for quick edit items.
• Use the Console Plugin
• Use Bean Fields
• Work with Excel / CSV.
Saturday, 10 December 11
44. Some interesting tech
we built -
Stuff other people never seem to talk
about
Saturday, 10 December 11
45. Custom Theming Apps
• We keep all our customizations in a Theme
domain object.
• Partners can overwrite our site defaults via
a CSS file and a JS file.
• Use image references in CSS files to make
it easy to change.
• Themes are loaded by domain name or url
parameter
Saturday, 10 December 11
46. What can you change?
• Application Name. Text displayed for static Paypal Payment Page
• Domain Name pages on the Site • Background Color
• Theme CSS file • About Us • Background Image
• Theme JavaScript file • Contact Us • Footer Text Color
• Favicon. • Faq • Header Background Color
• An URL to redirect • Terms and Conditions • Header Height
• Privacy Policy • Font for the Logo
Technical Support • Current Sales Sidebar • Color of the Logo Font
• Email • Logo Image
• Phone Number Email Templates • Logo Image Position
• Title • Logo Text
Embedded Header of Footer • Background Color • Order Summary Background Color
• A header URL • Header Text • Custom Image for Order Summary
• A footer URL • Header Logo • Color of the Pay Now Button
• Footer Signature • Text color of the Pay Now Button
Social Networks • Footer Text • Section Background Colors
• Name of Facebook Page • Blurb Title • Color of the byline
• Description for application • Blurb Test
• Image for Sale Now • Title Color
• Color for Sale Title
• Color for destination
Saturday, 10 December 11
48. A/B Testing
• Allows us to verify and test different designs
against one another.
• Via Google Website Optimizer and the
GWO plugin.
• Validates that changes we have made do not
significantly affect conversion.
Saturday, 10 December 11
49. Adding new A/B Tests
• Create Variations.
• Define experiments.
• Insert <gwo:includes/> tags in code.
• Insert <gwo:conversion/> tag in code.
• Run Experiment.
Saturday, 10 December 11
51. Goals At this Stage
• Make changes without breaking the site.
• No longer just ‘make it work’, need to
make it really nice.
• Adapt to rapidly changing business needs.
• Scaling up development.
Saturday, 10 December 11
52. How do you build up a
team around Grails?
Saturday, 10 December 11
53. Identifying the right people to
work with
• Grails Programmers are hard to find
• But we can always find Java developers
• Builds on industry-leading frameworks.
Spring / Hibernate. Those developers are
available.
• Attitude / fit
Saturday, 10 December 11
54. Making it attractive
• Put together job specs as a team
• Blogging / social networks / twitter
• Conferences and User Group Meetings
• Letting our work get out there.
• Recruiters are expensive and bad. DIY.
Saturday, 10 December 11
56. Other places
• http://www.grailsjobs.com
• London Groovy Grails User Group
• Reddit
• Here!
Saturday, 10 December 11
57. How we work?
• Pair Programming
• Daily Standups
• Retrospruktions
• Features in pairs are more robust
• Hack Days fortnightly ( every 2 weeks )
• Team Activities ( Lunches, conferences )
• No a lot of hierarchy.
Saturday, 10 December 11
58. Communication
• Across different teams
• Pivotal Tracker / Trello
• Validation of features
• Team Lunches with a friend
Saturday, 10 December 11
61. Communication
• Within the team
• Stand ups
• Retrospectives
• Document via tests
• Common Environments
Saturday, 10 December 11
62. Code Quality
• Writing more tests. Commitment to write unit /
integration / functional tests.
• Boy Scout Rule
• Shared Ownership
• TDD using Geb and Spock.
• Jenkins to make sure it works on the other machine.
• CodeNarc to enforce best practices.
Saturday, 10 December 11
65. Useful Stuff
• Git Flow
• Continous Integration Game for Jenkins
• Less
• Start / Stop / Continue / Less / More
• Pairing with Designers
Saturday, 10 December 11
68. Is Grails right for my startup?
• Penetration test by the Telegraph showed us value of
best practices.
• Can build things quicker. Make us more responsive.
• “At Last Minute this would have taken 6
months”
• Awesome Community.
Saturday, 10 December 11
69. Challenges
• Speed running Functional test and Integration tests.
• Finding the right people.
• Cost of Idea licenses.
• Deployment.
• Services are US-based. Difficult in the UK.
• Failed Amazon Beanstalk Experiment.
Saturday, 10 December 11
70. The Future
• £5 Million Marketing initiative
• Mobile
• More integrations
• Grails 2.0
•?
Saturday, 10 December 11