I worked at Net-A-Porter.com for almost 7 years, and some of my achievements include implementing our first shared payment service, our first API and our first translations system. I have led teams, and I’ve also won a hack day with an iOS app.
I interviewed with Net-A-Porter shortly after Xmas of 2006 and started there soon after as their 3rd Java developer. (number 2 has since left, and number 1 recently celebrated 10 years with the company!)
It was fun, it had a startup vibe, and on the technology front, the world was our oyster. My manager came to me early on and said “check out this Spring thing everyone’s talking about”, and the fun ensued.
The team soon growed — I interviewed a lot of what would become today’s fourty or fifty odd team of JVM devs, and took a lot of the new recruits under my wing with my new-found Spring knowledge (including whom is today our Chief Architect, mind!).
Growth and adaptation
Our IT team could once fit on a large sofa, but today we’re just shy of 200. Over the years we’ve stayed agile and tried many different gloves for an ever growing hand (fashion puns are appropriate). We had teams, then streams, then cross-functional teams, then splinter groups going solo trying to save the world in their own special way. All along working for the greater good and trying to get your wives, girlfriends and sisters to buy another handbag.
Through-out the growing pains we’ve kept to a single theme: get the job done. Get it done well.
The company is not far off 5,000 employees strong, and our HQ is quite a sizeable hole in the side of the Westfield shopping centre, with a recent expansion up to BBC HQ’s way. I can tell you one thing: you might think it looks a bit Gattaca, but these guys know how to put an office together.
Net-A-Porter has become a very integrated part of my life. I remember shopping for a new TV on Tottenham Court Road one Saturday morning, when I got a call from ops saying the payment service is throwing a wobbly, and could I take a look. I’d whip the laptop out there and then, make the connection, troubleshoot, re-compile and deploy right there. Needless to say, it’s 2013 now, and I’ve only recently got a TV and a license for one.
I’ve also made many wonderful friends at NAP throughout the years. I’ve gone to my colleagues’ house warmings, weddings, birthday parties and BBQs. They are truly a great bunch.
I’ve had every opportunity in the world to use any technology I see fit. I sowed the Scala seeds in 2009, and were the first developer to use a MacBook in the same year. Not that it matters, but we’ve always been bound to our desks with enormous server-grade machines, and the laptops enabled us to roam the office for the first time. Besides, the iPhone had just launched and it was a very exciting thing to develop for.
Since there is so much more to say about NAP’s culture, opportunities, and way of working, but so little time, I’m leaving you with a bulleted list of things I did at NAP that popped into my head whilst writing this. Everything implemented in Java using Spring/Hibernate unless otherwise specified; no particular order.
- Open Source: active contributor to many Scala libraries and tools (e.g. jerkson by Yammer, the SBT plugin for IntelliJ, and my very own Scala Graph for inclusion in Scala Extended Collections library)
- Net-A-Porter HACKDAY 2011 Champion: developed a mobile app using the RedFoundry platform which ensures your app’s built for iPhone, Android and BlackBerry
- New CMS system using Alfresco
- Workflows for CMS using Activiti
- Translation service for CMS prototyped using Scala, and subsequently with Spring Roo, MongoDB. Interfacing with 3rd party translation service using SOAP
- StyleCred iPhone app supporting APIs using Spring MVC and Solr
- XML sitemap automation using Spring Batch, Apache Nutch and Solr
- spearheaded a lot of dev processes
- Dev tools console w/ Scala + Lift
- Integration (gradual): Spring 1.2/2.0/2.5.5/3.x into a Struts 1 web app
- Credit card database that enable customers to save their card details on our system; adherence to PCI compliance; use of BouncyCastle library
- Payment system (PSP) - adherence to PCI compliance; use of Apache CXF library for SOAP messaging between PSP and websites/Perl backend systems
- Database migration tool (dbtool) with which to patch the database (Bash)
- CI environment; script executed from Maven (hence Hudson); in the style of Capistrano (Bash)
- TheOutnet.com - buyline, shopping basket; more use of Spring; common code shared with Net-a-porter; i18n
- Administration tool weaved into website to replace antiquated BackOffice system; customer/admin roles; Aspect oriented programming (AOP)
- Affiliate integration (LinkShare); (AOP)
- Net-A-Porter API design; new apps (mobile, touch-screens, kiosks) can now tap into a common API; heavy use of RequestMapping annotation and content negotiation
- Net-A-Porter Checkout (like Google Checkout) design for use with Net-A-Porter API, and a common checkout system for the existing websites
- Refactoring of Net-A-Porter model components to use Spring DAO support; refactored into a separate re-usable module; transaction support
- Acting team lead on various occasions (code reviews, scrum)
- Headed 3-weekly tech forum; new technology; incubation
- Misc: Various enhancements, also using jQuery, taglibs; new Java Starter script (Bash,TCL) which enables new starters to set up a dev environment in a couple of hours; website new look&feel with increased sales from 20% year-on-year growth for weeks 1-9, to 65% growth for weeks 10 (launch) - 18; new promotions engine which can be configured by customer, email, price, season, designer, customer list, per-item, per-basket, etc;