Fundamentos do Projeto
Testes técnicos são uma oportunidade de demonstrar, ainda que de forma reduzida, não só suas habilidades técnicas, mas como você trabalha no seu dia-a-dia. Partindo dessa premissa, e dos requisitos esperados de sua entrega, uma das primeiras coisas a qual me questionei foi a necessidade, ou não, de uso de um freamework para lidar com a manipulação do Canvas.
Dos dois lados, há algumas claras vantagens e desvantagens. O caminho talvez mais "natural" seria escolher entre um dos diversos frameeworks que facilitam a criação e manippulação de objetos do Canvas. Entretanto, por se tratar de um assunto tão específico, utilizar-se de um framework ainda que seja de grande ajuda, me dava a sensação de "roubar no jogo"; demonstrar que você realmente detém o conhecimento necessário pra manipular o Canvas diretamente usando sua API nativa me parecia essencial, principalmente pois não são necessárias implemsentar todas as funcionalidades específicadas.
Essa dúvida inclusive me fez lembrar do clássico meme do gráfico da distribuição gaussiana: em um projetos muito simples, o ideal é ir diretamente de Canvas, pois não há necessidade que pague o custo de um framework. Em um projeto muito complexo, na minha visão, você também deve ir nativamente com o Canvas. Quando você escolhe um framework, você está escolhendo todos os compromissos de e escolhas de design do framework, que não necessariamente vão encaixar com as suas. Por fim, em projetos com nível de complexidade média, aí sim, me parece ser mais lógico se utilizar de um framework. E - vendo de fora - me parece ser justamente esse o momento em que a Pupila está.

Isso posto, me pareceu importante demonstrar tanto a utilização do Canvas nativo quanto a manipulação utilizando-se de um framework. Dessa forma, tomei a decisão de desenvolver o projeto com dois renderers distintos, um para cada tipo.
Apesar do custo adicional da complexidade no projeto, notei que fazendo essa forma e trocando entre os renderers me permitiria validar alguns outros requisitos do projeto, como sua estrutura de dados e ate uma "emulação" de sync em realtime, já que os dois renderers tem que exibir o exato mesmo conteúdo.
Com estes fundamentos definidos, é hora de tomar as decisões que irão nos acompanhar no desenvolvimento do projeto.