Job Openings
Full Stack Software Engineer
About the job Full Stack Software Engineer
Key Responsibilities:
- Build and maintain the web platform, including backend APIs, background job processing, database models, and the browser-based template editor used to configure OMR zones.
- Develop and maintain the desktop application that interfaces with document scanners and the cloud backend.
- Integrate scanner hardware using industry-standard drivers, SDKs, and vendor APIs to support reliable document capture, quality validation, and upload workflows.
- Integrate AI services, including LLMs for template generation, computer vision for layout detection, and OCR/ICR technologies for processing handwritten and printed responses.
- Design and optimize high-throughput processing pipelines, including job queues, concurrency management, rate-limited AI integrations, and cloud-based object storage.
- Collaborate closely with Product Managers and Operations teams to translate real-world document processing workflows into reliable software solutions.
- Maintain high engineering standards through test-driven development (TDD), strongly typed code, clean architecture, CI/CD pipelines, and comprehensive documentation.
What We're Looking For:
The fundamentals matter most. We are not prescriptive about your current technology stack. Engineers who understand core software engineering principles can quickly adapt to new frameworks and technologies.
What the fundamentals look like in practice:
- You can design a system given a set of constraints and articulate the trade-offs you made. You don't need a framework to do this.
- You understand concurrency—threads, event loops, async/await—well enough to reason about race conditions and bottlenecks, not just write await and hope.
- You write tests before you're asked to, not because it's policy, but because you've been burned by not doing it.
- You've debugged something that crossed a system boundary—a network call, an OS driver, a hardware device—and know how to work methodically when the usual tools don't apply.
What you bring:
- Solid full-stack experience—web frontend, backend APIs, and relational databases. The specific framework matters less than the depth of understanding behind it.
- Comfort building desktop applications, whether native, Electron-based, or equivalent. You understand the operational differences between shipping a web app and shipping a binary that runs on someone else's managed machine.
- Some experience (or genuine appetite for) hardware or device integration—SDKs, serial/USB interfaces, vendor APIs, and driver-level debugging. You don't need to be an embedded engineer, but you shouldn't be intimidated by it either.
- Experience integrating AI/ML APIs into production systems—not just calling an endpoint, but handling rate limits, retries, token budgets, prompt versioning, and evaluating output quality.
- Comfort with cloud infrastructure: containers, managed services, object storage, and job queues. You understand what runs where and why.
- Strong foundation in software hygiene: version control discipline, automated testing, code review, and CI/CD.
Nice to have:
- Experience with image processing pipelines (ingest, validate, transform, and store at scale).
- Prior work in the Singapore Government Tech Stack.
- Familiarity with OMR, document scanning, or similar high-throughput document processing contexts.
- TypeScript, Next.js, and C#—our current stack. Mention it if you know it, but don't let unfamiliarity stop you from applying.