Inspiration

Every engineering team we have worked on runs into the same problem. Standups happen, sprints get planned, code gets written, but nobody really knows where the time is going or what is quietly blocking the team. Maybe it is PRs sitting unreviewed for two weeks. Maybe developers are stuck in meetings all day with no time for real work. Maybe tickets keep slipping sprint after sprint and no one knows why. We wanted to build something that actually answers these questions using data the team already creates, like commits, tickets, and calendar events, without adding any extra work.

What it does

DevLens connects to a team's GitHub, Jira, and Google Calendar through Fivetran, syncs everything into BigQuery, and gives you a live dashboard along with an AI agent you can talk to. You can see how long each open PR has been waiting for a reviewer, how many hours each developer spends on deep work versus meetings, team workload scores, sprint completion rates, and how reliably the team finishes what it commits to. You can also ask the agent simple questions like "who is the bottleneck this sprint?" or "who has room for a new ticket?" and get a clear answer backed by real data. Every tool call the agent makes shows up live in the UI, so nothing is hidden.

How we built it

We used Fivetran to keep GitHub, Jira, and Google Calendar syncing into BigQuery. On top of that, we built custom BigQuery views for each metric, including PR lag, deep work blocks, developer load scores, and completion reliability. The backend is FastAPI, using Server-Sent Events for streaming. The agent runs on Google ADK and Gemini on Vertex AI, with tools that query BigQuery directly. The frontend is Next.js with Recharts for the charts. Everything runs on Cloud Run, and state like chat history, alerts, and connector status lives in Firestore. The Fivetran and GitHub MCP servers handle all the external actions.

Challenges we ran into

Getting the data to actually mean something was the hardest part. Jira's assignee field was empty for every issue, so we had to pull developer names from a persona tag buried in the issue description using regex. Google Calendar only had one team member's data connected, so we had to handle the missing data carefully without breaking the charts. BigQuery date columns came back as strings in RFC3339 format instead of timestamps, which quietly broke our date queries until we caught it. On the infrastructure side, Docker credential handling on Windows was surprisingly painful, since the default UTF-8 encoding writes a BOM that Docker refuses to accept.

Accomplishments that we're proud of

Getting the full pipeline working end to end in a hackathon timeline felt really satisfying. We had real Fivetran connectors, real BigQuery data, and a real Gemini agent answering questions with actual numbers. We are proud of the MCP activity log that shows every tool call live in the UI. We also like the issue bridge that keeps a human in the loop, where the agent suggests a GitHub issue but never files it without approval. It felt like the right way to add AI to a team's workflow without taking human judgment out of the important decisions.

What we learned

Real data is messy in ways that demo data never is. We learned not to trust that a schema field is filled in just because it exists. We also saw how strong Fivetran is as a foundation. Having clean, structured data in BigQuery meant we could focus on the analytics and the agent instead of fighting API rate limits and auth across five different platforms. Building with Google ADK taught us to think of agents as orchestrators of data tools, not chatbots that happen to have access to a few APIs.

What's next for DevLens

We want to add Slack and PagerDuty next. Slack would let the agent notice when a conversation points to work that needs doing and draft a ticket for it. PagerDuty would add on call noise, incident hours, and late night pages to the developer load score, because burnout does not show up on a Jira board. It shows up in those 2am alerts that no one counts. The bigger goal is a weekly team health summary that the agent writes on its own and shares before the sprint retrospective, so the conversation starts with data instead of guesses.

Built With

Share this project:

Updates