Author: Gareth

Gareth Andrews

May 25, 2021

Technical Challenge

Hey! I’m Gareth and I’m a software developer for the Legal Innovation Lab Wales. As part of the recruitment process to get this job, I was asked to complete a technical challenge which would showcase my abilities and demonstrate my suitability for the role. For my first blog post I thought I would discuss my solution to the technical challenge. My implementation can be found on GitHub.

Brief

The technical challenge involved re-producing the Linux kernel using only pen and paper... Ok not really.

The real technical challenge involved producing a piece of software. There were no specifications or requirements for this software, only that it had to be completed between a Thursday evening and the following Tuesday morning. The choice of programming languages and libraries used was completely up to me. This was an opportunity for me to show my working process, and evidence that I could write clean, consistent code that’s easy to understand whilst following best practices (such as SRP, DRY and KISS).

The approach I decided on was to take a simple idea and build an over engineered solution to highlight my skills to the best of my ability, in the timeframe given. I developed a basic calorie counting web application that tracks the number of calories a user consumes each day. The user can set a calorie target, then add food items and their calories to their daily diary to track their intake. I felt like this basic idea would be achievable during the challenge and I could add more features and refine the application should I have time remaining.

Implementation

For my implementation I knew I wanted to use some of my existing skills, but also use it as an opportunity to learn something new and challenge myself.

Before I joined the Lab, I spent a year working for Swansea University's Medical School as a Software Developer in the Data Science department. Much of my work involved building web applications to manage large datasets and facilitate data science research. Whilst in this role I gained lots of experience with HTML, CSS, JavaScript, SQL and especially C#/.NET Core.

I started with creating a backend in the form of a REST API, using .NET Core, connecting to a PostgreSQL database using Entity Framework, secured using JWT. These technologies are familiar to me, so I knew I could capture most of the functionality of the application quickly and easily, which would allow me more time to focus on the areas of the project I was less sure about.

In the past, I have used Razor Pages to create the frontend for web applications. This is a server-side approach in the .NET Core tech stack. To challenge myself and highlight my flexibility for the role, I decided I would tackle the frontend using a technology that was completely new to me, something which we are often required to do as software developers. I wanted to use a client-side framework and after some research, I settled for React, as it is ideal for single page applications, and I could build on my JavaScript experience. By developing the backend in a familiar technology, I allowed myself more time to get to explore React, develop my skills, and create an adventurous frontend solution.

To further highlight my skills for the job, I packaged the entire solution using Docker so it could be easily deployed and demonstrated on any system.

Conclusion

Following the technical challenge, I was invited to present my solution to the rest of the development team and answer any questions they had. I really enjoyed the opportunity to showcase my skills but also having the opportunity to push myself and learn something new under pressure.

Oh, and I got the job – hurray!

In future blog posts, I will document the processes I used to create the backend and the frontend for my technical challenge.

Thanks for reading and stay tuned for more!