Program Synthesis Engineering
We're building a system that represents domain knowledge as modular probabilistic models — making analysis rigorous and transparent. Users can connect these models flexibly into larger structures. The system enforces consistency across them, and propagates uncertainty through each step. Our first applications are in finance and scientific research, with use cases ranging from equity valuation and distress monitoring, to particle physics.
We are looking for strong software engineers to build our program synthesis pipeline. You will be able to choose how close to theory or the production system you want to work, and be exposed to cutting edge research in Bayesian statistics, dynamical systems, information theory, category theory, and more.
Essential experience
Designing and implementing complex, non-standard algorithms (graph theory, path finding, custom inference, compilers)
Experience in a collaborative, commercial software engineering environment, working on large codebases and using practices like CI/CD, testing, and code reviews
Useful experience
Implementation of program synthesis frameworks
Strong foundation in computer science algorithms and data structures
Julia, or usage of some more functional or typed languages, e.g. Rust, OCaml, Clojure, C++, or Haskell
Profiling and low level performance optimisation
Mathematics, Computer Science, or Statistics advanced degree
Responsibilities
Define new features or fixes, based on awareness of overall objectives and challenges
Commit to delivering defined features or fixes end-to-end
Define implementation strategies
Leverage the expertise of other team members effectively
Write design documents for more complex problems
Write clean and performant code
Help other team members to deliver on their goals
How we work
Hierarchical goals, not personal hierarchies: We organise around a transparent tree of goals and tasks. Every quarter we plan milestone goals, which branch down into smaller and smaller tasks. This tree is the foundation of how we organise, not a side tool.
Transparency: Everyone should have access to every opportunity in the team that they can realistically handle. All goals, tasks, and the reasoning behind them are visible to everyone.
Decisions become tasks: When something is discussed and decided, it gets captured as a task in the right place in the tree, so that nothing dissipates as hot air.
Written and asynchronous by default: We are fully remote and document our learnings in writing. Communication happens transparently in shared channels, not in private threads and one-on-ones.
Growing from leaf to tree: New joiners start from smaller leaves of the tree and work themselves up to ownership of larger branches as trust and understanding build. Teams form around topics and dissolve when the work is done; people move to where they are most useful.
Want to know more?
On our website you can find more about our team and work culture, as well as example tasks that share some insight into the type of things team members are working on.
What we do: https://planting.space/
Ways of work: https://planting.space/org/
Team culture and example tasks: https://planting.space/joinus/
Our team works fully remotely, and mostly within the CET timezone.