Comply with ZDNET: Add us as a most well-liked supply on Google.
ZDNET’s key takeaways
- Deal with the AI like one other developer, not a magic field.
- Encode design programs and person profiles in system prompts.
- Each mounted bug turns into a everlasting lesson discovered within the challenge’s DNA.
Ever because the days of punched playing cards, I’ve self-identified as a programmer and a pc scientist. The programmer facet is the sensible facet of my engineering identification, the one who crafts code line by line. The pc scientist is the theoretician, the scientist, the strategist, and the planner.
Whereas I like the idea and science of computer systems, I’ve all the time loved the hands-on feeling of slicing code. I feel it is in all probability akin to how some woodworkers desire hand instruments over energy instruments for the visceral really feel of working with wooden.
Sadly, I’ve by no means had a lot time to code. My day-to-day job has been as an organization government, founder, educator, and author. I do love making software program merchandise, however I’ve by no means managed to get a couple of small product finished annually, utilizing little bits of obtainable nights and weekend time.
All that modified this previous September. That is after I began utilizing agentic vibe coding instruments, resembling OpenAI’s Codex and Claude Code.
Since September, I’ve constructed and shipped 4 main merchandise (WordPress safety add-ons), constructed a working iPhone app for managing 3D printer filament, and am near having a beta of an app my spouse requested for managing stitching patterns. These final two are being constructed concurrently for iPhone, iPad, Apple Watch, and Mac.
As a sole coder, agentic AI has been a power multiplier of virtually breathtaking functionality.
On this article, I will take you thru seven finest practices I exploit. These practices assist me work with AI as a accomplice, and generate merchandise of a top quality appropriate for manufacturing use. On the finish, I will additionally share a bonus finest follow that is useful extra usually than you would possibly anticipate.
That is vibe coding. Nevertheless it’s vibe coding with engineering self-discipline, and an underlying framework designed for robustness and product high quality. If you wish to use AI to construct your apps, observe these finest practices.
Major follow: Written directions
The objects listed beneath are particular, deliberate practices. Every one comes from one thing I purposely constructed into my workflow.
The best way I make these practices stick is I’ve added them to the “ini” recordsdata for the AIs, the CLAUDE.MD and AGENTS.MD recordsdata. I’ve additionally added different recordsdata used to doc the challenge itself. I will describe these in additional depth as you learn the remainder of this text.
Let’s begin with my first finest follow, codified when I discovered that agent conduct in Xcode was unreliable for a number of parallel processes.
Positively maintain studying till the top, as a result of the aforementioned bonus finest follow is usually a actual game-changer.
1. Sequential visibility over parallel velocity
The AI corporations are touting the brand new capacity to run a number of brokers in parallel. Nonetheless, it’s extremely tough to handle a number of brokers operating in parallel, particularly when you may’t see what they’re all doing.
Worse, I discovered that this method causes crashes and hangs, leaving tasks in limbo. Till this turns into a manageable and visual method, I solely wish to run one agent at a time.
Manageability should take priority over velocity, particularly when the AIs conceal a lot extra of what you’d usually see line by line if you happen to had been coding all of it your self.
My rule: “Do NOT use background brokers or background duties. Do NOT cut up into a number of brokers. Course of recordsdata ONE AT A TIME, sequentially. Replace the person usually on every step.” On this rule, “the person” is me, because it’s an instruction to the AI about its personal utilization.
Why it is elite: I discovered this the arduous manner. Claude appeared to love launching parallel brokers in Xcode. However after a number of instances when a number of parallel brokers obtained caught, turned unresponsive, needed to be killed, and left the codebase adjustments half-finished and in an indeterminant state, I obtained fed up.
The precept: I selected slower however seen over sooner however opaque. Sure, I will admit that ready for the AI can get tedious. However I will take predictability and recoverability over rash velocity each time.
2. Migration monitoring as a first-class artifact
My two Apple tasks are being constructed for 4 platforms every: Mac, iPhone, Watch, and iPad. The capabilities and interfaces of those gadgets are fairly completely different, particularly for my apps that depend on NFC (out there solely on the iPhone) and different options which are most acceptable for various platforms.
For instance, within the stitching sample app, there is a very highly effective AI element for scanning and categorizing PDFs imported from the Mac’s file system, which is a workflow much less possible for use on an iPhone.
The problem right here is that after I’m engaged on one platform, I do not wish to lose monitor of adjustments for the others. So I’ve particulars about migrating platform-wide adjustments. These particulars are particularly encoded as an artifact that may be noticed, tracked, and referenced.
My rule: “Each time you make a change to an app that might additionally must be utilized to iOS, iPad, Mac, or Watch apps, log it in Docs/IOS_CHANGES_FOR_MIGRATION.md. Embrace: date, recordsdata modified, which platforms it applies to, what particularly modified (outdated to new values, code snippets if useful), any notes about platform-specific variations accomplished and/or wanted.”
Why it is elite: I do not belief myself (or the AI) to recollect adjustments throughout periods. Throughout the AI, I constructed a structured change log that acts as a migration guidelines for bringing different platforms to parity. I exploit it as an operational instrument to forestall drift between platforms.
The precept: Each change generates a technical debt ticket for each platform it hasn’t reached but.
3. Persistent reminiscence with semantic group
Each the AI and I be taught tons when constructing these apps. Some strategies we strive fail, and others change into finest practices. As a part of the method, I’ve the AI construct a data base that’s stuffed with these learnings. For higher classification and simpler entry, I’ve the AI manage the data base by subject moderately than notes added to the underside of a log.
My rule: I’ve the AI keep a MEMORY.md that persists throughout conversations, organized by subject (not chronologically), with separate subject recordsdata for detailed notes. I gave the AI this instruction: “Replace or take away reminiscences that develop into incorrect or outdated. Don’t write duplicate reminiscences.”
Why it is elite: AI periods are stateless by default, however I wished to retain state data. Simply dumping every part right into a log file would have been messy and inefficient. As a substitute, I had the AI construct and keep a curated data base that the AI reads on startup. The data base has API signatures, scoring algorithms, format measurements, and hard-won classes (tangible examples the place it took us some time to determine learn how to make one thing work).
The precept: These classes and learnings could be utilized additional down the event path, or to sister tasks that use the identical foundational construction. Do not reinvent the wheel.
4. Immediate logging as an audit path
Against this, I additionally need the AI to log each instruction I give it chronologically. This method is an effective way to reference what was labored on beforehand, particularly after I may not return to the challenge for days and even weeks.
Moreover, this method permits us to return and see whether or not my immediate was insufficient or deceptive, or if another prompt-related issue may have triggered a fail or turned out to be a robust win.
My rule: “Each session, after studying these directions, log every person immediate to PROMPT_LOG.md. Timestamp every entry with date and time.”
Why it is elite: This method provides me (and the AI) an entire, timestamped file of each instruction I’ve ever given the AI throughout all periods. This serves a number of functions:
- I can reconstruct what occurred when one thing goes incorrect.
- I can see how a characteristic advanced via prompts.
- The AI and I can choose up precisely the place we left off.
It is model management for my collaboration with the AI.
The precept: If we won’t replay the dialog, we won’t debug the collaboration. Extra to the purpose, the method allows each of us (the AI and me) to return to reference particular directions, replay sure actions, and proper points that will have come out of unclear or incorrect prompting.
5. Consumer profile as a design constraint
My two Apple apps use related options, however have radically completely different person profiles. The filament stock challenge is supposed for technically sturdy people managing a pretty big set of 3D printers and filament sorts.
However, the stitching sample stock challenge is meant for energetic sewists with a group of a whole bunch and even 1000’s of stitching patterns. Sewists are technically succesful with specialised stitching equipment, however they have an inclination to desire extra intuitive app interfaces than the 3D printer geeks. They’re usually extraordinarily fussy concerning the high quality of their collections and their data.
As a result of I usually flip to the AI for assist with design and implementation, I discover it advantageous for the AI to know the person profiles. When the AI does one thing completely different from what a typical person could be snug with, I inform it, “remind me what the person profile is for the app.” This method forces the AI to do not forget that information and restate it to me. In doing so, the AI instantly updates its work whereas specializing in these necessities and constraints.
My rule: “My stitching sample stock customers are predominantly over 50. Many are grandparents. They usually have restricted technical expertise. They have an inclination to have massive collections with a robust ‘obtained to maintain it’ collector mentality.”
I didn’t go into the nuances of the various kinds of machines these customers know, however stored it easy as a guise for the AI. The technical complexity of what sewists can produce is usually astounding. And critically, the distinction: “The stitching app must be noticeably extra approachable than the filament app.” Sure, it is stereotypical. However stereotypical works fairly nicely with the AI’s coaching corpus. It will get the job finished.
Why it is elite: Since I used to be counting on the AI for design assist, I wished to provide it a psychological mannequin of the particular human utilizing the app. That person profile included age, technical consolation, and collector psychology, as a result of these elements affect design decisions. When the AI makes a design advice, it has a profile for the particular person the product is designed for. This setup echoes my general collaboration method — consider AI as simply one other developer on the opposite finish of a Slack channel.
The precept: Telling the AI who makes use of the software program helps it perceive learn how to construct the software program.
6. Codified design system within the challenge immediate file
As a former artistic director and designer, I understand how necessary it’s to create a design language for an organization or a product. Whereas it would look like Apple apps have their very own design language by advantage of being on Apple platforms, there’s nonetheless plenty of room for inconsistency.
To mitigate this chance, I’ve encoded the design language for the tasks proper in the principle challenge instruction file, so the AI can all the time reference it when constructing out designs. This method offers us with a really constant, engaging, and comprehensible interface that works with each replace or change throughout growth.
My rule: I embedded a whole iOS and macOS design system immediately within the CLAUDE.md essential challenge immediate file. These particulars embody particular font sizes (24pt daring for sheet titles, 15pt medium for checklist objects), precise colour RGB values, element patterns (card construction, icon badge sizing, button kinds), and named reference implementations.
Why it is elite: Each new view the AI creates routinely matches the prevailing ones as a result of the design tokens are within the system immediate and instantly out there to the AI. I haven’t got to inform it, “make it appear like the opposite views,” and hope the AI can determine what “the opposite views” appear like. The reference information means the AI has an in depth design language for all UI parts.
The precept: Design consistency should not rely on the AI’s reminiscence of what it constructed final time, or on its capacity to derive design cues from earlier implementation code.
7. Exhausting-won classes encoded as guidelines
There are a lot of, some ways for software program to fail. One of many gotchas about coding for Apple is that you just typically have to go outdoors its canned interfaces and options. For those who do this (and even typically while you code on to its design), stuff breaks.
Slightly than re-debug every part every time round, I’ve the AI encode classes discovered, particularly after an extended session of making an attempt to determine what broke. This manner, we will make it work once more later. This method is especially highly effective if the AI decides to scrap a block of code and recreate it. With classes encoded as guidelines, the AI is aware of what to not do.
My rule: Scattered all through my AI instruction recordsdata are classes from issues that went incorrect, encoded as everlasting guidelines. On the finish of each session, I inform the AI to file its learnings. The result’s a sequence of reusable directions primarily based on our growth experiences.
Listed below are some examples.
- “By no means stack greater than 4 .sheet() modifiers on the identical view on macOS.” We discovered this when a PDF picker silently failed because the seventh stacked sheet.
- “NSOpenPanel.runModal() should not be known as from inside a sheet’s onAppear.” We discovered this from a crash.
- “NEVER use .secondary, .grey, or low-opacity white for textual content” on watchOS. Instructed the AI primarily based on OLED readability testing.
- “Navigation titles use system styling (grey) to protect again button performance.” Discovered and instructed, when customized toolbar objects hid the again button.
Why it is elite: Many builders repair a bug and transfer on. My method is that after we repair a bug, we write it into the challenge DNA as a lesson. Bug fixes change into pointers and restraints that the AI should observe for the lifetime of the challenge. That manner, future periods do not expertise the identical issues. These solved issues change into encoded as growth guardrails.
The precept: Each AI mistake ought to solely occur as soon as, as a result of avoiding it turns into a guardrail rule.
Bonus finest follow: Code assessment
These seven finest practices type a system. The AI begins every session studying its reminiscence, its design system, its guidelines, and brings itself up to the mark on the migration tracker information and the learnings we fastidiously encoded. The AI logs each immediate. It really works visibly, so it is not getting caught with a number of parallel brokers operating amok. It additionally is aware of learn how to design for an actual particular person, encoded within the person profile.
Successfully, this method goes past the concept of vibe coding, the place you say stuff, and the AI makes what it desires. This method is a fastidiously designed and engineered collaboration engine extra akin to conventional software program engineering administration practices.
Talking of software program engineering administration practices, here is a bonus: use the AI for code assessment.
Once in a while, I begin up a brand new session. However earlier than the AI reads all of the directions and notes, I inform it to investigate the challenge and all its recordsdata. I ask it to flag points and issues. That manner, I get the equal of “recent eyes.” The AI usually finds little particulars that must be addressed.
Highly effective. Simple to do. Enormously efficient. What’s to not love?
Have you ever adopted any structured practices when working with AI coding instruments, or are you continue to in full vibe-coding mode?
Do you run a number of brokers in parallel, or have you ever discovered that slower, extra seen workflows produce higher outcomes? Have you ever constructed persistent reminiscence recordsdata, migration logs, or immediate audit trails into your tasks? In that case, how has that modified your output high quality?
What about design constraints and person profiles? Are you explicitly educating your AI who it is constructing for? I would love to listen to the way you’re collaborating with AI, what’s labored, what’s backfired, and whether or not you assume disciplined AI workflows actually do separate informal customers from elite builders. Remark beneath.
You may observe my day-to-day challenge updates on social media. You should definitely subscribe to my weekly replace e-newsletter, and observe me on Twitter/X at @DavidGewirtz, on Fb at Fb.com/DavidGewirtz, on Instagram at Instagram.com/DavidGewirtz, on Bluesky at @DavidGewirtz.com, and on YouTube at YouTube.com/DavidGewirtzTV.





