As a young company in an extremely competitive space with many engineering challenges, we strive to do our best to set ourselves up for success.

Check out our available roles at Careers at Picnic.

Our stack in a nutshell

Our development philosophy

Most of the decisions we make in terms of architecture and tooling are driven by whether they can allow us to make small experiments often, without fear of breaking existing code.

All of our code is written in TypeScript. We lean heavily on the type safety guarantees this provides, as well as the nice developer experience improvements like smart code completion and automatic renaming. We also heavily rely on zod for runtime type checking, mainly to ensure that any persisted data remains backwards compatible, and we share these types between the client and the server.

Untitled

By only using a single language, we can truly lean into its more sophisticated features, and can ensure that no developer is siloed by their language of choice: every engineer can touch every single part of the stack with confidence.

We strongly believe that organising our code in well-defined "shearing layers" allows us to focus our efforts, and constrains our technology choices: we're aiming to build a solid, stable core that rarely needs to be touched, surrounded by layers that will change more frequently (sometimes several times in a day!). For the core, we choose technologies that are "boring" and battle-tested, such as PostgreSQL, SQLite and Redis, but we're not afraid to try experimental new libraries and approaches for the outermost layers, since these are likely to change soon anyway.

Our approach to testing follows this structure: our core is tested comprehensively with unit and integration tests, since it is critical to the functioning of the entire system. The outer layers (eg. most of our UI code) are mostly tested manually. We'd love to automate more of this, but since we're still a tiny team and our product is still changing rapidly, we don’t aim for full test coverage.

If you’d like to read more about our reasoning behind this approach, please take a look at:

Picnic Engineering Philosophy

App

We believe reactive programming is the most powerful approach for writing highly dynamic and stateful UI code.