Full-time · Johannesburg (hybrid) · Engineering
The app has to work in a field, on one bar of signal, with sixty thousand people around it.
Howler builds the technology behind live experience — ticketing, access control and cashless payments in one system, trusted across more than 20 countries and used by some of South Africa's biggest events: Ultra South Africa, Comic Con Africa, Black Coffee Weekender, MTN Bushfire. The mobile app is where most people meet all of it: buying the ticket, getting through the gate, paying at the bar.
We are hiring a Flutter developer, intermediate or senior, to build and improve that app. You will turn ideas into working software quickly and stay accountable for your changes from implementation through release — not through to "pull request opened".
Be clear on one thing before you apply: we are looking for software engineering accelerated by AI, not a replacement for engineering fundamentals. Both halves of that sentence are load-bearing.
The job
- Build things that hold up. Responsive, accessible interfaces and reusable Flutter components, wired to our APIs — with the loading, error, retry and offline states the product actually needs, not just the happy path.
- Keep what works, working. Deliver new features without breaking existing ones, with attention to performance, usability, security and data integrity.
- Ship in small pieces. Break work into testable increments, prototype the uncertain parts, get feedback early, then turn the approved version into maintainable production code.
- Say it before it hurts. Identify dependencies, flag risks and communicate trade-offs before they affect delivery. Work pragmatically inside the architecture we have rather than adding complexity nobody asked for.
- Own the defect. Write automated tests, take part in code reviews, and investigate faults through to resolution — thinking about device constraints, unreliable connectivity and failure modes, not only the path that works.
- Go the whole way. Work with Product, Engineering and QA to clarify acceptance criteria and agree API behaviour, then support deployment, release verification and production diagnosis.
AI proficiency — a core requirement, not a bonus line
You should already have an established workflow with an AI-enabled IDE or coding agent — Cursor, Claude Code, GitHub Copilot or similar — rather than autocomplete and the occasional prompt. Specific tooling is subject to company approval. Concretely, we will ask you about:
- Context. Giving the tool the repository context, architecture constraints, requirements and acceptance criteria before it generates anything.
- Practical use. Features, reusable components, tests, refactoring, debugging and documentation.
- Controlled agent work. Bounded tasks, inspected changes, the right checks run — not a large unreviewed diff.
- Independent understanding. You can explain, modify and debug the resulting code without the assistant to interpret it for you.
- Critical evaluation. Spotting wrong assumptions, unsuitable dependencies, weak tests and unnecessary complexity — and rejecting or correcting the output.
- Responsible use. Protecting confidential code, customer information and credentials, and following our access, review and release controls.
You remain accountable for the code you deliver. Success here means faster delivery with dependable outcomes and controlled rework — not more prompts, more generated code, or more changes nobody read.
You, ideally
- Flutter and Dart, in practice: widgets, lifecycle, layouts, navigation, null safety, asynchronous programming and streams, and interfaces that survive contact with real screen sizes and device configurations.
- Application architecture — UI, business logic and data kept apart, consistent state and dependency management, and the ability to explain a trade-off you made rather than the one a tutorial made.
- API integration and mobile data — REST and GraphQL, authentication and session expiry, errors, timeouts, local persistence, secure storage, connectivity changes, duplicate requests and stale data.
- Testing and debugging — useful unit, widget and integration tests; reproducing failures on devices or emulators; investigating crashes, rendering issues and performance regressions.
- Builds and releases — Git, pull requests, CI/CD and environment configuration, with a working understanding of signing, test distribution and mobile release workflows.
- A relevant qualification in Computer Science, Software Engineering or similar — or equivalent practical industry experience. We genuinely mean the "or", and no AI certificate is required.
- Bonus: offline-first applications and synchronisation; payments, ticketing, point-of-sale or event technology; QR/barcode scanning, NFC/RFID or Bluetooth; native Kotlin/Swift platform integrations; mobile observability, push notifications or deep links; Flutter web; or working against Ruby on Rails services. These are additional strengths, not a checklist — nobody has worked with all of them.
Intermediate or senior
Both levels need solid Flutter engineering and real AI proficiency. The difference is the scope of ownership and judgement, and we appoint against what you demonstrate rather than what your last title said.
- Intermediate. Own well-defined features inside the existing architecture, apply the team's patterns, explain your decisions, seek review as risk or complexity rises, investigate your own blockers and escalate with evidence.
- Senior. Lead complex features from discovery through release, resolve ambiguity and cross-system dependencies, shape app-level design with the Technical Lead, improve the team's reusable AI workflows and checks, and mentor without becoming a bottleneck.
This is a hands-on engineering role, not a people-management position. Senior autonomy means knowing when to consult — not going around technical, product or release decisions.
The first 90 days
The specifics are agreed at onboarding and matched to the level you come in at, but the shape is this. By 30 days you know the app, its architecture, our standards and our release process, you have an approved AI workflow, and you have shipped a reviewed improvement. By 60 you have owned a scoped feature through testing and release, with useful automated tests and an implementation you can explain. By 90 you deliver predictably inside the agreed scope and can point at one validated improvement to quality or development effort — and if you came in senior, to mentorship or a wider technical improvement as well.
Why this seat
Most mobile work is a screen in a warm office with four bars of signal. This one is judged in a field at night, on a phone that has been in someone's pocket all day, at the moment they need their ticket to scan. You will see the whole path — the ticket, the gate, the payment — and the constraints are real enough to make you a better engineer than a calmer product would.
How to show us you fit
Share an application, code sample or confidential walkthrough of something you personally built, and be ready to say which parts were yours. Shortlisted candidates do a practical Flutter assessment we supply.
Howler is an equal opportunity employer. We welcome applications from all backgrounds and are committed to building a diverse team.