BlinkR Reflections
Iāve come to realise how much I value taking stock and reflecting on a project once it reaches completionāor even an intermediate stage. So here are my reflections on the BlinkR project.
BlinkR wasnāt my first time working with Shiny, but it was the first time I worked at this scale, the first time I used modularity, and the first Shiny project that actually reached completion.
My first foray into Shiny was a project that is still ongoing (if somewhat stalled), aimed at creating a Shiny companion app for a virtual statistical textbook developed by a colleague. I spent a day learning the basics and was thrilled that I could create something useful and visually appealing within just a few hours, despite never having used the framework before.
I identified a need for BlinkR while helping to plan a new university course designed to teach medical students the fundamentals of scientific research. The goal was to help them better understand the importance of research rigour and how to critically assess other studies for integrity and trustworthiness. We hit a roadblock when it came to the analysis component: we wanted the students to carry out their own analyses, not just observe results generated behind the scenes. But how could we facilitate this?
Do we ask them to download R and RStudio on their laptops? That assumes everyone has a laptop, which isnāt always the case. Many students only bring a tabletāor even just a phoneāto class. Do we book a computer lab and pre-install everything on university machines? That felt complicated and less engaging. So I did some preliminary research: is there a way to run R virtually? The answer was yes!
So I set to work. I started with the analysis section and slowly built out the other components of the app, eventually going back to overhaul the early analysis section as well. The final product is an app that allows students to plan their experiment, gather data, analyse it, obtain results, and prepare for write-upāall within the app. Itās accessible from a smartphone, tablet, or computer. All you need is an internet connection!
Having previously dabbled in Shiny, Iād heard of modularity and liked the sound of it. I decided to build BlinkR using a modular architecture. This was my first real attempt at modularity, and Iāll admit I nearly gave up on it several times. It was tough to rethink everything Iād learned so far about Shiny to make it work with modules. As described in a public webinar by Emily Riederer, learning modules after learning the basics feels counterintuitiveāand it is. But I can confirm that persevering was absolutely worth it. BlinkR became a large, complex app, and I shudder to think how chaotic and confusing it wouldāve been had I stuck to the traditional ui.R
and server.R
structure. Some of the longer modules (which themselves contain nested modules) are over 1,000 lines long. A traditional structure would have meant managing a 10,000-line script. No thank you.
Once the analysis section was āgood enoughā to be used, we trialled it with a class. Yes, there were some hiccups, but the overall feedback delighted me. They thought it was fun! They thought it was cool! They thought it was useful! That spurred me on to continueāironing out bugs and adding features to improve the student experience.
While I initially developed BlinkR for a specific course and audience, I always had a broader vision: to make it available to other educators. To support different experiments of similar design (e.g., comparing two groups), I took on the very tediousābut ultimately rewardingātask of replacing all hardcoded variables with dynamic ones that educators can define before deploying the app. This really stretched my thinking, as I had to consider how each variable was used across the UI, code editors, and server logic.
Hereās the bottom line: I learned the basics of Shiny in a day, but then took that knowledge apart to re-learn it at a more intermediate level (i.e., modules) in order to create something Iād never imagined I could. I became truly passionate about this project and genuinely enjoyed every second of it.
Iām incredibly proud of BlinkR and of everything I learned while building it. Without any formal education in coding or software development, Iāve come at this sidewaysālearning through trial and error. Itās pushed me to think deeply about the consequences of changing a module and how that affects the broader web of connections throughout the app. For me, BlinkR has been a creative project, one filled with problem-solving, discovery, and joy.
If youāre an expert developer reading this, you might think this is small potatoesāthat āanyone can do this.ā If thatās the case, then youāre lucky to have learned so much already. If youāre a beginner, like I was not long ago, remember: nobody wakes up just knowing things. Sometimes learning is easy, and sometimes itās frustrating. Give yourself grace and take the time you need. Is it frustrating? Absolutely. Is it worth it? Only if you care about what youāre doing. And if youāre not passionate about āitāāwhether thatās the project or the skills youāre gainingāthen donāt do it. Iām not trying to sound preachyāI just want to reassure anyone reading this: if I can do it, so can you. And maybe, in a few months, youāll reflect on what youāve learned, too. If you do, Iād love to read your reflectionāwhatever your project. Feel free to drop me a line.
Finally, the denouement of this reflection: am I a Shiny expert now? Probably not. But I would consider myself an advanced user. I look forward to building on what Iāve learned and working on fun, creative projects that challenge and frustrate meāand spark both passion and creativity in equal measure.