SlideShare ist ein Scribd-Unternehmen logo
1 von 72
Downloaden Sie, um offline zu lesen
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
•      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
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
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
Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
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
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
Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
January, 2011
                           Site is Launched
                     ( Yes, you can build a fully transactional
                        website with Grails in 4 months )




Saturday, 10 December 11
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
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
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
Growing features-
                    Dealing with Changing
                      Domain Models


Saturday, 10 December 11
More Flexible Bookings
                  Before
                           Hotel
                           Fixed Date
                           DropDrown
                   After
                           Fixed Date
                           Flexible Dates
                           Hotel
                           Packages
                           Travel Only
                           By Departure
Saturday, 10 December 11
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
Saturday, 10 December 11
Integrating with Third
                          Party Services



Saturday, 10 December 11
Improve Tracking
                 •         Google Goals Tracking
                 • Google eCommerce Tracking
                 • Google Analytics
                 • Third Party Tracking Tags


Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
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
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
CMS - Going beyond
                               scaffolding



Saturday, 10 December 11
Better Customer Support




Saturday, 10 December 11
RemoteLink to Actions




Saturday, 10 December 11
Easier to add data




Saturday, 10 December 11
Saturday, 10 December 11
Easy to Customize




Saturday, 10 December 11
• 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
Saturday, 10 December 11
Getting data out for
                                 analysis



Saturday, 10 December 11
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
Saturday, 10 December 11
Saturday, 10 December 11
Dashboard




Saturday, 10 December 11
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
Some interesting tech
                           we built -
                       Stuff other people never seem to talk
                                       about




Saturday, 10 December 11
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
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
Saturday, 10 December 11
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
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
Saturday, 10 December 11
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
How do you build up a
                   team around Grails?



Saturday, 10 December 11
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
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
Silicon Milk Roundabout




Saturday, 10 December 11
Other places

                    • http://www.grailsjobs.com
                    • London Groovy Grails User Group
                    • Reddit
                    • Here!

Saturday, 10 December 11
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
Communication
                    • Across different teams
                       • Pivotal Tracker / Trello
                       • Validation of features
                       • Team Lunches with a friend



Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
Communication

                    • Within the team
                       • Stand ups
                       • Retrospectives
                       • Document via tests
                       • Common Environments

Saturday, 10 December 11
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
Increase in Unit Tests over time
Saturday, 10 December 11
Increase in Integration Tests over time
Saturday, 10 December 11
Useful Stuff
                    • Git Flow
                    • Continous Integration Game for Jenkins
                    • Less
                    • Start / Stop / Continue / Less / More
                    • Pairing with Designers


Saturday, 10 December 11
Saturday, 10 December 11
Saturday, 10 December 11
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
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
The Future
                    • £5 Million Marketing initiative
                    • Mobile
                    • More integrations
                    • Grails 2.0
                    •?


Saturday, 10 December 11
Questions?



Saturday, 10 December 11
come work with us
                           http://www.secretescapes.com/jobs




Saturday, 10 December 11

Weitere ähnliche Inhalte

Was ist angesagt?

Building Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksBuilding Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksMike Hugo
 
Chef Actions: Delightful near real-time activity tracking!
Chef Actions: Delightful near real-time activity tracking!Chef Actions: Delightful near real-time activity tracking!
Chef Actions: Delightful near real-time activity tracking!James Casey
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Ryan Cuprak
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Matthew Groves
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Ryan Cuprak
 
Code Reviews vs. Pull Requests
Code Reviews vs. Pull RequestsCode Reviews vs. Pull Requests
Code Reviews vs. Pull RequestsAtlassian
 
Greach 2014 - Road to Grails 3.0
Greach 2014  - Road to Grails 3.0Greach 2014  - Road to Grails 3.0
Greach 2014 - Road to Grails 3.0graemerocher
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript FrameworkAll Things Open
 
Unleashing Docker with Pipelines in Bitbucket Cloud
Unleashing Docker with Pipelines in Bitbucket CloudUnleashing Docker with Pipelines in Bitbucket Cloud
Unleashing Docker with Pipelines in Bitbucket CloudAtlassian
 
Dropwizard and Friends
Dropwizard and FriendsDropwizard and Friends
Dropwizard and FriendsYun Zhi Lin
 
Automated Deployments with Ansible
Automated Deployments with AnsibleAutomated Deployments with Ansible
Automated Deployments with AnsibleMartin Etmajer
 
Arquillian & Citrus
Arquillian & CitrusArquillian & Citrus
Arquillian & Citruschristophd
 
Aura Framework Overview
Aura Framework OverviewAura Framework Overview
Aura Framework Overviewrajdeep
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryJeff Potts
 
Architectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyondArchitectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyondStefan Kopf
 
Google AppEngine (GAE/J) - Introduction and Overview from a Java Guy
Google AppEngine (GAE/J) - Introduction and Overview from a Java GuyGoogle AppEngine (GAE/J) - Introduction and Overview from a Java Guy
Google AppEngine (GAE/J) - Introduction and Overview from a Java GuyMax Völkel
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"Daniel Bryant
 
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsGame of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsVMware Tanzu
 

Was ist angesagt? (20)

Building Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksBuilding Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And Tricks
 
Chef Actions: Delightful near real-time activity tracking!
Chef Actions: Delightful near real-time activity tracking!Chef Actions: Delightful near real-time activity tracking!
Chef Actions: Delightful near real-time activity tracking!
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
 
Code Reviews vs. Pull Requests
Code Reviews vs. Pull RequestsCode Reviews vs. Pull Requests
Code Reviews vs. Pull Requests
 
Greach 2014 - Road to Grails 3.0
Greach 2014  - Road to Grails 3.0Greach 2014  - Road to Grails 3.0
Greach 2014 - Road to Grails 3.0
 
Implementing your own Google App Engine
Implementing your own Google App Engine Implementing your own Google App Engine
Implementing your own Google App Engine
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript Framework
 
Unleashing Docker with Pipelines in Bitbucket Cloud
Unleashing Docker with Pipelines in Bitbucket CloudUnleashing Docker with Pipelines in Bitbucket Cloud
Unleashing Docker with Pipelines in Bitbucket Cloud
 
Dropwizard and Friends
Dropwizard and FriendsDropwizard and Friends
Dropwizard and Friends
 
Automated Deployments with Ansible
Automated Deployments with AnsibleAutomated Deployments with Ansible
Automated Deployments with Ansible
 
Arquillian & Citrus
Arquillian & CitrusArquillian & Citrus
Arquillian & Citrus
 
Aura Framework Overview
Aura Framework OverviewAura Framework Overview
Aura Framework Overview
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco Repository
 
Architectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyondArchitectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyond
 
Apache Lucene for Java EE Developers
Apache Lucene for Java EE DevelopersApache Lucene for Java EE Developers
Apache Lucene for Java EE Developers
 
Google AppEngine (GAE/J) - Introduction and Overview from a Java Guy
Google AppEngine (GAE/J) - Introduction and Overview from a Java GuyGoogle AppEngine (GAE/J) - Introduction and Overview from a Java Guy
Google AppEngine (GAE/J) - Introduction and Overview from a Java Guy
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
 
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsGame of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
 

Andere mochten auch

Groovy and Grails
Groovy and GrailsGroovy and Grails
Groovy and GrailsGiltTech
 
Las 5 indeas mas innovadoras
Las 5 indeas mas  innovadorasLas 5 indeas mas  innovadoras
Las 5 indeas mas innovadorasireclane
 
Comment utiliser un code promo Disney Dtore
Comment utiliser un code promo Disney DtoreComment utiliser un code promo Disney Dtore
Comment utiliser un code promo Disney DtoreChassoDeal
 
Jenkins and Groovy
Jenkins and GroovyJenkins and Groovy
Jenkins and GroovyKiyotaka Oku
 
Grails At Linked
Grails At LinkedGrails At Linked
Grails At LinkedLinkedIn
 

Andere mochten auch (6)

Groovy and Grails
Groovy and GrailsGroovy and Grails
Groovy and Grails
 
Big Data
Big DataBig Data
Big Data
 
Las 5 indeas mas innovadoras
Las 5 indeas mas  innovadorasLas 5 indeas mas  innovadoras
Las 5 indeas mas innovadoras
 
Comment utiliser un code promo Disney Dtore
Comment utiliser un code promo Disney DtoreComment utiliser un code promo Disney Dtore
Comment utiliser un code promo Disney Dtore
 
Jenkins and Groovy
Jenkins and GroovyJenkins and Groovy
Jenkins and Groovy
 
Grails At Linked
Grails At LinkedGrails At Linked
Grails At Linked
 

Ähnlich wie A year in the life of a Grails startup

MuraCon 2012 - Creating a Mura CMS plugin with FW/1
MuraCon 2012 - Creating a Mura CMS plugin with FW/1MuraCon 2012 - Creating a Mura CMS plugin with FW/1
MuraCon 2012 - Creating a Mura CMS plugin with FW/1jpanesar
 
7 common problems with salesforce data migration
7 common problems with salesforce data migration7 common problems with salesforce data migration
7 common problems with salesforce data migrationMark Kofman
 
Anil Patel - Do You Feel Technology Is a Source of Frustration or Creativity...
Anil Patel -  Do You Feel Technology Is a Source of Frustration or Creativity...Anil Patel -  Do You Feel Technology Is a Source of Frustration or Creativity...
Anil Patel - Do You Feel Technology Is a Source of Frustration or Creativity...CanadaHelps / MyCharityConnects
 
2015 WritersUA Sourcing Graphics
2015 WritersUA Sourcing Graphics2015 WritersUA Sourcing Graphics
2015 WritersUA Sourcing GraphicsMary Connor
 
Inform2015 - What's New in Domino 9 & 9.0.1 for Admins
Inform2015 - What's New in Domino 9 & 9.0.1 for AdminsInform2015 - What's New in Domino 9 & 9.0.1 for Admins
Inform2015 - What's New in Domino 9 & 9.0.1 for AdminsJared Roberts
 
Scaling Pinterest
Scaling PinterestScaling Pinterest
Scaling PinterestC4Media
 
Tulsa tech fest 2010 - web speed and scalability
Tulsa tech fest 2010  - web speed and scalabilityTulsa tech fest 2010  - web speed and scalability
Tulsa tech fest 2010 - web speed and scalabilityJason Ragsdale
 
Automating Infrastructure as a Service Deployments and monitoring – TEC213
Automating Infrastructure as a Service Deployments and monitoring – TEC213Automating Infrastructure as a Service Deployments and monitoring – TEC213
Automating Infrastructure as a Service Deployments and monitoring – TEC213Chris Kernaghan
 
Interop 2011 - Scaling Platform As A Service
Interop 2011 - Scaling Platform As A ServiceInterop 2011 - Scaling Platform As A Service
Interop 2011 - Scaling Platform As A ServicePatrick Chanezon
 
Database Development: The Object-oriented and Test-driven Way
Database Development: The Object-oriented and Test-driven WayDatabase Development: The Object-oriented and Test-driven Way
Database Development: The Object-oriented and Test-driven WayTechWell
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL DevelopersIke Ellis
 
AWS for Start-ups - Case Study - PeoplePerHour
AWS for Start-ups - Case Study - PeoplePerHour AWS for Start-ups - Case Study - PeoplePerHour
AWS for Start-ups - Case Study - PeoplePerHour Amazon Web Services
 
What Industry and Research can learn from Open Source
What Industry and Research can learn from Open SourceWhat Industry and Research can learn from Open Source
What Industry and Research can learn from Open SourceRalph Mueller
 
We4IT lcty 2013 - keynote - worst practices - the best of the worst
We4IT lcty 2013 - keynote - worst practices - the best of the worstWe4IT lcty 2013 - keynote - worst practices - the best of the worst
We4IT lcty 2013 - keynote - worst practices - the best of the worstWe4IT Group
 
Page Experience Update SMX 2020 (Aleks Shklyar)
Page Experience Update SMX 2020 (Aleks Shklyar)Page Experience Update SMX 2020 (Aleks Shklyar)
Page Experience Update SMX 2020 (Aleks Shklyar)Aleks (Aleksander) Shklyar
 
Scoping call presentation_rev_4_mary
Scoping call presentation_rev_4_maryScoping call presentation_rev_4_mary
Scoping call presentation_rev_4_maryrhochambeau32
 
DrupalCampNYC 10 - Native mobile apps with Drupal
DrupalCampNYC 10 - Native mobile apps with DrupalDrupalCampNYC 10 - Native mobile apps with Drupal
DrupalCampNYC 10 - Native mobile apps with Drupalzroger
 
Gaelyk - Groovy Grails eXchange 2010 - Guillaume Laforge
Gaelyk - Groovy Grails eXchange 2010 - Guillaume LaforgeGaelyk - Groovy Grails eXchange 2010 - Guillaume Laforge
Gaelyk - Groovy Grails eXchange 2010 - Guillaume LaforgeGuillaume Laforge
 

Ähnlich wie A year in the life of a Grails startup (20)

MuraCon 2012 - Creating a Mura CMS plugin with FW/1
MuraCon 2012 - Creating a Mura CMS plugin with FW/1MuraCon 2012 - Creating a Mura CMS plugin with FW/1
MuraCon 2012 - Creating a Mura CMS plugin with FW/1
 
HTML5 and Sencha Touch
HTML5 and Sencha TouchHTML5 and Sencha Touch
HTML5 and Sencha Touch
 
7 common problems with salesforce data migration
7 common problems with salesforce data migration7 common problems with salesforce data migration
7 common problems with salesforce data migration
 
Anil Patel - Do You Feel Technology Is a Source of Frustration or Creativity...
Anil Patel -  Do You Feel Technology Is a Source of Frustration or Creativity...Anil Patel -  Do You Feel Technology Is a Source of Frustration or Creativity...
Anil Patel - Do You Feel Technology Is a Source of Frustration or Creativity...
 
2015 WritersUA Sourcing Graphics
2015 WritersUA Sourcing Graphics2015 WritersUA Sourcing Graphics
2015 WritersUA Sourcing Graphics
 
Inform2015 - What's New in Domino 9 & 9.0.1 for Admins
Inform2015 - What's New in Domino 9 & 9.0.1 for AdminsInform2015 - What's New in Domino 9 & 9.0.1 for Admins
Inform2015 - What's New in Domino 9 & 9.0.1 for Admins
 
Scaling Pinterest
Scaling PinterestScaling Pinterest
Scaling Pinterest
 
Tulsa tech fest 2010 - web speed and scalability
Tulsa tech fest 2010  - web speed and scalabilityTulsa tech fest 2010  - web speed and scalability
Tulsa tech fest 2010 - web speed and scalability
 
Automating Infrastructure as a Service Deployments and monitoring – TEC213
Automating Infrastructure as a Service Deployments and monitoring – TEC213Automating Infrastructure as a Service Deployments and monitoring – TEC213
Automating Infrastructure as a Service Deployments and monitoring – TEC213
 
Interop 2011 - Scaling Platform As A Service
Interop 2011 - Scaling Platform As A ServiceInterop 2011 - Scaling Platform As A Service
Interop 2011 - Scaling Platform As A Service
 
Database Development: The Object-oriented and Test-driven Way
Database Development: The Object-oriented and Test-driven WayDatabase Development: The Object-oriented and Test-driven Way
Database Development: The Object-oriented and Test-driven Way
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL Developers
 
Iwmn architecture
Iwmn architectureIwmn architecture
Iwmn architecture
 
AWS for Start-ups - Case Study - PeoplePerHour
AWS for Start-ups - Case Study - PeoplePerHour AWS for Start-ups - Case Study - PeoplePerHour
AWS for Start-ups - Case Study - PeoplePerHour
 
What Industry and Research can learn from Open Source
What Industry and Research can learn from Open SourceWhat Industry and Research can learn from Open Source
What Industry and Research can learn from Open Source
 
We4IT lcty 2013 - keynote - worst practices - the best of the worst
We4IT lcty 2013 - keynote - worst practices - the best of the worstWe4IT lcty 2013 - keynote - worst practices - the best of the worst
We4IT lcty 2013 - keynote - worst practices - the best of the worst
 
Page Experience Update SMX 2020 (Aleks Shklyar)
Page Experience Update SMX 2020 (Aleks Shklyar)Page Experience Update SMX 2020 (Aleks Shklyar)
Page Experience Update SMX 2020 (Aleks Shklyar)
 
Scoping call presentation_rev_4_mary
Scoping call presentation_rev_4_maryScoping call presentation_rev_4_mary
Scoping call presentation_rev_4_mary
 
DrupalCampNYC 10 - Native mobile apps with Drupal
DrupalCampNYC 10 - Native mobile apps with DrupalDrupalCampNYC 10 - Native mobile apps with Drupal
DrupalCampNYC 10 - Native mobile apps with Drupal
 
Gaelyk - Groovy Grails eXchange 2010 - Guillaume Laforge
Gaelyk - Groovy Grails eXchange 2010 - Guillaume LaforgeGaelyk - Groovy Grails eXchange 2010 - Guillaume Laforge
Gaelyk - Groovy Grails eXchange 2010 - Guillaume Laforge
 

Kürzlich hochgeladen

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 

Kürzlich hochgeladen (20)

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 

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
  • 24. Integrating with Third Party Services Saturday, 10 December 11
  • 25. Improve Tracking • Google Goals Tracking • Google eCommerce Tracking • Google Analytics • Third Party Tracking Tags 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
  • 33. Easier to add data Saturday, 10 December 11
  • 35. Easy to Customize 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
  • 38. Getting data out for analysis 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
  • 63. Increase in Unit Tests over time Saturday, 10 December 11
  • 64. Increase in Integration Tests over time 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
  • 72. come work with us http://www.secretescapes.com/jobs Saturday, 10 December 11