Continuous Innovation @ Gilt Groupe

5,195 views

Published on

This is a talk about different ways we enable continuous innovation. Working bottom-up from tech stack through how we organize teams, to how we do architecture & organize teams of teams, we share various approaches we've found work well.

Published in: Technology, Business
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,195
On SlideShare
0
From Embeds
0
Number of Embeds
2,378
Actions
Shares
0
Downloads
26
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Continuous Innovation @ Gilt Groupe

  1. 1. Continuous Innovation Eric Bowman VP Architecture Gilt Groupe @ebowman ebowman@gilt.com http://tech.gilt.com
  2. 2. http://www.flickr.com/photos/nationaalarchief/4193508328/sizes/o/in/photolist-7oyPVJ-7oyPWW-7oyPYf-7oyQ1s-7oyQ4u-7oyQh7-7oyQju-7oyQmm-7oyQqS-7oDszBa7vaUw-fJHB9E-fJHBbj-fJHBaw-fJHB8N-fJrhsz-9uzYLJ-f5hWTe-f5i3Fv-f5ibHt-f5i6T2-f5ibEH-f5ibFz-f5ibGF-f5i3G8-fa97G7-f5i6Sk-f5ibDa-f5i3EH-f5i3E2-f5ifwt-f5i6Tkf5i6PX-f5i3CV-fadccE-fadcgw-fadcf5-7JxdSE-8F3Akp-8F3AjM-8F6Lah-7GBRia-8PWU2Q-8PWU8j-dbzybh-9Nk8fN-8wBt83-cweZi9-8PWYgo-8PWYTN-8PTRqn/
  3. 3. http://megmurph.com/wp-content/uploads/2013/03/success-1.jpg
  4. 4. http://upload.wikimedia.org/wikipedia/commons/7/7f/Structure_Paris_les_Halles.jpg
  5. 5. http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Train_wreck_at_Montparnasse_1895.jpg/853px-Train_wreck_at_Montparnasse_1895.jpg
  6. 6. http://www.andpop.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-03-at-11.18.47-AM.png
  7. 7. http://ontherealny.com/wp-content/uploads/2013/01/OfficeSpace.jpg
  8. 8. http://500motivators.com/motivate/me/motivation-its-not-that-im-lazy-i-just-dont-care/
  9. 9. A Social Experiment.
  10. 10. http://i.imgur.com/rjhDNfQ.jpg
  11. 11. http://1.bp.blogspot.com/_gS-Swh3xoXc/TGBKtRIB2PI/AAAAAAAAA8o/j-2oz2Nhdm8/s1600/Dave+driving+Antique+Car.JPG
  12. 12. http://bothsides.wpengine.netdna-cdn.com/wp-content/uploads/2013/09/Transparency.jpg
  13. 13. http://i.imgur.com/8yj8CqJ.jpg
  14. 14. http://i.imgur.com/6vCz2.jpg
  15. 15. http://www.flickr.com/photos/dno1967b/8600410187/sizes/h/in/photolist-e6Zmjg-a9Ton2-9GUHja-ehXg1P-aaryES-fbpos6-fKqHKk-exbKfX-aarwxu-aawuWMaaoH6B-8T5YTg-858k1A-ajFRPZ-7N7783/
  16. 16. object Build extends ClientServerCoreProject with ClientServerCoreDeps { val name = "svc-persistent-session" val servicePort = 8260 override val ioncannonTrack = IonCannon.FastTrack override def coreDeps = Seq( "com.giltgroupe" %% "commons-util" % "5.2.3" ) ++ defaultTestLibs override def clientDeps = Seq( "com.giltgroupe" %% "commons-core" % "5.2.3", "com.giltgroupe" %% "commons-test" % "5.2.3" % "test" ) ++ defaultTestLibs override def serverDeps = Seq( "com.giltgroupe" %% "commons-core" % "5.2.3", "com.giltgroupe" %% "commons-voldemort" % "1.1.1" % "compile->compile;endorsed->endorsed", "com.giltgroupe" %% "commons-squeryl" % "0.5.2", "com.gilt.service" %% "zookeeper" % "0.6.7" ) ++ gilt.ServiceFramework.dependencies("2.3.1") ++ defaultTestLibs }
  17. 17. $ sbt gilt-upgrade
  18. 18. object Build extends ClientServerCoreProject with ClientServerCoreDeps { val name = "svc-persistent-session" val servicePort = 8260 override val ioncannonTrack = IonCannon.FastTrack override def coreDeps = Seq( "com.giltgroupe" %% "commons-util" % "5.2.4" ) ++ defaultTestLibs override def clientDeps = Seq( "com.giltgroupe" %% "commons-core" % "5.2.4", "com.giltgroupe" %% "commons-test" % "5.2.4" % "test" ) ++ defaultTestLibs override def serverDeps = Seq( "com.giltgroupe" %% "commons-core" % "5.2.4", "com.giltgroupe" %% "commons-voldemort" % "1.1.1" % "compile->compile;endorsed->endorsed", "com.giltgroupe" %% "commons-squeryl" % "0.5.3", "com.gilt.service" %% "zookeeper" % "0.6.7" ) ++ gilt.ServiceFramework.dependencies("2.4.0") ++ defaultTestLibs }
  19. 19. @Path("/persistent-session") class PersistentSessionResource(storage: StorageApi) { ! @GET @Path("/{namespace}/{id}/{key}") def get(@PathParam("namespace") namespace: String, @PathParam("id") id: String, @PathParam("key") key: String): Option[core.Value] = { storage.get(makeKey(namespace, id, key)) }
  20. 20. trait Session { def get(key: String): Future[Option[Value]] } ! private class SessionImpl(namespace: String, id: String) extends Session with CommonsClient[ServiceException] with CommonsClientConfig { def get(key: String): Future[Option[Value]] = { getResponse(svcUri, "persistent-session/%s/%s/%s".format(namespace, id, key)) { bytes => CommonsJson.parse[Option[core.Value]](bytes).map( ValueImpl.apply) } }
  21. 21. abstract class SessionClientTest extends TestClients with Predictable { } @Test def putValueCanBeGotBack() { val session = sessionClient.getSession(rndString()) val key = rndString() val value = rndString() session.get(key).get() should equal(None) session.put(key, Value(value)).get() session.get(key).get().get.value should equal(value) } ! @Functional class FunctionalSessionClientTest extends SessionClientTest with FunctionalTest @Capture class CaptureSessionClientTest extends SessionClientTest with CaptureTest @Mock class MockSessionClientTest extends SessionClientTest with MockTest
  22. 22. $ sbt release
  23. 23. val cluster = allocateCluster("svc-foo", "1.2.2") for (server <- cluster.allocateServers()) { deploySoftware(server, "svc-foo", "1.2.2") addToPool(server) } for (server <- findServers("svc-foo", "1.2.1")) { removeFromPool(server) } garbageCollect("svc-foo", "1.2.1")
  24. 24. http://i.imgur.com/OIpCx.jpg
  25. 25. http://www.recruitmenttakeout.com/wp-content/uploads/2013/04/brian.png
  26. 26. Openness. Autonomy. Transparency. Trust.
  27. 27. Strategy
  28. 28. Strategy Initiative 1 Initiative
  29. 29. Initiative
  30. 30. Initiative Initiative 1 KPI
  31. 31. Initiative Team Initiative 1 KPI
  32. 32. Tools for Emergent Centralization
  33. 33. Publish on the blog?
  34. 34. Have a party?
  35. 35. Release to production?
  36. 36. Anybody. Anytime.
  37. 37. Zero Waiting.
  38. 38. http://3.bp.blogspot.com/_q3ojg-NVpyU/TLMLUNGhgjI/AAAAAAAABS8/IJQSBSqII5s/s1600/compass.jpg
  39. 39. gilt.com
  40. 40. Gilt Home parkandbond.com gilttaste.com giltcity.com gilt.com
  41. 41. parkandbond.com gilttaste.com giltcity.com Gilt Home gilt.com
  42. 42. gilt.com platform
  43. 43. http://shirt.woot.com/derby/entry/18736/positive-feedback-loop
  44. 44. Voluntary Adoption
  45. 45. Product Platform Shared UI Features Core DB • Move Fast • Fail Fast • Focus on Function • Enabled by Platform • Pick & Choose • Drives Platform Innovation • Teams Measured by KPIs
  46. 46. Product Platform Shared UI Features Core DB • Move Slower • Proven Technologies • Focus on Scaling • Drives Product • Teams Measured by Adoption
  47. 47. Product Platform Shared UI Features Core DB Stronger than the sum of its parts
  48. 48. http://4.bp.blogspot.com/-oemCGhrR6yw/UHnXg5LiiTI/AAAAAAAAHOI/JyZctjen3_4/s1600/simple+vs+complex.png
  49. 49. http://i.imgur.com/tUyGc.jpg
  50. 50. https://www.facebook.com/photo.php?fbid=403764539746425&set=a.289682334487980.65204.289626304493583&type=1&theater
  51. 51. http://i.ytimg.com/vi/g8yN5fivBt8/0.jpg http://pocketpause.com/woofwoof/wp-content/uploads/2012/12/IMG_6225.jpg
  52. 52. http://marcelnunis.com/blog/wp-content/uploads/2011/12/coins.jpg
  53. 53. http://brettlegree.files.wordpress.com/sunset-joy-2-1.jpg
  54. 54. http://thumbs.dreamstime.com/z/boy-sleeping-hammock-5090586.jpg
  55. 55. http://online.portenf.sa.gov.au/sites/default/files/16_0.jpg
  56. 56. https://www.apertus.org/sites/default/files/bart_os.gif
  57. 57. http://creditmanagementassociation.org/wp-content/uploads/2013/03/mousetrap.jpg
  58. 58. http://i.imgur.com/Owoeyzi.jpg

×