Duncan Nicoll

Download this CV

I'm an experienced and empathetic software engineer residing in the central belt of Scotland. I thrive in a team, working on complex problems of any scale. I also have experience in leadership roles, helping to plan and deliver features and projects, and mentoring those I work with.

EMPLOYMENT HISTORY

Staff Software Engineer @ StreamYard

May 2022 - Sept 2024

  • TypeScript/JavaScript
  • Node
  • React
  • Redux
  • FFmpeg
  • Websockets
  • Web Audio API
  • MediaRecorder
  • WebRTC
  • Hapi
  • Joi
  • Jest
  • Playwright
  • GCP
  • K8s

It was such an exciting opportunity to join a fully remote, highly-skilled, lean and fast-paced team working in an area that perfectly combined all my interests and skills. Working as a full stack engineer was a great fit for me as I thoroughly enjoy implementing features that span across the stack.

Being part of the Studio team meant that I worked on all angles of the core user-facing part of StreamYard. From the front-end, to APIs, to the streaming servers and the recording processing services. I was able to further my experience working with video and develop a strong understanding of both audio and video performance in the browser as well as audio hardware.

Projects/Feature Work

  • Working on the core studio both in terms of front-end, the APIs and post broadcast/recording features
  • Working on the recorder and streaming services
  • Working on the local recording functionality
  • Working on local recording processing
  • Deep diving into the Web Audio API and the performance in Chrome
  • Deep diving into Media Recorder performance issues
  • Being an active contributor in the testing and TypeScript guilds
  • Transitioning older features and services to TypeScript
  • Contributing in the moving of E2E tests to Playwright
  • Utilising analytics and monitoring to review and improve the performance of commonly used audio hardware
  • Leading calls with several high profile clients to support them with their technical setups and queries

Team/Culture

  • Taking part in hackathons to rapidly prototype potential avenues of new functionality
  • Contributing and participating in online team social events as well as company wide social events
  • Supporting and knowledge sharing with new team members
  • Holding an internal presentation on all things audio and how it's used in StreamYard
  • Taking part in cross team meetings to align technologies and overall direction
  • Attending in-person planning sessions for key new features
  • Being a guest on one of the weekly public Town Hall live-streams to discuss what I do / field questions
  • Being part of the small team that rapidly developed and released studio support for Instagram portrait live-streaming

Principal Software Engineer @ BBC

Nov 2021 - Apr 2022

  • TypeScript/JavaScript
  • Node
  • React
  • MobX
  • ElasticSearch
  • Java
  • FFmpeg
  • Jest
  • AWS
  • CDK
  • Step Functions
  • Lambdas
  • Microservices
  • Technical Architecture
  • Agile

Stepping into this role was an exciting challenge, taking the knowledge and skills I had built in the main Archive Services team and operating at a higher level, driving the technical direction for the next stages of the product.

  • Working closely with the Engineering Manager, the Engineering Team Lead and the Senior Technical Architect to align on technical direction and culture
  • Working closely with product, project and test colleagues to analyse, scope and plan new work
  • Pro-actively leading discussions on technical improvements
  • Owning the team's technical goals, objectives and direction
  • Diagnosing operational issues and suggesting improvements to avoid them in future
  • Enabling and sharing my knowledge with less experienced team members
  • Working collaboratively to deliver features and fix bugs

Senior Software Engineer @ BBC

Oct 2018 - Nov 2021

  • TypeScript/JavaScript
  • Node
  • React
  • MobX
  • ElasticSearch
  • Java
  • FFmpeg
  • Jest
  • AWS
  • CDK
  • Step Functions
  • Lambdas
  • Microservices

I joined the Archive Services team during its initial formation and started working on the completion of existing metadata importers. My role, responsibility and involvement quickly grew and I am proud to have been part of so many different aspects of the small team.

Projects/Feature Work

  • Key part of the squad that delivered a new and modern archive metadata integration under a fixed timescale, replacing a large and complex system being decommissioned.
  • Integral in developing the core setup, structure and design (including developer experience) of our new lambda based api with fallbacks to a legacy api to allow progressive upgrading of endpoints.
  • Driving the initial development of the infrastructure, project setup and developer experience for an event driven replacement of existing metadata and media importers including smart library sharing in a mono-repo structure.
  • Improving reliability and observability for existing metadata importers and media transcoding services.
  • Developing tools and services to process and import large volumes of data on an ad-hoc basis
  • Being part of a team to prototype future work to prove the feasibility and practicality

Team/Culture

  • Project Pairing - Throughout my time at the BBC I have paired with different members of the team. I find it so valuable as both people win and have had lots of positive feedback about my style and approach when pairing with those less experienced.
  • 10% Time Pairing - Pairing with others to prototype solutions to things that fall outside the normal work streams.
  • 10% Time - Exploring more experimental scenarios and solutions with which to use the vast amount of data and media we have on hand, with one such experiment being swiftly turned into an implementable feature.
  • Social Events - Aiding and sometimes running games and other team based events to help foster a close and fun team

Wider BBC

I thoroughly enjoy taking part in things at a wider scale for example:

  • Conferences - Both from the side of learning and networking/representing the BBC. I enjoy furthering myself through appropriate and useful conferences as well as talking to other companies and teams to share and learn.
  • Interviews - I find it both important and valuable to be a part of the interviewing process. Throughout my career I have grown my interviewing skills and I am very confident at being a useful interviewer and setting the interviewee at ease.
  • Career Fairs - I thoroughly enjoy helping out at Careers Fairs and speaking to people looking to take the next step. I find it rewarding and enjoyable to be open, honest to guide people in their path

Backend Development Team Lead @ STV

Nov 2017 - Oct 2018

  • PHP
  • MySQL
  • AWS
  • Server Administration
  • Python
  • Javascript/Node/React

In stepping up to lead the full backend team, I was met with many different types of challenges. Although I still had an active role in writing features and improving systems for the STV Player, my time was also shared across all aspects of managing the team. From facilitating PDRs, managing resources to things such as participating in high-level long term team planning sessions.

As well as overseeing the entire team, due to changes in staff, I also had the task of bringing a brand new STV Player backend team up to speed. I thoroughly enjoy skill sharing and code, systems and technologies discussions so found this very rewarding.

I thoroughly enjoyed taking charge of the Player project from a backend perspective and pushing things forwards in the direction I believe things should be moving in. In particular, increasing usage of AWS where appropriate, such as in improving the systems related to ingest of 3rd party provided video assets and metadata, gathering stats about live streams, providing simple API endpoints for small services and aiding with CI/CD.

Often I was required to make internal tooling for other departments. I really enjoyed this as it gave me the chance to flex my skills in technologies and languages that I didn't typically get to use day to day.

Lead Developer @ STV

Aug 2016 - Nov 2017

  • PHP
  • MySQL
  • AWS
  • Server Administration
  • Python
  • Javascript/Node/React

Whilst still mainly working on the STV Player and all things related to it, one of the responsibilities my position as a Lead gave me was managing a team and overseeing a stream of work. Although the team I managed was small, I enjoyed the new responsibilities the role provided. It pushed me forward and encouraged me to grow and I feel that I supported my team very well in their personal development as well as contributing to a stream of work that I didn't have a direct involvement in.

My work continued with the STV Player and I took ownership of a few large systems worked on. One such part was the Metadata system which facilitates the manipulation of the data from the CMS into metadata files which are then ingested by the always growing list of 3rd party platforms. I developed an in-depth knowledge of the various 3rd party platforms and how their systems work and thoroughly enjoyed progressing the Metadata system in order to best deliver the required information which directly benefits the consumer.

I enjoyed working with our various teams as they developed new features for the STV Player on all it's many devices. I feel that my constant interest in new technologies and their uses really aided this along with my ability to rapidly prototype. I enjoy learning from others and taking time to understand someone's point of view, especially revolving around technologies that I do not immediately have experience in. I am passionate about skill sharing and all the many benefits surrounding it.

My involvement with other activities outside of my normal tasks continued to grow and I thoroughly enjoyed every opportunity I got. I gave presentations about STV and the development team at universities, carried out several interviews and tests as part of the recruitment process and continued my involvement with the STV Children's Appeal.

Backend Developer @ STV

Aug 2014 - Aug 2016

  • PHP
  • MySQL
  • AWS
  • Server Administration
  • Python
  • Javascript/Node/React

Whilst I worked on various projects at STV, such as the General Election sub-site and improving the registration features of the site, my main stream of work was for all things STV Player related. I worked with the rest of the Player team to develop new features as per the business specifications and improve the existing codebase where appropriate. I would regularly work closely with the Frontend and Mobile teams to aid them with any Player features they would be working on.

Continually pushing myself forward, I would both adapt to and learn new and unfamiliar technologies to ensure that my skills were constantly improving and feed that back into any work undertaken.

I also thoroughly enjoyed becoming involved in other activities within the company, be it working with a visiting school group, aiding and promoting STV at a jobs fair, talking about the technologies used in the backend of the STV Player to a large group at an AWS Event in Edinburgh or getting massively involved in all aspects of the STV Children’s Appeal (be it giving up my free time to aid with some donation collection in buckets, singing Christmas songs at Silverburn or leading a group of my colleagues up a munro to raise money for The Appeal).

Lead Backend Developer @ Alienation Digital

2013 - 2014

  • PHP
  • MySQL
  • Linux Server Administration
  • Javascript

I was promoted to Lead Backend Developer after a year at Alienation Digital and whilst continuing the normal project work I also oversaw the Backend Development team and it’s direction.

Backend Developer @ Alienation Digital

2012 - 2013

  • PHP
  • MySQL
  • Linux Server Administration
  • Javascript

Working on a multitude of projects for clients. Mainly utilising Joomla but frequently writing bespoke components and extensions as well as managing deployments and servers.

Lead Developer @ Carnyx/RAR

2011 - 2012

  • PHP
  • MySQL
  • Linux Server Administration
  • Javascript

Actively developing the RAR site, adding new features, functions, sections. Providing technical support to customers.

Backend Developer @ Freelance - Fission Creative

2011

  • Wordpress
  • PHP
  • MySQL
  • Javascript

Consulting and developing on several sites.

Backend Developer @ Freelance - Planet Groucho

2009 - 2011

  • CodeIgniter
  • Wordpress
  • PHP
  • MySQL
  • Javascript
  • Actionscript
  • Flixel

Developing several sites, projects

EDUCATION

University of the West of Scotland

2003 – 2006

BSc Computer Animation & Multimedia with Distinction

Court Medal in 1st Year

SIDE PROJECTS

Stiltify

Electron/Tauri | TypeScript | Svelte | Tailwind

Working with the streaming team, StumptGamers, since 2016 has resulted in aiding them by writing several applications mainly to support their charity fundraising efforts. Stiltify is one such application that was initially written using the Electron framework but later transitioned to the Tauri framework. This allows Stumpt to authenticate via Tiltify and track their live charity campaigns via the Tiltify API as well as a bespoke API and Websocket service provided by myself. This in turn allows them to power their bespoke overlays for the stream as well as have control to run giveaways in the way they desire.

Over the years, through their charity events, Stumpt have raised over $500,000 and it's an honour to be a part of helping make that happen.

Stumptmas Winner Picker

Deno | TypeScript | Deno Deploy | Deno KV

This is a bespoke service to compliment the Stiltify tool that tracks all the donations for a given campaign in order to facilitate the Stumpt team running their giveaways.

Using Deno along with the Deno KV service accelerated the development of this and made for an enjoyable developer experience.

Stumptmas Lights

Tauri | TypeScript | Svelte | Tailwind | Deno | Docker | Govee API | SSE

A small tool that was built for the 2024 charity event to allow a few members of the Stumpt team to allow their Christmas tree lights to react to events driven by donations. A simple interface allowed them to pick what scene to display by default, when a donation larger than $25 is made and when they hit their fundraising goal. A webhook subscription was setup in Tiltify which posted any donations events to a custom secure endpoint which in turn passed that information along via Server-Sent Events to the bespoke application that controlled the Christmas lights.

FCancer Donation Bar

Svelte

I was approached by one of the founders of Tiltify to quickly put together a simple donation progress bar for a large charity event which featured several well-known celebrities. Whilst it was a tight time-scale, given it was a simple design, it was straight-forward to implement.

The event was huge success and raised over $60,000 and it was fun to see my work below several big stars.

Ignition

Lua | Playdate SDK

Josh from Intelligame approached me to develop an idea he had for a zine-reader focused on games and their impact on us and society for the fun Playdate handheld console. This lead to a exciting challenge in building an app to facilitate this as I hadn't developed for the Playdate previously and whilst being aware of Lua, hadn't extensively written in it.

Strike Editor

Typescript | Svelte | localStorage

In building the Ignition app for the Playdate, I developed a zine editor to create content for the app. This was initially to help me develop the app, to have content to render and display, but as time progressed I found value in the tool and developed it into a fully fledge online editor. It allows you to preview your articles on a virtual Playdate, it stores all article data locally and can generate a download of your articles which can be easily loaded into the Ignition app.

Operation Broken Feather Game

Godot

I was approached by friends who run a small design partnership to aid them in their exhibition they were making for the RSPB. The focus was informing people about the efforts to save Scotland's corncrakes through advocacy, land management and education. The goal for my involvement was a small, fun but educational game that informed the exhibition visitor about the best corncrake conservation practices when mowing grass/crops in fields. This was an exciting challenge to put my interest in game development into practice and resulted in a fun end result that travelled with the exhibition.

CONTACT