---
title: "What is Prompt Engineering?"
canonical: https://wavect.io/glossary/prompt-engineering/
language: en
description: "Writing the instructions and context you send to an LLM so it produces the output you actually want. Real engineering, not a magic incantation."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

TECHNOLOGIES

# Prompt Engineering

Writing the instructions and context you send to an LLM so it produces the output you actually want. Real engineering, not a magic incantation.

Last reviewed: 2026-06-02 by [Kevin Riedl](/team/kevin-riedl/) [wiki ↗](https://www.wikidata.org/wiki/Q139796365)

Prompt engineering is the practice of structuring what you send to an [LLM](/glossary/llm/): the task description, the examples, the constraints, the output format, and the context. The model has no idea what you want until you tell it, and how you tell it changes the result dramatically. A vague prompt gets a vague answer. A precise prompt with examples and a defined output schema gets something you can actually ship.

The hype frames this as a mystical skill. The reality is more mundane and more useful: it is iterative engineering. You write a prompt, you test it against real cases, you see where it fails, you tighten the instructions or add examples, you measure again. The system prompt (the standing instructions that sit above every user message) is where most of the durable behavior lives, so that is where the real work goes.

Here is the honest part: prompt engineering is real, but it is not a career moat. The techniques are learnable in a week, and the models keep getting better at understanding sloppy prompts. What does not commoditize is knowing which problem to point the model at, wiring it into a real system, and evaluating whether the output is good enough to trust. That is engineering, and it is what we do under [Artificial Intelligence](/services/artificial-intelligence/).

Worked example of the cheap-part / expensive-part split: a team gets a demo prompt working beautifully on five hand-picked inputs, declares the feature done, and ships. In production the same prompt fails on the messy real inputs nobody tested, because there was no [RAG](/glossary/rag/) layer feeding it the right context and no evaluation harness measuring how often it was wrong. The prompt was never the hard part. Knowing the model’s [context-window](/glossary/context-window/) budget, wiring retrieval in, and measuring output quality on real cases is the work that actually ships a reliable feature. Watch for anyone selling “prompt engineering” as a standalone product: the prompt is the cheap part, and the expensive part is everything around it.

// FAQ

## FAQs

### What is prompt engineering, really?

Structuring the instructions, examples, and context you send to an LLM so it returns usable output. It is iterative testing and refinement, not a secret phrase that unlocks the model.

### Is prompt engineering a real job?

It is a real skill but a weak standalone job title. The techniques are learnable quickly, and models keep improving. The durable value is in system design and evaluation around the prompt, not the prompt alone.

### What is a system prompt?

The standing instruction set that sits above every user message and defines how the model should behave by default. Most reliable behavior is shaped here, which is why it gets the most engineering attention.

Related terms

- [LLM](/glossary/llm/)
- [RAG](/glossary/rag/)
- [Context Window](/glossary/context-window/)

Related services

- [Artificial Intelligence](/services/artificial-intelligence/)

Related case studies

- [PromptID](/case-studies/promptid/)

Related guides

- [How to choose a tech stack for an MVP](/software-development-guide/how-to-choose-a-tech-stack-for-mvp/)

Talk to us

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/glossary/prompt-engineering/#term",
      "@type": "DefinedTerm",
      "alternateName": [],
      "description": "Writing the instructions and context you send to an LLM so it produces the output you actually want. Real engineering, not a magic incantation.",
      "inDefinedTermSet": "https://wavect.io/glossary/#termset",
      "name": "Prompt Engineering",
      "termCode": "prompt-engineering",
      "url": "https://wavect.io/glossary/prompt-engineering/"
    },
    {
      "@id": "https://wavect.io/glossary/prompt-engineering/#webpage",
      "@type": "WebPage",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-06-02",
      "description": "Writing the instructions and context you send to an LLM so it produces the output you actually want. Real engineering, not a magic incantation.",
      "headline": "Prompt Engineering",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-06-02",
      "mainEntity": {
        "@id": "https://wavect.io/glossary/prompt-engineering/#term"
      },
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        {
          "@type": "Service",
          "name": "Artificial Intelligence",
          "url": "https://wavect.io/services/artificial-intelligence/"
        }
      ],
      "name": "Prompt Engineering",
      "reviewedBy": {
        "@id": "https://wavect.io/team/christof-jori/#person",
        "@type": "Person",
        "name": "Christof Jori",
        "url": "https://wavect.io/team/christof-jori/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".gls-single__h1",
          ".gls-single__tldr"
        ]
      },
      "url": "https://wavect.io/glossary/prompt-engineering/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/",
          "name": "Home",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/glossary/",
          "name": "Tech, product & engagement glossary",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/glossary/prompt-engineering/",
          "name": "Prompt Engineering",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Structuring the instructions, examples, and context you send to an LLM so it returns usable output. It is iterative testing and refinement, not a secret phrase that unlocks the model."
      },
      "name": "What is prompt engineering, really?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "It is a real skill but a weak standalone job title. The techniques are learnable quickly, and models keep improving. The durable value is in system design and evaluation around the prompt, not the prompt alone."
      },
      "name": "Is prompt engineering a real job?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The standing instruction set that sits above every user message and defines how the model should behave by default. Most reliable behavior is shaped here, which is why it gets the most engineering attention."
      },
      "name": "What is a system prompt?"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
