Bayesian Software 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 Software Engineers with a Bayesian statistics background to contribute to development of our models and algorithms for statistical inference and machine learning. Tasks will focus on designing, implementing, and scaling statistical procedures that are applicable to a wide class of models and embedded within a large software system.
Useful experience
Production backend software engineering
Design and implementation of probabilistic programming language features
Implementation of Bayesian inference methods such as MCMC, SMC or VI.
Statistical modeling of real-world scenarios
Constrained optimization algorithms
Functional or typed programming
Only language used in the core of our system: Julia
Can help if you don’t know Julia: Rust, OCaml, Clojure
Also useful: C++, Haskell
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, and work with others to implement them
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.