The other day I had a meeting with an emergency medicine trainee who wanted to develop an app for his quality improvement project. I’ve known this guy for a while and I know that he’s smart and motivated, however, he himself acknowledged that he misjudged the approach. There were things that he just didn’t take into account which resulted in him walking away with a different plan. Despite his intelligence, years in the medical field, and hard work, it became clear that if he just went at it himself, without asking for advice he would have ended up flapping in the wind. Luckily there’s a growing community of clinicians who can also code. However, although universities like Imperial College London and University College London are offering courses in coding for their medical students the official support in the NHS isn’t there yet and will take some time. The main piece of advice I can give you in your initial stage is refining your objective.
This piece of advice can be applied to most projects even if they are not technical. However, I’m raising it because it was an issue in the meeting. Refining your objective is good in most cases but it is absolutely essential in this sense. Take my MSc thesis for example. I’m currently in the surgical robotics department and my objective is to calibrate a dynamic vision sensor so we can achieve 3D mapping. Initially, my clinical experience got the better of me and I had visions of calibrating the sensor, and then overlaying the coordinates on pre-op scans for a range of procedures so the surgeon could see where the instrument was. The first hurdle came apparent when my Mac’s screen started flashing when I connected the sensor. A few emails with the company revealed that there was a glitch and that they were working on it. Considering that they are a small company I couldn’t wait for them to sort it out, therefore I bought a Windows laptop. My timeline was extended because I had to get used to the operating system. Pip for windows was flat out terrible, and after burning weeks I had got it to run through Anaconda (something I’d never used before). I had decided to build the platform in Python (my main programming language) however, pulling data from the sensor was in Matlab (a non-open, expensive engineering language). After emailing them again, I was pointed to a few functions that were written in Python 2.7, so I had to convert them into Python 3.
Once the data was being pulled from the sensor writing code so it could be calibrated wasn’t too bad. This was the initial objective that I had. I had looked at the possibilities and practicalities and this is what made me decide that this was a project that I could pursue. But we are not out of the woods yet. The great thing about the sensor is that it only detects moving objects. However, the sensor had to be still in order to calibrate it. So I needed a set of changing objects in a matrix form that are evenly spaced. I tried pulsing light with reflective dots but this just gave too much noise. Eventually, I settled on getting a board of LEDs to flash. This meant that I could have a still sensor and still detect a grid to calibrate it. After shopping around I couldn’t find anything so I decided to buy a LED board for the Raspberry pi. I got this in the mail:
Ok, it came quickly but it had absolutely zero documentation, not even a leaflet with the product. I email them and they said that they do have some documentation but it’s not for the Raspberry pi. Time’s pressing. I have a deadline and right now the LED board is my bottleneck. I cannot even test my calibration code until I get this LED board up and running. And I doubt that I aced the calibration code first time. There will need to be some trial and error. Although it was £50 I just have to put it to one side and push forward. I then sink £100 into an Adafruit board and another LED board. This time I checked for documentation online before I bought it. I got this:
Much better quality! I started working through the documentation, however, it wasn’t working. I find out that Adafruit pulled a branch off another library and didn’t update or support it. It was very out of date. I found the LED library that was still being supported and after a whole day, I had managed to get the code running without throwing up any errors. However, nothing is showing on the LED board. There are no testing modules so I can’t work out if it’s something still hidden in the code or my terrible soldering. I’m going in to see my supervisor next week to see if he can work it out. Until then my project is on hold.
Why am I telling you this? What’s the point of the story? Partly I’m ranting, but the take home message is that in tech there are loads of technicalities that just slow you down. Solving simple problems can be like wading through mud. This hasn’t just happened here. When getting our web app off the ground, we hired server space. We picked the cheapest, and then we realized why it was cheap. Again barely any documentation. When we emailed them they just said: “look at the documentation”. That set us back a month, and we were even getting help from developers in Europe who were also stumped. If you are new and you are thinking about starting a tech project, start simple. Have one simple goal. Once you’ve achieved that start adding features.
At least every week I get a doctor emailing me saying that they want to develop a smartphone app that will solve a particular problem, and communicate with others in their team holding that app. Don’t get me wrong, I love talking to doctors who want to innovate. Always happy to reply and help. However, developing that app would require two apps coded, one for Android, one for IOS, and you’ll have to code some platform on a server that will store, send a receive data. Prepare to wade through a lot of mud.
This doesn’t mean you should give up. There are loads of things you can still do. Automate simple data storage and analysis of data in Excel files with just a few lines of code [link]. Add functions so your colleagues can use it. Automate your audits. When you get more confident, get a simple web app running in a framework like Flask or Django. You’ll soon be on a slippery slope to becoming a productive clinician who can code solutions.