Retext
Amazon QAI AssistantRefactoring

Amazon Q Refactoring Prompt Template

The code ends up easier to read and change while behaving exactly the same for every input, with each change explained. This version is set up for Amazon Q: name the AWS services, regions and resources involved, and paste the relevant code or configuration. Below you'll find the prompt, how to run it in Amazon Q, a worked example and answers to common questions.

Installs as a snippet — type ;refactor to paste this prompt anywhere on your Mac.
Prompt Template
Refactor the code below. The behavior must stay exactly the same.

## Code
Language: [e.g. Python 3.12]
[paste the code]

## What bothers me about it
[e.g. deep nesting, a 200-line function, duplicated logic, unclear names]

## Constraints
- Keep the public function names and signatures unchanged: [yes or no]
- Do not add new dependencies.
- Match the existing style: [e.g. type hints, no classes]

## Instructions
- Make one kind of improvement at a time (naming, extraction, simplifying conditionals) so each is easy to review.
- Do not change error messages, return values or side effects.
- If you find a bug, point it out separately. Do not silently fix it.

## Output format
1. The refactored code in full
2. A numbered list of each change and why it helps
3. Any input where you are not 100% sure the behavior is identical

Context
- Reference material: [paste it below, or attach the file]

How to use this prompt

  1. 1

    Open Amazon Q

    Open Amazon Q in your IDE or the AWS console and paste the prompt.

  2. 2

    Give it context

    Name the AWS services, regions and resources involved, and paste the relevant code or configuration.

  3. 3

    Review and iterate

    Ask follow-ups in the same chat, and test changes in a non-production account first.

Working in Amazon Q

  • •Amazon Q is built for AWS work, so name the services (for example Lambda, S3, IAM) your question involves.
  • •Never paste credentials or secret values; describe the IAM setup instead.
  • •For infrastructure changes, ask for the change as code (CloudFormation, CDK or Terraform) so you can review it.

Worked example

What you give it

Language: Python 3.12
What bothers me: too much nesting, and it is hard to see the free shipping rule.
Keep signature: yes. No new dependencies.

def shipping_cost(order):
    if order is not None:
        if order.country == "US":
            if order.total >= 50:
                return 0
            else:
                return 5
        else:
            return 15
    else:
        raise ValueError("order required")

What a good answer looks like (shortened)

1. Refactored code:
def shipping_cost(order):
    if order is None:
        raise ValueError("order required")
    if order.country != "US":
        return 15
    return 0 if order.total >= 50 else 5

2. Changes:
1. Moved the None check to the top as a guard clause, so the error case exits first.
2. Inverted the country check, which removes a level of nesting.
3. Collapsed the final if/else into a conditional expression.

3. Behavior check: identical for all inputs. Same exception, same message, same return values.

Tips for better results

  • •Be specific in "What bothers me about it." Naming one smell, like duplicated validation, gets a focused refactor instead of a rewrite.
  • •Keep the instruction to report bugs separately. Mixing bug fixes into a refactor makes the diff hard to trust.
  • •Never paste credentials or secret values; describe the IAM setup instead.
  • •Avoid this: Refactoring code that has no tests, so there is no way to confirm the behavior really stayed the same.

Get the free prompt pack

Our best coding prompts in one Markdown file, delivered by email. The templates here stay free either way — the pack just saves you the copying.

Variations

With tests first

Add this line to Instructions: Before refactoring, write tests that pin down the current behavior, then show they still pass.

Step by step

Change Output format to: Show each change as a separate before and after snippet so I can apply them one at a time.

Extract a function

Replace What bothers me with: Pull the logic for [specific task] into its own well-named function.

Save it as a Retext snippet

Retext is a free text expander for Mac. Save this prompt once, then type ;refactor in any app (ChatGPT, Claude, your editor, a browser tab) and the full prompt is pasted in.

  1. Click Add to Retext. The prompt installs as a snippet with the trigger ;refactor.
  2. Change the trigger in Retext if you prefer a different one.
  3. Type the trigger wherever you want the prompt, then fill in the brackets.

Frequently asked questions

How do I know an AI refactor did not change behavior?

Run your existing tests before and after. If there are none, ask the AI to write characterization tests against the original code first, then run them against the refactored version.

What should I leave out of the prompt?

Access keys, secrets and customer data. Describe permissions and resources by name instead.

Should I refactor a whole file at once?

Usually not. Smaller passes, one function or one kind of change at a time, are easier to review and easier to roll back if something breaks.

How do I reuse this prompt without copying it every time?

Click Add to Retext to save it as a snippet. Then type ;refactor in any Mac app, including your AI tool, and the full prompt is pasted in.

Related Templates

Get the free prompt pack

Our best coding prompts in one Markdown file, delivered by email. The templates here stay free either way — the pack just saves you the copying.