Why a killer Google PageSpeed score isn’t the end of your optimisation challenge

We don’t like testing the patience of our customers. So, like most e-commerce businesses, the technical performance of our site matters.

Measuring performance has become a core part of our development process. But occasionally it feels we focus too much on one specific metric; our Google PageSpeed score.

Continue reading


London Scala Users’ Group Event

We are excited to announce that NET-A-PORTER will be hosting a LSUG event at the THE NET-A-PORTER GROUP offices on Thursday 26th March. I’ll be presenting a talk covering some of the lessons we have learned whilst building the NET-A-PORTER product API in Scala, Akka and Spray.


  • 6:30pm – Doors open
  • 7:15pm – Talk: Building a RESTful product API in Scala, Akka and Spray
  • 8:00pm – Q&A
  • 8:15pm – 9:30pm – Pizza and beer served!

NET-A-PORTER offices 3

NET-A-PORTER offices 2

Spaces are limited, so please sign up via the meet-up event page

Hope to see you there!

Perl and the Elasticsearch percolator



For our most recent hack day, I worked with my colleagues Antonio Barone and Nelio Nunes to implement an alert-me-when function for our site. In production, we use Solr at the moment as the search engine to serve our frontend. Unfortunately, implementing alerting functionality with it means you have to go down a do-it-yourself route.

Continue reading


NAP::Messaging – glue and policies for interacting with ActiveMQ

As part of our service oriented architecture, our Perl applications send messages over ActiveMQ; a few of them also consume those messages and act on them.

All these consumer applications are based on Catalyst. Initially, we used Catalyst::Engine::Stomp and a rather complicated set of in-house libraries to wrap it.

Those in-house libraries have, in time, grown to incorporate more and more responsibilities, including testing, logging, message serialisation, plugin loading… it was time to break them apart and write something cleaner.

Continue reading

Hack Days

Promoting team rivalry through Fantasy Football

Robin have you played your wildcard yet!?

As soon as I joined NET-A-PORTER I was absorbed into the company Fantasy Football League by equal parts peer pressure and wanting to look cool. The first season took its toll. Forget lying in on a Saturday — I needed to triple-check my captain selection, I wouldn’t dare to take a holiday in case a player got injured while I was away, never mind the fear of forgetting about double-game weeks. After a respectable lower-middle-half-table finish, I needed a break — a long break.

The NAP Tech team consists of multiple sub-teams, so naturally there is some friendly competition; when a company-wide league was announced, I knew I had come out of retirement.

We have two main leagues: one strictly for NAP Tech; and NET-A-LIGA (a.k.a. big boy school), the company-wide league for people who know what they are doing.

If we were going to make this a real success, we had to amplify the rivalry and the potential for gloating — that is what this post is about.

Continue reading


Maximising Cache Hit Rates for REST APIs

Lovell previously mentioned improved cache time relevancy in his post about how we scaled the NET-A-PORTER website. My team is responsible for the product API used during the sale and currently being adopted by other applications across the organisation. I thought I’d reveal a few techniques we’ve used to maximise our cache hit rate.

Continue reading



At NAP, our code bases have organically grown as we’ve added more capabilities in order to support the rapid growth of our business.

From Monolithic to Microservices

The microservices architecture is an alternative pattern that addresses the limitations of the monolithic architecture. With Microservices the ambition is to be small. The flexibility that comes from Microservices is driven largely because of their size, so to keep these benefits we need to fight against the urge to add more and more lines of code.

Continue reading