Wednesday, 17 June 2015

10 essential features of online retail


10 essential features of online retail that you’ve probably never noticed (but use every day)


We often discuss the routes in to online stores, but here are a few features that many online stores now have that help them maximise the value of each visit that you make to their store. Chances are, you've used most of these every time you shop but have never noticed.

Products are in the right places

Ok, so of course you would expect to find this dress under "Home / Women's / Clothing / Tailoring" section of the Ted Baker website. It's a tailored dress – it’s under the “tailoring” section. But have you considered how it got there? The truth is, getting a product into the right place on a website is harder than it looks. A lot of product categorisation is manual, and as such it isn't always done accurately or consistently. As an example, the same dress is that it isn't in the "Home / Women's / Clothing / Dresses" section - regardless of whether that's technical constraint or poor online merchandising, it could have a huge impact on sales. Good product categorisation often means putting the product in more than one place. For example, this coffee exists in the "Father's Day", "Food and Drink" and "NSFW" categories.

One product = one URL

Products may appear in more than one location according to the catalogue hierarchy. But for SEO, the product really needs to only appear under a single URL, so search engines know they're the same thing. The result is a URL in a format along these lines http://www.johnlewis.com/microsoft-xbox-one-console/p775568 where the textual description is an arbitrary value that can be specified by the online merchandisers in order to maximise their SEO results. Handy hint: the important value is the ID, not the text – and you can usually substitute the text for anything you want. On some sites, this gives you an unmissable opportunity to write your own URLs – for example, http://www.johnlewis.com/can-someone-buy-this-for-jo/p775568


Each site has its own search engine – and it needs to be good.

When you say search, everyone says "Google". But product search on retail sites is a different thing altogether. Whether you're looking at a standard platform integration or a ground-up self-build, the site will certainly use a 3rd-party search engine. The big players at the moment seem to be Endeca and Solr.

One of the big decisions that an online retailer will have to make is what information goes into your search engine, and how often is it refreshed? More information means search indexing takes longer – this makes it more difficult or costly to update the index frequently so if your information changes frequently it’s usually better to retrieve this post-search. Refreshing the search index more often means caches are invalidated more often, which will slow down how quickly those impatient online shoppers can wait for their search results.


Search engines also control facets (filters)

The checkbox-list down the left hand side of the page that allows you to narrow your results is usually built by the search engine too. Working out what list of options to show you is not necessarily a simple task, and in most cases you need to select a top-level category in order to be shown the full list of facets. Under the hood, this often results in the search being run again but with the appropriate conditions applied, which is why it can sometimes feel like the facets don’t respond quite as quickly as you would expect. This is one of the big influencing factors in what information you put in your search index – it’s much more difficult to filter on information that’s not been indexed.


Ratings and reviews

Reviews are usually provided by a third party. Moderating the comments to weed out inappropriate content is a task that most online retailers are happy to leave to someone else. BazaarVoice, Reevoo and Feefo are examples of companies who provide this service. Reviews can have a huge impact on conversion as shoppers look for validation and reassurance that they’re not doing something ridiculous – product owners call this “social proof”.


Upsell and cross-sell options

As you browse the site, there’s a good chance the retailer is sending information about what products you look at, and what you go on to buy, to another 3rd party. Companies such as Certona and RichRelevance do some pretty sophisticated analysis on what these customer journeys are, but it doesn’t mean that you don’t get a few odd results every now and again. For example, this holdall on johnlewis.com tries to cross-sell you makeup....


What other people are buying or looking at

Similar to reviews and upsell/cross-sell suggestions, a lot of this is about tapping into our sheep-like mentality need for social proof in order to provide a little bit of a nudge, or simply some reassurance that there are other people who are doing the same as you. Whether it’s easyjet.com letting you know that there are only three tickets left at this price, or hotels.com telling you that other people are viewing the same hotel at the same time, this is all about letting you know that you’re not alone out there.

Remind you what you’ve been looking at

Everyone finds those adverts that follow you around the web kind of creepy, yes? And yet sites keep on doing it. But even without creepy third-party advertising, sites do well to remind you about the things you had been looking at. For example, I’d totally forgotten that I was looking at planning poker cards until I went to the amazon.com homepage and saw this:
One-part spooky web-stalking, one part helpful reminder. Thanks, Amazon - thamazon.


Have an affiliate programme

Affiliate sellers sellers such as amightygirl.com can generate a healthy income for sites like these, who may receive up to 10% of the sales they drive through to Amazon with their affiliate marketing programme. The example I showed there is clear and up-front about their relationship with Amazon. Other sites might not be so obvious. Affiliate programmes are a big topic in themselves so all I'm going to do here is mention that they exist!


Coming soon? Tailored sites just for you

One of the features that the biggest ecommerce platforms like to shout about is their ability to create “targeters”, which is the ability for a site to carry out some decision-making based on what it knows about the person who’s browsing. A basic example might be showing women’s clothing as the hero panel on the homepage if the site knows you are female (either based on your signed-in profile, or by your previous browsing history). Another example might be to show high-chairs if they know you bought a cot six months ago. In theory, these applications are really open-ended… e.g. default products from low to high if you’re always buying the cheap stuff, show blue tops before red in the sort order if your purchase history suggests that that’s what you always buy, automatically show more results per page if you’re on a fast internet connection. In practice, I haven’t seen as much of this as I would have expected – so if you’ve got some examples, please share!

Thursday, 30 April 2015

Am I beach body ready? Hell yes

What kind of feminist blogger would I be without wading into the "beach body ready" debate?

These rather loathsome adverts are all over the London underground like a rash. My objection to them is more ideological than personal. I'm too old and wise (read hard-nosed and stubborn) to allow such blatant shallow advertising get to me. But I despise adverts that plays on fears and insecurities as these ones do, and I worry about the effect the ubiquity of the impossible photoshopped female form has on my naive and impressionable daughters, despite the eldest not being even 4 years old yet.

I'm in my mid-30s and my body has had a lot asked of it for the past few years. A solid 5-year stretch in which I was either pregnant or breastfeeding, a sedentary job, no time for exercise, and a diet driven by hormone-fuelled hunger and a weak will when it comes to chocolate. My party trick of being able to carry two tantruming children at once has not resulted in the kind of muscle tone you would expect from regularly lifting a combined 25kg that can kick and squirm. Despite all this I somehow manage to sit the right side of the BMI overweight line and my fitness is good enough to keep up with the kids (for now), even if it's not where I'd like it to be.

I'm sure the body nazis could find an awful lot to scowl at but I don't care. I'm happy with my life and my priorities and I'm certainly not going to ditch anything from my packed schedule so that I can introduce a "skincare regime".

I think any parent of girls (and increasingly boys) have concerns about their kids growing up to hate their bodies. I worry so much about my beautiful kids being miserable or starving themselves because they think that that's a normal response to a normal body. But my influence in their lives is infinitely more powerful than any advert - at least at the moment. And I know that my innocent and naive girls are also incredibly observant and perceptive, and the way I act and speak and think now is shaping the way they see and understand the world.

So I will show them that it's not just possible to love a normal body, it's not even up for debate. You won't find me covering up the silvery remnants of my stretch marks on the beach, or frowning in the mirror at the bits that wobble or sag. I'm not going to duck out of photos because my hair's a mess or a bad night has left me looking more haggard than usual. I'm never going to turn down food "because it'll make me fat" when I could "choose things that will help me be fit and strong" instead. If I try to exercise more it's in order to live longer and enjoy life more, not to turn my body into something for other people to look at. And I will live and believe these principles deep down in every fibre of my soul, because I know that Hattie can spot an inconsistency from a mile off. Plus, I really can't be bothered to do anything else.

We're off on a beach holiday in a couple of months. I can't wait. I might even wear a bikini. And my goodness, my poor neglected body is ready for some sea and sun. That's what beach body ready means, right?

Wednesday, 29 April 2015

Sample NFRs and deployment plan

It’s never too early to start thinking about deployment.

In fact, the way you deploy and support an application should be deeply embedded in your development process to the point where you don’t even have to think about how you deploy it. Many large organisations working on big, monolithic codebases feel a million years away from achieving continuous deployment but by working towards this goal - even if it’s never going to be achieved - is a great way to make your deployments and live support easier, more predictable and less stressful.

The tendency is for a gulf to exist between development and operational support. As someone who cut their teeth on a one-week-on, two-weeks-off support regime, I think this is a shame. There’s a huge amount to be learnt about writing good quality code when you’re trying to debug it in production at 2am, and there’s nowhere to hide when it comes to knowing tools, systems and the business.

There’s also a lot to be learnt from being the person who flicks the switch on a deployment to production. It’s not unusual for deployments (especially for ecommerce sites) to take place in the middle of the night, and those are the times when you really don’t want to be relying on everyone being alert to make things go smoothly. Being well prepared and having everything easily to hand is essential.

To help start the conversation, here is my template NFRs and deployment plan.

Deployment Plan

NOTE: All system-oriented requirements (such as those needed for acceptance into service) should have been captured in the NFRs.

Stakeholders identified

Pre-live business success criteria

  • Have we met the requirements for a minimum viable product? (Scope)
  • Has the product been adequately tested/QA’d? (Quality)
  • Has the business signed off on deployment/change windows (Time)

Pre-live systems success criteria

  • NFRs have been met
  • Acceptance into Service requirements have been incorporated into NFRs
  • Appropriate documentation is in place and accessible to everyone who needs it
  • SLAs and support arrangements are in place and have been agreed
  • Network and infrastructure requirements have been met

Data cutover/migration plan

  • What data needs to be replicated into the new system?
  • What data needs to be kept in sync between the two systems during cutover?
  • What data scripts need to be run, and on what triggers, by whom?
  • What are the data rollback plans?
  • What are the post-project data archiving plans?

System cutover/migration plan

  • How are users/customers going to be cut over from one system to another?
  • What are the success criteria for each cutover stage?
  • What checks are going to be performed, how, and by whom?
  • Have appropriate cutover windows been identified, if appropriate?
  • For out-of-hours deployments, has overtime been agreed, does everyone have access to the relevant buildings, have communication routes been put in place, has the building management team been notified, what arrangements for food and drink need to be made? (As an aside: your deployments should never be so big and risky as to need all this)
  • Rollback plan for each stage.
  • What are the post-project systems tidy-up plans?

Code management plan

  • What code branching/tagging activities need to happen? Who is responsible?

Communications plan

  • What distribution lists are needed and who needs to be on each list?
  • Who is responsible for sending emails/other communications?
  • What are the stagegates/triggers for communications?

Support and escalation

  • What are the support routes during migration/cutover?
  • What are the escalation routes in case of problems?

Non-Functional Requirements (NFRs)

Note: this is by no means an exhaustive list!

Performance and volume

  • Number of page requests per hour - average (mode)
  • Number of page requests per hour - maximum
  • Number of orders placed per hour - average (mode)
  • Number of orders placed per hour - maximum
  • Number of concurrent order sessions - average (mode)
  • Number of concurrent order sessions - maximum
  • Order size (number of items) - average (mode)
  • Order size (number of items) - 95th centile
  • Order size (value of items) - average (mode)
  • Order size (value of items) - 95th centile
  • Homepage response time - average
  • Homepage response time - 95th centile
  • Product page response time - average
  • Product page response time - 95th centile
  • CDN requirements
  • Horizontal scalability (add more servers)
  • Vertical scalability (make servers bigger)
  • Database scalability

Uptime and support

  • Define "out-of-hours" times (evenings, nights, weekends, bank holidays)
  • Define first line support
  • Define second line support
  • Define third line support
  • Out of hours channels and response time to outage
  • In-hours channels and response time to outage
  • Log file access
  • Application monitoring, alerting and analysis
  • Network monitoring, alerting and analysis
  • Acceptable unplanned outage time, hours per month
  • Acceptable planned outage time (including deployments), hours per month
  • System restore
  • Dual-site failover
  • Load balancing, DDoS, and network requirements
  • 3rd Party dependencies and backups in case of failure
  • Frequency of deployment
  • Disaster recovery plan

Platform targeting

  • Target platforms/browsers
  • Target screen sizes/aspect ratios
  • Target connection speeds
  • Text size changes, colour contrast and screen reader/tab order

Security and Legal


  • PCI compliance
  • Any other legal compliance/certification requirements?
  • Password/other encryption
  • User authentication
  • User authorisation
  • Data protection/privacy
  • Ethical hack test
  • Software licensing
  • Copyright/content licensing
  • Data audit requirements
  • Data retention/archiving policy

Wednesday, 4 March 2015

My own brand of feminism - and why it goes far beyond just being pro-women.

"Feminist" is a label that I happily sign up to. But a little explanation is needed, as it's a term that is often misunderstood or unjustly maligned. Here's my own personal feminist philosophy.

Feminism for me started out as having the choice. As a reasonably hard-headed woman who was used to operating in male environments, I never let social expectations stand in my way, and I have to admit a slight satisfaction in deliberately defying them on occasion (it's a constructive outlet for my rebellious side). So when my daughter came along, I applied the same rules. Unfortunately, it soon turned out that my daughter was more then capable of making her own rules. I can't say if these have been formed by subtle messages sent to her by marketing and media outfits, peer pressure from the assorted preschoolers she hangs out with or her own nature and personality, but the rules are: princesses come second only to fairies, anything pink or frilly is amazing, and Elsa from Frozen is the best thing since birthday cake. One thing was for sure: I had little hope of recruiting my 3-year-old to the feminist cause by telling her that she couldn't have any of this, in the name of equality.

So, I had to re-think. In the new regime all these things are all fine - after all, a philosophy of "choice" which takes options away does not really make sense. Instead, I decided, it was most important that Hattie not receive any messages saying that she couldn't be something. So, dressing head to toe in pink and refusing to wear trousers is no barrier to being a knight or a pirate in our house.

This message gets repeated very frequently in an attempt to counter the negative messages. "To the pirate ship!" my daughter calls, and faces protestations from her (male) friend - she can't be a pirate, she's wearing a crown. Well, she can be a princess and a pirate at the same time if she'd like, I explain. Would you like to be a princess too, little boy? He wrinkles his nose - princesses are for girls.

This illustrates how the inequality cuts both ways - "feminism" is an issue for men too. They are also subject to archaic expectations of the roles that they must play in society. As much as my daughter is being denied the opportunity to explore the more masculine aspects of her personality, the opposite is also true: boys are denied the opportunity to explore the feminine aspects of their own.

Why is nobody up in arms about this? Unfortunately, this is symptomatic of an even deeper prejudice: feminine characteristics are still viewed as less desirable than masculine ones. While I was busy proving that I could do anything a man could do, I had completely missed the point that you shouldn't need to act like a man to be seen to be as good as a man. Why should someone with a penchant for pink princesses be less likely to make a good CEO than someone who chooses blue superheroes?

The fact is that everyone should be treated equally based on their merit, rather than their gender identity, race, or sexual orientation, and that merit should not be tainted by outdated assumptions. In fact, everyone should be treated as an individual, and judged individually on their qualities. That's not feminism, that's just being fair.

If being fair for fairness' sake isn't your thing, then there's a more self-serving perspective you can apply to the whole thing. If everyone else is writing someone off as an airhead because they dress in pink and are a bit giggly, then surely it's an opportunity to take advantage of the fact that they're really, really good at process modelling. And in a highly competitive market, do you want to be the person who overlooked the kick-ass developer because they wear lipstick (male or female)? Anyway, it's been shown time and again that diverse teams just perform better.

It's time to ditch the assumptions and start looking at what the people around you can do, rather than focusing on how they're different to you. And reassess whether your definition of "good", "talented" or "professional" is shaped by centuries of male (not to mention white, heterosexual, middle/upper class) privilege.

Friday, 27 February 2015

Docker, Shippable and continuous integration

Recently, I’ve been having fun with continuous integration and questions about deployment. As a result, I’ve fallen a little bit in love with Docker, which is just a lovely way to run your applications. I’m not going to go into detail because the documentation is great, and anyway this post is more of an opinion piece; if you want to know the details you can take a look at my Docker guide here: http://guide.andigital.com/devops/docker-quick-reference.html

Getting a little bit carried away with all things new and shiny, I decided to embark on implementing Shippable as our CI tool of choice. But my feelings on this topic are much more mixed.

What’s to like? Well, it's super easy to set up. You really can get a CI environment up and running in very little time - which was not my experience with Jenkins or Team City, despite assurances to the contrary. If you know you really should get something resembling CI in place but cba to actually get round to it, shippable might be what you need.

I was instantly drawn to the fact that shippable is built on docker (did I mention how great docker is?). You pop a shippable.yml in your project root directory just like your dockerfile, and with pretty similar content. That made things super easy - I already had a dockerfile, so it was just a copy, paste and tweak job, apart from the 15 submits I had to do before I finally got the syntax and space indenting right.

Unfortunately, all this dockeryness doesn't translate to easy integration with docker. Ideally, shippable would have triggered a dockerfile build and pushed this to my docker repo. In reality, and after huge amounts of faffing, I resorted to a manual download of the archive file and a little shell script to build the docker image and push it to docker hub. For the folks out there doing continuous deployment, it looks like Shippable has some decent-ish PaaS integrations, but our clients are mostly enterprise-scale outfits with multiple test environments and distributed production environments that may need a more carefully managed approach, at least as a starting point. Shippable falls a way short of having the level of control that I wanted from my CI tool.

So, a manual download and a little script and the whole thing just about does the job, but it’s hardly the new shiny I wanted. Also, when you can already do all these things in your Docker image, you can't help but wonder why you're bothering with Shippable in the first place. Especially when you find out that Docker have implemented their own automated build capability http://docs.docker.com/docker-hub/builds/. Unfortunately other work and family commitments means I don’t have time to play with this at the moment, but Docker has already gathered plenty of momentum in our team so it’s being looked at.

All the technical details for the shippable.ml, docker build file and shell script that I put together can be found here: http://guide.andigital.com/devops/CI-docker-deploy.html


But ultimately I have to face the music: if I'm serious about becoming a fully-fledged CI pro, I need to get to grips with Jenkins. The dated UI and daunting prospect of getting to grips with 1001 plugins and extensions really is no excuse. Anyway, I've heard you can run it in a docker container...

Wednesday, 4 February 2015

Escaping Trinity Syndrome

Not that long ago I came across the term "Trinity Syndrome" to describe films with a "Strong Female Character" who starts in a blaze of success, being the best at whatever it is that's central to the film, only to become a supporting role for a male character as the story develops, and ultimately relying on said male character, usually to rescue her from some peril that she would have adequately handled on her own before male had arrived. It is of course named after Trinity from The Matrix.

Here's a good summary by the ever-excellent Saturday Morning Breakfast Cereal:



It struck me that Trinity Syndrome is alive and well in the real world too. I have a good degree from Cambridge University. My career started well, with rapid progress up the steps to technical lead, and a bit of a reputation for being a "rising star". And then... Well, what happened? Things faltered in my meteoric rise. They did for my husband as well, so he got another job. I considered moving, but the company I was in had a reputation for being family friendly and I knew I could work part time. Instead of choosing to get a different job, I chose to get pregnant. Over the next five years, I spent two years on maternity leave, a year and a half being pregnant, and the rest of the time working part time. My momentum at work was lost, and my "personal brand" damaged and polluted by the "mummy" image.


Something unexpected happened - my confidence was shattered. In the mean time, my husband's career was back on track, a hundred minor successes for my hundred minor set-backs. Strictly speaking, we didn't need my income. My husband could provide all the material goods I needed, while my children would be more than enough to occupy my life. I knew I was lucky – isn’t this the dream, a lovely home, a loving husband, the freedom to spend as much time as I wanted with my children? Shouldn’t I be so glad that I’m not forced to make that gut-wrenching choice to leave my beautiful little kids in the care of some stranger every day, when they need their mummy?


And then it struck me - real-life Trinity Syndrome had happened to me. I'd started on this journey with every bit as much potential and ability as my husband. But not only had his career eclipsed mine, I'd also become reliant on him and my children in the process, and my own role in life was relegated to ensuring their success. So I’ve set off on a mission to breathe life back into my half-dead career. I've left my comfortable, family-friendly job with its temptations of part-time working and safety of knowing exactly what to expect, and joined an exciting new startup. The last few weeks have been eye-opening for me… I know more than I realise, my experience really counts for something, and – most shocking of all – I’m good at this stuff. At the moment, I’m absolutely sure I’ve done the right thing.


“Having it all” is that standard term to bandy around working mothers, but it has such negative connotations. Children are just another trophy in the cabinet for these ultra-career driven women. For them, the labour ward is something they fit in between the gym and the boardroom, and knocking out a couple of sprogs, or even three, will do nothing to dim that drive or determination. I have a certain amount of admiration for these women, but the having-it-all label is not one I identify with. It doesn't capture the doubt, the guilt, and the barriers to success that working mums face. It doesn't recognise the thousand tiny barriers between motherhood and a career, as opposed to just a job. And it doesn't recognise the fact that I'm not having it all, because my career will never be what it could have been if I had forsaken having children altogether.


So I prefer the term "escaping Trinity Syndrome". It's been a struggle to return to having a career, and my aim is to avoid the decline into obscurity and obsolescence that a neglected part-time job would have inevitably become. My ambitions are relatively modest and I will always be looking to find a harmonious balance between the different aspects of my life. Who knows where this next step will take me, or how it will pan out? One thing's for certain - I'm looking forward to the future with optimism.