Non-Technical Skills

As with most people, my skills go beyond the technical world. However, these can be hard to demonstrate on a
website. A lot of these skills I have picked up whilst working at BSkyB.

Test Driven Development

The main skill that I have learnt since working at BSkyB is test driven development. This is not to say I had
never learnt this whilst at university, but rather I had never understood how useful it really is. For all
of our projects, we strictly develop our tests before writing any code.

The first series of tests are unit tests, which are there to test specific bits of code that are broken into
blocks as small as possible. These are required so that if any functionality does not work, it is easier to
find exactly which code is broken, assuming that the tests are well written. An example for a web system
would be to check if when a button is clicked, an alert dialog box is displayed.

The second series of tests are integration tests, which are there to test the interaction of the different
units of the code. This is so that when one bit of code calls another bit of code to complete a usable
function, it is tested to work. An example of this on a web system would be to see if when clicking on a
button, an alert dialog box appears and then the page submits to another page successfully.

The final series of tests are the behaviour driven tests. These are tests that run through the system from a
users persepective and how they would use the system. For example, on a web based system, a behaviour driven
test may check to see if a user can log in to the site.

Agile Principles

A great set of skills that I have learnt at BSkyB are the agile principles. The main form of agile being used
is scrum. While this is well used and what most people use, for the project that I am currently on, we are
trying out an evolved version of scrum with kanban, to try and deliver updates as quickly as possible. This
has proved to be quite difficult in terms of planning and communication, but it is something we are going to
give a good opportunity to really see its impact rather than dropping it as soon as it fails.

The agile principles are something that I have found to be extremely good. Being able to plan on a short term
basis and being able to quickly switch out features that are no longer needed for features that are,
resulting in systems being developed quickly and to a usable, releasable state.

Pair Programming

Another skill that I have picked up at BSkyB is pair programming. The concept of pair programming is that two
developers work on the same piece of code at the same time. This is done by one person writing the code and
the other person reading what they are writing to make sure that the code is of a good standard and to
reduce the possibility of bugs.

While this may sound like a waste of money, which is what I first thought when I heard about it, it is
actually a good system to use as it does work. Many times I have personally experienced moments when writing
code, inputting a spelling mistake and then not being able to find it, but having the person who I was
pairing with find it, reducing the amount of time bein spent on development.

Continuous Deployment

Continuous deployment is something that I have always tried to introduce and promote at work, but it has only
been recently that I've been able to successfully get it working with a production deployable project. On
the way to getting continuous deployment working, I have learnt to use cloud solutions, such as Cloud Foundry and Heroku,
Puppet, Docker and Jenkins.

This has been a great learning experience, as it involves maintaining a strict TDD process, fully automated
tasks and making sure that applications can be taken down and started up with little, to no impact on the
service, which has provided quite a few technical issues that had to be overcome.

System Designs

At university, I had a fair few modules on how to create diagrams, such as entity-relationship diagrams, use
case diagrams and flow charts. However, I have never had to use them in a work environment.

Whilst in a professional environment, all the system designs have been recorded as architecture diagrams.
Whilst this is not something that all organisations will uphold, as some organisations prefer to have a well
documented project, at the organisations I have worked for, all that is required is enough documentation to
allow newcomers to understand how things work.

A major difficulty that I have had to overcome, is the need to have highly available, cross data centre
systems. This is something that required us to choose the correct underlying technologies for our
software, such as having every application be not be context aware, be clustered and for the storage system
to also be clustered (such as Sharding Mongo).