
Software Engineer
Job description
About the role
Curri is seeking a Software Engineer to join the Technology team as a Product Engineer with real ownership over the problems they take on. You will be expected to dive into messy, ambiguous situations and figure out the right path forward alongside the people who live the problem every day. The role demands comfort with shifting priorities and the ability to translate unclear requirements into shipped outcomes without waiting for a perfect design document to appear. You will own the full arc of delivery inside your scope, from discovery and scoping through implementation, measurement, and iteration. Because the team operates in weekly shipping loops, you must be able to communicate clearly, move fast, and learn quickly from real user behavior. This is a role for builders who want to ship meaningful features across the stack and see the direct impact of their work on national retail and industrial supply chains.
Key facts
What you'll do
- Own engineering problems end-to-end within your scope: understand the requirement, scope a solution with your team, ship to production, and measure what it changed.
- Ship regularly in weekly loops with a clear answer to "what shipped this week and what did it tell us?" every cycle.
- Build across the full stack as the problem demands, including backend services in TypeScript, Node, Postgres, NATS, and Redis alongside UI in React and React Native.
- Use AI tooling as a daily part of your workflow, including Claude Code, Cursor, and Claude for code review, and own everything you ship with it, reviewing output critically before it lands in production.
- Leave the systems you touch better than you found them, with attention to code quality, test coverage, and maintainability.
- Get context directly from the people closest to the problem, ask scope questions early, and keep stakeholders informed rather than going dark mid-cycle.
- Translate vague requirements into shipped outcomes in a fast-paced startup environment without needing a perfectly detailed spec up front.
- Partner closely with operations and logistics partners to understand real-world constraints and ensure your solutions work in the trucks, warehouses, and stores where the work actually happens.
- Design for reliability and performance under load, thinking about edge cases, failure modes, and the user experience during peak shipping windows.
- Contribute to architectural decisions, weigh tradeoffs between speed and long-term maintainability, and mentor more junior engineers through pairing and clear code reviews.
Requirements
- 2+ years of experience building production software with a product engineer orientation: you are more comfortable with "here is the problem, go figure it out" than with perfectly-specced tickets, and you have shipped real things that real users have used.
- Working range across the full stack, including backend systems in TypeScript or Node.js and UI work in React, with the willingness to go wherever the problem leads rather than staying in one lane.
- Active use of AI tooling in your day-to-day development, whether Claude Code, Cursor, or a similar agent, with the judgment to review what it produces before it ships.
- A habit of asking hard scope questions early and communicating proactively with the people around you, rather than waiting to be told what to do or going quiet when something is unclear.
- Enough systems awareness to write code that holds up under load and think past the happy path, even if you are still building intuition for large-scale architecture.
- Comfort working in a remote-first or distributed team where async communication is the norm and you must be disciplined about clarity and follow-through.
- Experience reading and contributing to codebases that prioritize fast iteration and pragmatic tradeoffs over theoretical perfection.
- A track record of collaborating with non-engineers, including operations, logistics, and product partners, to align on goals and constraints.
Nice to have
- Shipped production code with Claude Code or a similar agent and can describe concretely where it saved you time and where it steered you wrong.
- Experience in a startup or small-team environment where you had to turn a vague requirement into a shipped outcome without much hand-holding.
- Exposure to distributed systems concepts such as message queues, caching layers, or event-driven architecture, even if you have not owned them end-to-end.
- Examples of improving a system rather than just adding to it, such as a refactor that paid off, a performance win, or a test suite that caught real bugs.
Practical notes
Hours: Full-time during standard business hours with flexibility for occasional after-hours follow-the-sun coverage.
Travel: None.
Visa: We sponsor work authorization for roles based in the United States where applicable.
Deadline: Applications are reviewed on a rolling basis until the role is filled.