Amazon AWS Agentic AI SDE Interview Experience

Amazon SDE, AWS Agentic AI: recruiter screen and two technical interviews. Streaming tool call assembly, picking from hundreds of tools, a mostly-BQ round.

AmazonSoftware Development Engineer, AWS Agentic AIUpdated Oct 5, 20264 min read

Interview Experience | Agentic AI / SDE | πŸ”₯πŸ”₯ | Amazon

2026 (Sep) Software Development Engineer, AWS Agentic AI @ Amazon β€” Bellevue, WA β€” Virtual β€” 3 rounds | 😐 Neutral | Medium-Hard | Withdrew

Recruiter screen plus two technical interviews. Only the first technical interview had code. The second was almost all BQ. I was still waiting on the next step after it when my other offer hit its deadline, so I told the recruiter I was withdrawing. I never got Amazon's result.

Round 1 β€” Recruiter Screen

Short. The team builds agent creation and execution: AgentZ internally, Quick Suite externally. That is what the JD says, and she didn't add much.

She asked whether I was more comfortable in Java or Python. I said mostly Python, some Java. She also confirmed the location was Bellevue.

Round 2 β€” Technical Interview 1

The interviewer let me pick the language. I picked Python.

Coding: reassemble streamed tool calls

When a model streams, tool calls come in pieces. The input is a list of chunks, each with an index. The first chunk for an index carries id and name. Later chunks only carry a fragment of the arguments string. Chunks from different tool calls can arrive interleaved.

After the stream ends, return the full list of tool calls with arguments parsed into a dict. If one call's arguments can't be parsed, mark that one as failed and return the others as usual.

A dict keyed by index, append the argument fragments as a string, json.loads everything at the end. That part went fast.

What broke was a tool with no parameters. Its arguments come out as an empty string, json.loads("") throws, and I marked it as failed. He asked: what if the tool just doesn't take any arguments? I changed it so an empty string means {}. His two examples passed. The empty-string case was one he raised himself.

Follow-up: the arguments haven't finished arriving, and the frontend wants to show the fields that are already settled. I said keep a stack of brackets and quotes, cut at the last complete key-value pair, then close the brackets. Idea only, no code, out of time. He didn't say whether that was fine.

Picking from hundreds of tools

The second half was design. A customer can attach a lot of connectors to one agent. That can add up to hundreds of tools, and they can't all go into the prompt.

My first version: embed the tool descriptions, take the top-k against the user's message, let the model choose from those.

He asked why that isn't enough. I said different connectors have tools with almost the same name, search, create ticket and so on, and the descriptions alone don't separate them. So pick the connector first, then the tool. He asked what if the message never says which app. I said tools already used in this conversation stay in the candidate set by default.

Last question: how do you find out the candidate set dropped the right tool. I said watch for the model answering "I can't do that", or picking a clearly worse tool. He didn't pick it up and moved on.

After a prompt change

A short one. A customer edits the agent's prompt or tool list. How do you confirm the new version isn't worse.

I said replay past conversations through the old and new versions and compare, and with no labels use another model as the judge. He asked what if the judge has its own preferences. I didn't have an answer.

Round 3 β€” Technical Interview 2

After the first technical interview the recruiter said they wanted one more round. She didn't say why.

This one was basically BQ. First: a project where the requirement was one sentence and the deadline was tight. I told one, and he kept asking what exactly got cut and who agreed to cut it. I kept saying "we" and couldn't say who actually made the call. The ownership-style digging that Amazon does mostly landed here.

Second: a disagreement with someone. In my story the other person changed their mind. He asked what if they hadn't. I didn't handle that well.

The last few minutes were one technical question: what are the obvious limits of function calling today, and how would you change it. I gave three: the schema can't express constraints between parameters, ordering of parallel calls, too many tools. One sentence each. He asked me to pick the one I'd most want to fix and go deeper. I picked the first and stalled halfway through.

After this round the recruiter didn't mention feedback or say what the next step was.