What is vibe coding? Vibe coding allows you to create applications, software, and scripts (just to name a few) with natural language. It makes coding more accessible and can significantly reduce the time required to deliver an MVP. There is a huge emphasis on can. It the right hands it can be extremely powerful, while in the wrong hands it can cause you to throw your computer out a window.
Recently I had a conversation with a former colleague who said his development team would take six months to build an MVP. I told him that should no longer be the norm.
With vibe coding an MVP can happen in as little as six minutes (ok maybe not that fast), but there is a catch. You need to ask yourself some basic questions:
- Have you interpreted what your customer wants? I have found, especially in the military, that our customers do not know what is possible and we need to work with them to understand what can be delivered and how quickly it should arrive.
- Where will this service live?
- What technology stack will you use? For this it is important to understand what talent you can hire. I am use to working in a cleared environment. What can we find easily, python users. What is harder to find, Rust, Go, or Java developers.
- How will you deploy the service and on which networks will it operate?
I am leaving out other questions, such as what is your centralized identity management provider and how you plan to implement data governance and access controls.
Here is what I learned when I Vibe coded my first application.
I provided a very simple prompt, I do not remember what it was but it was something like this:
I would like a Django application with a postgres backend. Please give me a home page that has square tiles that navigate to the subsequent pages. Let us start with a form page for entering in a person’s information and a page that will query the database for results. I will deploy this using docker compose so I need it containerized.
It worked. I could run the application using docker compose, the website opened, and looked like I designed it when I was in High School. It was awful.
I then started looking around the directory structure. At this point in my career I had made several Flask and Django applications and had a structure I generally followed. This output looked like it opted for a “combined” file structure, where appeared to combine several StackOverflow posts and opted for a “Hybrid” (maybe Frankenstein is a better description) approach of making many random directories and .py,.css,and .html files.
This was not the most glaring issue. The model HARD CODED all the environment variables. The Postgres user and password were hardcoded in the docker-compose.yml and the settings.py files. It had succeeded in being a junior dev!
Here are some tips for getting started with Vibe coding for creating applications (React, Django, PGvector), scripts, and really about anything. These tips are based on the aforementioned questions.
- Specify to use a
.envand to not hardcode any environmental variables. - Tell it to enable logging. I usually start with the stdout, but everyone has their own preferences.
- If it is an application, specify to use docker and what services you need.
- Have it create a development environment, this means a requirements.txt, I always make a
docker-compose-dev.ymlthat will auto refresh application pages when I make changes. - Provide it a directory tree or have it reference an existing repo or folder to mimic.
- Provide specific documentation to follow. When I first started using CrewAI, most models struggled with custom tooling until I provided the link to CrewAI’s documentation I wanted it to follow.
- Make sure you specify any constraints, for example a python version or is this going to run in an air gapped network.
Following these tips you will have a good start within a few minutes. It will not be perfect, but with logging enabled you can find any errors you might still have. This was important for me when I was enabling Azure Entra ID for login.
Vibe coding is great but it will never be a replacement for software engineering fundamentals. It is an accelerator. I believe the engineers and data scientists who will benefit the most are the ones who already understand architecture, deployment, security, logic, and most importantly debugging. Models can generate code quickly, but there is still an art to implementing it effectively.