Back to blog
#AI #Productivity #Developer Workflow #Tools

How I Use AI to Ship 3x Faster Without Cutting Corners

AI tools haven't replaced my thinking — they've removed the parts of coding I found tedious. Here's my exact workflow: what I delegate to AI, what I never do, and how I maintain code quality while moving fast.

Muhamad Taufik Muhamad Taufik
· Nov 10, 2025 · 6 min read
AI and code on screen
React:

Many developers feel that AI coding tools are “cheating” or “will make us lazy.” I disagree. Over the last two years I’ve used various AI tools — Claude, ChatGPT, Cursor, Antigravity — and the result: I ship more, faster, with the same or better quality.

The key: knowing what to delegate to AI and what you still need to think through yourself.

What I Delegate to AI

1. Boilerplate and repetitive code

// I just describe it to AI:
// "Create a TypeScript type for a booking API response with fields:
// id, passenger_name, route_from, route_to, departure_time,
// status (pending/confirmed/cancelled), total_price"

// AI generates:
type BookingStatus = "pending" | "confirmed" | "cancelled";

interface BookingResponse {
  id: string;
  passengerName: string;
  routeFrom: string;
  routeTo: string;
  departureTime: Date;
  status: BookingStatus;
  totalPrice: number;
}

This takes 5 minutes manually, 30 seconds with AI.

2. CSS/Tailwind styling

Prompt: "Build a card component with Tailwind CSS:
- Dark background (#18181B)
- Thin border that glows on hover
- 24px padding
- rounded-xl corners
- Smooth transition"

3. Regex and string manipulation

// Prompt: "Create a function that extracts all URLs from a text string"
function extractUrls(text: string): string[] {
  const urlRegex =
    /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
  return text.match(urlRegex) || [];
}

4. Documentation and comments

AI is excellent at generating JSDoc from existing code:

/**
 * Calculates the total booking price, accounting for
 * applicable discounts and taxes.
 *
 * @param basePrice - Base ticket price
 * @param discount - Discount percentage (0-100)
 * @param taxRate - Tax rate (default: 0.11 for VAT)
 * @returns Total price after discount and tax
 */
function calculateTotalPrice(
  basePrice: number,
  discount: number,
  taxRate = 0.11,
): number {
  const discountedPrice = basePrice * (1 - discount / 100);
  return discountedPrice * (1 + taxRate);
}

What I Do NOT Delegate to AI

1. Architecture and system design decisions

“Do we need microservices or a monolith?” — you need to think this through yourself based on business context.

2. Critical business logic

Price calculations, business rules, important data validation — these require deep domain understanding. AI can get it wrong.

3. Reviewing AI-generated code

You must review every line of AI-generated code. I never paste anything without reading it first. AI can:

  • Generate syntactically correct but logically wrong code
  • Use deprecated libraries
  • Miss important edge cases

My Daily Workflow

Morning: Plan what to work on today (own brain)

Break tasks into small subtasks

For each task:
  If boilerplate/repetitive → delegate to AI
  If logic/architecture → think it through, use AI for sanity check

Review all AI output before committing

Manual testing — AI can't replace this

Tools I Use

  • Antigravity — primary editor, built-in context-aware AI
  • Claude — discussing approaches, explaining concepts, reviewing
  • ChatGPT — early brainstorming, ideation

Conclusion

AI hasn’t made me lazy. AI takes away the boring parts so I can focus on the parts that require thinking and creativity. The result: more features shipped with less burnout.

Comments (0)

Join the conversation

You need to sign in to leave a comment or reaction.

Loading comments...