4 simple ways to increase you GitLab CI test speed

Our in-house development projects are well covered for Unit and Frontend tests since we adopted BDD (behat) and a bit of TDD (phpspec).

However, creating lots of tests has an impact downstream on our shared Gitlab CI server. Every-time we push a new set of changes to GitLab the tests are taking 30mins to complete and beginning to slow us down.

So here are our 3 easy tips to speed up your test runner and reduce the time it takes to run a full test run.

  • Increase the Gitlab Runner’s Concurrent setting so we’re using the server’s resources to it’s maximum, `concurrent = 50`
  • Split up the most time consuming test suites into small suites so we keep most suites under 2mins. We’ve gone from test suites, to calling individual Unit test Classes for the slowest tests.
  • Prioritise the longest jobs first (put them to the top of the gitlab-ci.yml) so they can get going immediately and not hold anything else up
  • If you’re lucky enough to have access to the Virtual Server, then increase your CPU’s. That shaved 2 mins off our test

These simple and inexpensive changes have taken us from 30mins to 5mins 30s.

Excellent Customer Service training

Today I attended some training on Excellent Customer Service provided by the University.

The reason I signed up was because some of the work I’ve taken over here for providing Moodle Gradebook support is not “so hot” right now. It feels like we’re failing on some really basic stuff, which is frustrating to both me and obviusly the staff. Also, by failing on the basics, it knocking effect of WOW things, like custom code of the gradebook.

To be fair, a lot of the stuff I have taken on is going pretty well and the tutors seem very happy with my Project Management and Custom coding. But, I still want to be doing better in the areas I’m presently weakest in, whether they are inherited problems or brand new.

The first things to learn was, “who is my customer?”, Because yes, my work affects the students too, I did wonder if they were my customer. However, nope. My work sits in a chain of support and my direct customer is the staff I deal with on a day to day basis.

Then we used a very useful model and excercise, the Kano Model. It splits and identifies different parts of your service from Basic, Satisfactory and WOW.

Kano_model_showing_transition_over_time

It turns out after doing the excercise, I identified loads of basics, but had trouble picking anything above that. Which is becuase, in a few ways the service isn’t even hitting the basics, so there’s no point offering WOWs. The analogy we were given was, “With a hotel, your basics are Bed, Clean room & Toilet. So if none of those basics are met, you wouldn’t be so overly happy with a WOW of champagne on arrival”.

So… to identify some of the basics within my control,

  1. Staff know when Moodle is going down for maintanence
  2. When marks are released, they stay released
  3. Course rollover will happen

So.. to identify some actions to help with those basics,

  1. Maintenance
  • Create a staff list / Sharepoint group for notifications
  • On receipt of Russell’s emails, share with the list

2. Marks released

  • Map the Moodle Show / Hide flow
  • Request a Show / Hide logger from Central
  • Dan Course to take on marks release for the rest of this term
  • Analyse the Service Now calls raised

3. Course rollover

  • Inform staff when this will happen