5a: Specialist Area 1

Last Updated: 1 min read

Description

My specialist area is full-stack JavaScript development, with a focus on building and optimising GraphQL APIs and working with relational databases like PostgreSQL — skills that go beyond basic web development. What makes this work distinct isn't just the technical complexity, but how I've applied it within an educational context to improve learner access, system performance, and platform reliability.

I transitioned into development after more than a decade in education, and that background has shaped how I build software. From 2021 to 2024, I worked as a full-stack JavaScript developer at Learnlight, a global EdTech company serving over 700,000 learners. I built and maintained its learning platform, the same one I previously used as an English language trainer. In that role, I:

  • Reduced redundant GraphQL API calls tenfold using dataloader, which significantly improved speed and efficiency for users across multiple services
  • Implemented API rate limiting using GraphQL Rate Limit Directive to ensure platform stability at scale
  • Fully replaced manual backend testing with automated tests using Postman and Mocha
  • Authored more than 40 pages of technical documentation to ensure continuity and improve team onboarding

This work combined programming, systems thinking, and user empathy to make sure that performance improvements aligned with the real needs of our learners and staff. For example, optimising backend calls wasn't just about efficiency: it helped improve access in low-bandwidth regions and reduced operational costs. Aligning technical systems with educational outcomes is what drives my development work.

My development work also includes testing, documentation, and developer workflows. I've introduced quality assurance processes that directly impacted how quickly and safely new features could be deployed, which is especially critical in always-on learning environments. I'm comfortable working across the stack, utilising React and Next.js on the front end, Node.js and PostgreSQL on the back end, and collaborating with Agile teams using tools such as Jira, Confluence, and Git.

More recently, I have applied this specialist knowledge within my role as a Learning Technologist at Imperial College London, particularly through the Digital Education Platform Project (DEPP), a major institutional review of LMS platforms (Blackboard Ultra, Brightspace, Canvas). My contribution focused on technical evaluation: assessing APIs, integration models, and accessibility compliance (for example, WCAG 2.1), and aligning these with the pedagogical and administrative requirements of different faculties.

To support this process, I created a reusable Postman collection for testing Blackboard Ultra's APIs and developed structured manual test scripts to explore functionality, identify limitations, and prepare for future automation. I ensured that the testing process remained grounded in authentic workflows and informed both technical decision-making and staff training by gathering user stories from ICT analysts and administrators.

This project became an important part of my broader knowledge-sharing activities with colleagues and the wider community. In July 2025, I published a blog post titled Using Blackboard's Swagger File to Create a Postman Collection and Make an API Call, drawing directly on DEPP testing. The post demonstrates how I adapted techniques from my previous developer role to support current institutional projects, reinforcing the link between my development expertise and my impact as a Learning Technologist.

I'm a self-taught developer, and my learning has been shaped by practical application and a strong belief in knowledge-sharing. I've completed a range of development-focused training, including:

I also maintain an active GitHub profile at github.com/Karl-Horning, where I share code for side projects and personal tooling, and a portfolio site at karlhorning.dev, which showcases my work.

Ultimately, my specialist skill set lies at the intersection of education and engineering. I develop systems that are technically sound, but always with the learner in mind. That might mean better accessibility, faster load times, clearer documentation for future contributors, or more stable APIs to support global delivery. My background allows me to navigate both pedagogical and technical challenges, and that's where I can add the most value.

Reflection

Transitioning from educator to developer has shaped not just what I build, but how and why I build it. My background in education taught me to think about systems in terms of clarity, access, and inclusion — principles I now apply in my development work. For instance, implementing performance optimisations like reducing GraphQL query duplication with dataloader wasn't only about technical efficiency. It also improved access for users in low-bandwidth regions and improved the trainer experience — an often-overlooked group who benefit just as much from responsive tools and reliable interfaces.

One challenge I've consistently faced is the inaccessibility of developer documentation. Concepts like batching and caching in GraphQL are often explained in overly abstract, text-heavy ways that don't cater to diverse learning styles. As a visual learner, I often turned to alternative resources such as video tutorials, MOOCs, and community forums to fill the gaps. These experiences shaped my approach to documentation: I now write detailed READMEs, use JSDoc consistently, and document GraphQL schemas so they're easily understood and usable in tools like GraphQL Sandbox. I've come to see documentation not just as a technical requirement, but as a way to support more inclusive learning and development.

Being self-taught has also meant navigating imposter syndrome, especially in teams made up of traditionally trained developers. Finding mentors with similar backgrounds has been difficult, and at times I've felt isolated. Community learning platforms like freeCodeCamp, YouTube, and forums have helped bridge that gap and remain essential to my ongoing development. These experiences have deepened my belief in the value of knowledge-sharing. I maintain an active GitHub profile where I try to make my repositories accessible and easy to follow, and I've recently launched a blog inspired by posts such as Our learnings from adopting GraphQL and Migrating Netflix to GraphQL safely. My goal is to reflect on development challenges and explain concepts in a way that's approachable and useful to others.

For me, development is not just a technical pursuit, but a continuation of my commitment to lifelong learning and learner empowerment — values I carry with me throughout my time in education.

Summary

  • Applied full-stack JavaScript development skills — including GraphQL, PostgreSQL, and Node.js — in an educational context to improve learner access, system performance, and reliability
  • Delivered specialist backend optimisations (for example, using dataloader and API rate limiting) to enhance platform efficiency and support learners in low-bandwidth regions
  • Introduced quality assurance practices such as automated testing and technical documentation to support safe, scalable, and maintainable feature delivery
  • Demonstrated cross-stack proficiency (React, Next.js, Node.js) while collaborating in Agile teams using industry tools such as Jira, Git, and Confluence
  • Maintained a reflective development practice through ongoing self-directed training and community engagement (for example, GitHub, online courses, developer blog)
  • Made technical systems more accessible through clear, inclusive documentation and schema design, drawing on my experience as both educator and learner
  • Bridged pedagogical and engineering mindsets to ensure that development decisions align with user needs, educational outcomes, and inclusive design principles

Evidence

Further Reading