Software Engineer

Languages

I am most familiar with Java, which has covered most of my domain at Ocado since I joined in September 2012. I have a good understanding of computer science concepts through my degree programme so am able to apply my knowledge to various other languages, particularly object-oriented ones.

Delivery Systems (October 2015 – Present)

In delivery systems, one of my main focuses has been on improving the process for this newly-formed team. Aside from this, I’ve been supporting, maintaining and extending legacy code bases, some of which haven’t been touched for years. My attendance at Robert C Martin’s TDD and Refactoring course in November 2013 has proven very useful and, alongside his book “Clean Code”, has really helped me to develop my ability to carry out effective refactoring and enhancement of decaying code.

I am a strong proponent of pair programming, combined with Test-Driven Development (TDD) through unit testing and integration testing.

Marketing Systems & Customer Relationship Management (CRM) Systems (October 2013 – October 2015)

As well as maintaining legacy systems, my arrival in the Marketing Systems team coincided with the development of a new greenfield CRM project, which involved creating a new RESTful web service as a central place to handle customers’ personal data within the company.

As this project matured, Ocado announced the launch of an internationalisation and replatforming project, later revealed to be called the “Ocado Smart Platform“. This involved creating a new set of systems from the ground-up, this time in the “cloud”, hosted with Amazon Web Services. As a result, I have around 18 months’ experience of working with systems such as DynamoDB, S3, ElasticBeanstalk, etc. During this time, we developed a continuous delivery pipeline using “Go”.

Warehouse Management Systems (September 2012 – October 2013)

My first role at Ocado involved working on the company’s new, highly-automated warehouse. This introduced me to many concepts that I had not come across before, including the use of tools such as maven, proper use of SCRUM and my first experience of supporting a live production system.

Technologies and practices

  • Databases: Oracle, DynamoDB, PostgreSQL
  • AWS: DynamoDB, ElasticBeanstalk, S3, Simple Email Service (SES)
  • Build tools: Maven
  • Source control: Git, Mercurial
  • Testing: JUnit, Mockito, WireMock
  • RESTful web service architecture
  • Micro services

Tools

  • Continuous delivery build servers: Jenkins, Go
  • IDEs: IntelliJ, Eclipse, Visual Studio
  • Ticketing/tracking systems: JIRA, Trello