Typescript / React / Node / PostgreSQL / WebSockets
Location: On-site in Copenhagen, Denmark (no full-remote option)
Level: Senior
Company: Francis
We’re building Francis: a collaborative spreadsheet for financial modeling that does the heavy lifting Excel users wish they didn’t have to. It’s fast, multiplayer, deeply expressive — and powered by a custom-built formula language under the hood.
This is not just another CRUD app. We’re building a product where performance, ergonomics, and product design all converge — in the browser, in real time, with no room for bloat.
We’re a small team of four, including two engineers. We’re looking to bring on a third engineer to help push the limits of what a browser-based spreadsheet can be.
We work in-person at our office in Copenhagen. We pair frequently, think out loud, and make technical and product decisions collaboratively. You’ll have a strong influence on everything we build.
We’re a very small team trying to be fast, deliver quality and have no bureaucracy. Despite our team size, we’re already serving hundreds of companies.
We’re looking for a full stack engineer who’s excited to:
Dive deep into real user workflows to understand their mental models and pain points.
Turn ambiguous product ideas into elegant, maintainable full-stack implementations.
Push the limits of what can be done in the browser — squeezing every bit of performance from React and the DOM.
Design APIs and backend systems that support fast, real-time collaboration.
Shape the engineering culture, architecture, and product direction as an early team member.
Solve difficult puzzles.
Help bring the most promising concepts into the hands of our users.
Design and implement full-stack features across our entire codebase.
Shape core infrastructure for our collaborative engine (WebSockets, conflict resolution, real-time sync).
Contribute to the design of our formula language — the embedded language that powers the spreadsheet (tokenizer, parser, interpreter).
Work closely with the team to deeply understand user workflows, and find elegant, product-driven technical solutions.
Tackle performance challenges in the browser, like virtualized rendering, optimizing React re-renders, multi-layer caching and algorithmic time-complexity.
Build AI-based features that actually improve the product.
Build test infrastructure and property-based tests to ensure correctness in edge cases.
To give you an idea about the type of work you’ll encounter, here are some examples of work we have done recently.
Prototyped a visual tree-based editor based on react-flow for end-user managed configuration of spreadsheets with templating/inheritance.
Real-time collaboration over websockets, with automatic conflict resolution for edits in the spreadsheet.
Commenting feature for collaboration with e-mail notifications sent to mentioned parties.
Aggressive performance optimization of the cache invalidation in our calculation engine aided by browser performance profiling.
We’re co-located in our Copenhagen office. We believe working in the same space and on the same schedule boosts productivity, learning and fun.
You’ll be shaping a technically ambitious product used by real customers every day.
You’ll work on performance-critical systems, real-time collaboration, and language design — all in the browser.
You’ll be part of a tiny, high-trust team where your work has massive impact.
You’ll be challenged and (almost surely) learn a lot.
TypeScript (across frontend and backend)
React + Redux + Tailwind CSS
Node.js + Express
PostgreSQL + Redis
WebSockets for real-time collaboration
Custom formula language designed and implemented in-house
Have solid experience building performant applications + UIs using React and Tailwind.
Love thinking in systems — performance, abstractions, tradeoffs.
Enjoy pair programming, deep technical discussions, and co-owning product decisions.
Are intrigued by the idea of building something that looks simple, but is technically ambitious under the hood.
Have a solid grasp of computer science fundamentals — data structures, algorithms, and performance tradeoffs.
Likely 5+ years of industry experience (or exceptionally motivated)
The journey
We prioritize healthy growth
We have 300+ companies using our platform
We haven’t scaled prematurely, but taken time to get it right
We're profitable
Interesting and challenging work
Competitive salary + equity
Office with great colleagues
Flexible working hours
5 weeks of paid vacation
Paid lunch
Private health insurance
Pension plan
Parental leave
If you’re curious, capable, and up for a challenge, we’d love to hear from you.
The interview process
Intro meeting: A short conversation to discuss vision, role expectations, and cultural fit.
Meeting with two co-founders: A longer discussion with leadership on strategy, design philosophy, and collaboration.
Meeting with the team: Conversation with the entire team to assess working dynamics and alignment.
Final decision: A decision is made and communicated.
This job comes with several perks and benefits