Project thumbnail

Blood Test Diary

30 March 2019
Modern system for tracking blood tests – designed to be deployed in a hospital in London

This project was one of the biggest projects I have worked on so far. Our task was to work with a real-world client to produce a piece of software that could also be deployed and actually used. I worked in a team of 8 people so this was also a good practice in team organisation and time management to ensure everything was delivered on time.

What we were asked to do

Our task was to develop an interactive and semi-automatic system for tracking the blood tests – a digital blood test diary. We worked closely with one of the London hospitals where they were using Microsoft Excel spreadsheets to track these tests, which included manually copying and pasting all outstanding tests in a new sheet every week. To help with this process, they were colour-coding certain more important test. Additionally, some tests had to repeat weekly or monthly and all this information was included in the same spreadsheet cell as the patient name. To keep it short – the approach they were using was inconsistent, time-consuming, and extremely error-prone.

After meeting with our client, we learned that they want a system that looks very similar to what they have now but solves all the existing problems. They also requested a semi-automatic emailing system for notifying patients about their appointments.

Main dashboard
The main application dashboard that looks similar to the spreadsheets the client was initially using.

What we delivered

After two months of work, we presented a fully functioning and well-tested system that was able to satisfy all our client's needs. In fact, 5 other teams presented the same project but our client was most impressed with our system and decided to go ahead with the deployment.

Our system consisted out of two components: a server and a desktop application. The server is connected to the database and ensures that only authorised users can access the data, that there is no data duplication or simultaneous editing (more about this below), and that all users see up-to-date data in the application at all times. The desktop application was designed to be used by each member of staff and provides a simple interface, similar to the spreadsheets they were already used to. But unlike the spreadsheets, it has a lot of special features which makes the client's work much easier.

On the video below you can see a condensed overview of the system:

The special functionality features we implemented:

  • Prevention of simultaneous modification: If two users were allowed to edit details of the same patient or the same blood test at the same time, then they could override each others changes upon saving the data without even knowing. For example, user A starts editing a patient's name and user B starts editing the same patient's email address. Now when user A saves the new details the patient's name is updated. But because user B is still editing the details they will not see the change. Hence, when they save the patient, the patient's name will be reverted back to the original value. We prevent such events by only allowing one user to edit important details at a time.
  • Live updating: To ensure all users are working on the most recent copy of the data, the application automatically updates whenever new changes are submitted by any of the users.
  • Automatic scheduling: Once a blood test is marked complete, its next occurrence is automatically scheduled according to the interval associated with that test.
  • Backup logs: Since the system operates on sensitive data, it is crucial that administrators can trace any changes in the system to a certain user. Therefore, we implemented logging of all activity that occurs on the data. In addition, when data is deleted by a user it is actually just archived; only an administrator can then manually delete the archive to permanently delete the records.
  • Future extensions: The client wanted the system to be integrated with their current databases which was close to impossible given that they operated on highly sensitive patient information. Therefore, we designed our database to only contain basic patient details that are necessary for our application to work. Thus, we created a system that can be easily extended in the future to work with more data from the bigger hospital database.
Scheduling new test
Scheduling a new blood test.

Other useful user features:

  • Drag and drop: To change the date of a blood test, users can simply drag and drop it onto a different day. This makes the task much faster and more user friendly.
  • Quick status change: We added simple markers that notify users which tests are overdue, pending review or completed. We added a simple tick button to mark the test completed.
  • Colour-coding: Each test can have additional colour specified with it, as the client requested.
  • Semi-automatic emailing: A user can select which patients to send an email to to notify them of their overdue blood test. The system then automatically sends emails with exact details to all these patients.
  • Reports: Users can access and download various reports, e.g. how many tests are overdue, how many have been completed on time, etc.
Report generation
Generation of a yearly report.

My role

Personally, I really liked the idea of working with a real-world client so I immediately volunteered to be the spokesperson for our team. Thus, I attended all of the meeting with our client. Since our client was a nurse, I had to discuss the system with them in a non-technical way. I did this by presenting them different use cases and they would tell me what they expect to happen next.

After each meeting, I had to report all updates to our team and we had to decide which features we were going to implement in the next sprint. Naturally, everyone had their own extra ideas what our client might like and I had to reject some of those because they were not aligned to the client's wishes and to keep the project on time.

Emailing functionality
A user can select which patients to notify.

Apart from client communications and some team management tasks, I mainly worked on the server side of our system. I designed and implemented the database. I implemented the prevention of simultaneous modification principle described above, the reports functionality, and the backup logging functionality. I helped designing the user authentication mechanism and the automatic emailing system.

We also extensively tested our software. I wrote a lot of unit tests and integration tests for the code I have written to ensure there are no errors in critical parts of the system. I also helped with testing the desktop application.


Overall, this was a very fun project and I really liked working with a real client. On top of that I am also very pleased with the product we have created in about two months. Our client liked the system so much that they decided to actually deploy it and make use of it on their daily basis. The project is currently in the review process and is said to be deployed soon.

This project is open source so you can find it in our repository.