Software Engineer
Posted 6 Oct 2026
Advertised as “Senior Software Engineer - GoLang (FinCore)”
BranchFactor Summary
The original posting with the fluff stripped out
- Expected experience
- 4+ yrs
- Management level
- Individual contributor
No salary listed for this role.
WE ARE BASH
Bash is South Africa's largest omnichannel shopping platform. We connect over 500 brands across the physical and digital world, for millions of South Africans, every day. We're building something with real scale and real consequence.
We're founder led, a team of true owners and humble learners. We work hard, hold a high bar, and show up for each other. The problems aren't easy and the pace is real but when you break through, the impact is felt across the business and by the customers who rely on us.
If that sounds like the kind of place where you'd do the best work of your career, we'd like to meet you.
Help build the financial backbone behind one of South Africa's largest omnichannel transformations.
The FinCore division owns the financial infrastructure and customer experiences behind payments, refunds, credit usage, tokenisation, stored value, reconciliation, and fraud. We're not a fintech incubator dabbling in ideas, and we're not a platform team quietly keeping the lights on. We own these capabilities end to end and are accountable for the systems that reliably scale across every Bash channel.
We're hiring Go Engineers
FinCore has two teams. Both own customer-facing and backend services, but they solve different problems and suit different engineers.
Payments: We own the systems that take money, reverse it, and prove afterwards that both happened correctly, across every Bash channel and every payment provider.
Wallet: We own the systems that provide customers with stored value. A balance customers can hold and spend, with or without credit.
What you'd actually work on
- Real-time, distributed systems where being correct and being fast are both non-negotiable, regardless of the system load.
- Instrumentation good enough to answer "what actually happened here, for this customer" without guessing. Every meaningful state change is its own event with its own timestamp, because the next decision reads through it.
- Payment flows where correctness is not negotiable. Authorisation, capture, refund and settlement across multiple providers, each with its own idea of what a timeout means. Retries, idempotency and partial failure are routine here, not edge cases.
- Reconciliation. Matching what we think happened against what the provider, the bank and the ledger think happened.