Software Engineer I
GlobalTek BPO Inc.·Aug 2025 — Sep 2026·Makati, MM
Architecting agentic AI systems on AWS Bedrock — and the serverless plumbing that keeps the rest of engineering moving.
What I do here
- 01
Architected and shipped a RAG knowledge base service on AWS Bedrock Knowledge Bases, S3 Vectors, and a Strands-powered chat agent — letting the entire product team provision and own KBs for their own products, cutting article lookup and query time by 60–75%.
- 02
Built the intake pipeline and review agent for an automated triage system for inbound legal correspondence — an event-driven Step Functions workflow on EventBridge, SQS, Lambda and DynamoDB that ingests one document per task exactly once: idempotent by execution name, deduplicating true duplicates by content hash, with ownership-safe status claims, TTL expiry, DLQs and per-function alarms so nothing in flight is silently lost or processed twice.
- 03
Designed the review agent itself as a Strands graph: deterministic checks answer each question from the document's own wording first, and only a question still open whose answer could still change the outcome reaches Amazon Nova Pro — which answers through one tool per question, so there is no JSON to parse and an unanswered question routes to a human by default. Seven of eight real sample documents are decided without a model call at all.
- 04
Added an LLM-as-judge second pass that scores the model's reading against a weighted rubric, plus quote-provenance checking that rejects any claim the source text does not support, behind a confidence gate that converts a low-scoring auto-close into a human review — deliberately asymmetric, because a wrong close is never seen again and a wrong escalation costs one minute. Delivered with 429 unit tests at ~97% coverage and every resource defined in AWS CDK.
- 05
Built production agentic features with Strands Agents and AWS AgentCore, including a chat-based PRD assistant for Product Managers — multi-agent workflows, tool use, guardrails, and memory strategies cut PRD drafting and refinement time by 30–60%.
- 06
Integrated Bedrock foundation models across internal platforms for LLM inference and RAG, and launched an AI analytics and cost-monitoring dashboard for leadership — reducing model spend by roughly 15–25% while preserving response quality.
- 07
Shipped a UAT platform in 4–5 months, retiring Excel-based test management in favour of organized UAT projects, sessions, and scripts for product owners and project managers.
- 08
Delivered an internal sales-training transcription app in 3–4 months, turning video training content into accurate, speaker-labeled transcripts at a lower cost than self-hosted alternatives.
- 09
Prototyped agentic browser automation with AWS Nova Act and shipped Windows + macOS executables for internal R&D within 3 weeks; demoed at hackathons and onsite immersions before handing off to the production team in India.
- 10
Developed a serverless security automation system with Python, AWS Lambda, GitHub Actions, and Dependabot — routing alerts from 200+ repositories into Jira and reducing patching delays by 50%.
- 11
Built an event-driven Python integration across AWS Lambda, REST APIs, Jira, and ConnectWise, streamlining cross-system ticket creation and cutting manual handoffs by 70%.
- 12
Delivered infrastructure as code with Terraform, AWS IAM, Amazon Cognito, and CI/CD pipelines — automating repo provisioning, IAM role management, and auth workflows at 100% compliance with organizational security standards.
- 13
Developed an MCP server on Cloudflare Workers for AI-assisted ticket management workflows used across the team.
An agentic document-review pipeline
Reads inbound legal correspondence, decides whether each document needs a human, and closes the rest — deterministic checks first, a model only for what they cannot settle, and a scored confidence gate in front of every automated close.
The problem
Inbound correspondence arrives as a scanned PDF attached to a task in a case-management system, and someone has to read each one to decide whether it affects the firm's client. Most of it does not. The hard part is not classification — it is that a single document names up to three parties in the same paragraph, and the question is never “does this document describe an event”, it is “does it describe an event about us, and in which direction”.
Intake
A task-created event off a shared event bus lands on a queue and starts one Step Functions execution per task, with the execution name derived from the task so a duplicate delivery is idempotent by construction. Downstream: retrieve the document from the owning team's bucket into our own, fingerprint it, OCR it, review it, delete our copies, then stamp the outcome back on the task.
Two levels of deduplication — a claim per task, plus a per-client content-hash index that catches the same document arriving under a new ID. Ownership-safe claims, so a losing duplicate or a late catch handler cannot overwrite a real success. Nothing stays stuck: an aborted execution runs no catch handler, so a second target on the failure rule marks its claim failed rather than blocking retries for the full TTL window. And every step raises its own exception type, so the failure identity reaches the recorded status rather than being flattened into “error”.
Deciding
A Strands graph answers a fixed set of questions in order, each three-valued: yes, no, and could not tell. The third is never collapsed into a no — “the document says this did not happen” and “we could not work out whether it happened” lead to different places. Sentence-level patterns resolve direction, because reading the document as a whole gets the direction backwards on exactly the cases that matter.
Escalating
A model runs only where a question is open and the outcome is still live. Past the point where the outcome is settled there is nothing worth paying for. When a model does run it gets only the tools for the questions still open — so a question the deterministic checks already answered is not one it is able to overrule, and each question's definition lives on the tool that answers it instead of in a shared prompt. A model that writes prose instead of calling a tool leaves the question unanswered, and unanswered already routes to a person.
Trusting it
A second model pass grades the first against a weighted rubric — half on whether it identified the right party, then evidence correctness, evidence location, reasoning — and the weighting is applied inside the scoring tool rather than by the grader, because that number is what decides whether a document reaches a human. A grader that returns no score at all is scored zero, not trusted by default. Below the threshold, any automated close becomes a review.
Cleanup
Our copies of the client's document are deleted before the outcome is recorded, by object version — the bucket is versioned, and a plain delete would leave a delete marker with the content readable underneath. The source object is never touched: the handler refuses any bucket but ours and the IAM policy is scoped to it.