30 Oct
|
Skillshare
|
Montreal
30 Oct
Skillshare
Montreal
About Skillshare
Skillshare is an online learning community whose mission is to connect curious, lifelong learners everywhere - and, in so doing, build a more creative, more generous, and more prosperous world. Today, our community has grown to millions of members who come to Skillshare to learn creative and entrepreneurial skills, network with peers, and even teach a class themselves. We are backed by OMERS Growth Equity, Union Square Ventures, Spark Capital, Amasia, Spero Ventures, and Burda Principal Investments.
Skillshare is committed to building a diverse team that reflects a variety of backgrounds, perspectives, and skills. We work to ensure a consistent interview process, and inclusive work environment for all.
About the role
As an engineer at Skillshare, you'll help shape how teachers share their expertise, how students discover and watch content they love, and how our platform evolves for the future. This role sits at the foundation of our backend, including our domain model, service architecture, event backbone, and the conventions other engineers build on top of.
We work in a TypeScript monorepo built around Domain-Driven Design, hexagonal architecture, and Clean Architecture principles. Our services are built with NestJS, our API is GraphQL, our data lives in Postgres behind Prisma, and our infrastructure runs on GCP.
We're looking for someone who thinks deeply about systems and boundaries, is comfortable making and documenting architectural decisions, and can leave behind a codebase that other engineers can understand and build upon.
AI is also a core part of how our engineering team works. We use tools like Claude Code throughout the development process,
and we're looking for someone who knows how to effectively direct, review, and improve AI-generated work while remaining accountable for the architecture, quality, and end result.
What You’ll Do:
- Shape our backend architecture and domain model, defining clear bounded contexts, aggregates, domain events, and service boundaries that reflect how the business actually works.
- Build and evolve TypeScript/NestJS services using Domain-Driven Design and ports-and-adapters patterns, keeping business logic isolated from infrastructure.
- Own key backend contracts, including our GraphQL API, Postgres data models, and the patterns we use to evolve them safely as the product grows.
- Build reliable event-driven systems, designing for durability, idempotency, retries, and the realities of distributed systems.
- Use an AI coding harness as a core development tool, directing and reviewing generated code while improving the context, standards, tests, and guardrails that make AI-assisted development more effective.
- Raise the bar for engineering quality through thoughtful code review, testing, technical documentation, architecture diagrams, and explicit decision records.
- Turn ambiguous product needs into well-designed systems, partnering with product and engineering teammates to model problems, make tradeoffs, and ship meaningful work.
- Work within our weekly delivery cadence,
breaking foundational work into meaningful increments that can move from Monday goals to Friday demos.
- 8+ years of experience building backend systems in production, with deep TypeScript and Node.js experience and the judgment that comes from owning and maintaining systems you've designed.
- Deep, hands-on experience with Domain-Driven Design. You've applied DDD to real, complex domains and are comfortable defining bounded contexts, aggregate boundaries, value objects, and domain events. You understand hexagonal architecture / ports and adapters, including both the value of that separation and when the additional indirection is worth it.
- Strong experience designing and owning GraphQL APIs, including schema modeling, batching and the N+1 problem, pagination, error semantics, and evolving a live schema without breaking clients.
- Experience designing event-driven and distributed systems. You can reason concretely about at-least-once delivery, idempotency, ordering, retries, transactional boundaries, and patterns such as the transactional outbox.
- Strong relational data modeling and SQL fundamentals, including schema design, migrations against live data, indexing, transaction boundaries, and designing read and write paths intentionally.
- Experience with NestJS or significant production experience in another modern Node.js backend framework such as Fastify, Express, Hono, AdonisJS, or tRPC, with the ability to ramp quickly on NestJS.
- You’re highly proficient with AI coding tools such as Claude Code or a comparable agentic coding harness. AI isn’t occasional autocomplete in your workflow. You’re
📌 Staff Backend Engineer (Montreal)
🏢 Skillshare
📍 Montreal