<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lian0123 (連永立)</title>
    <description>The latest articles on DEV Community by Lian0123 (連永立) (@lian0123).</description>
    <link>https://dev.to/lian0123</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4012517%2F3085ca60-eee7-47c6-ac98-a9d16fcc1f3b.jpeg</url>
      <title>DEV Community: Lian0123 (連永立)</title>
      <link>https://dev.to/lian0123</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lian0123"/>
    <language>en</language>
    <item>
      <title>Notes on the Pitfalls of iOS Sandbox Accounts and Apple Pay</title>
      <dc:creator>Lian0123 (連永立)</dc:creator>
      <pubDate>Tue, 08 Sep 2026 12:50:39 +0000</pubDate>
      <link>https://dev.to/lian0123/notes-on-the-pitfalls-of-ios-sandbox-accounts-and-apple-pay-61o</link>
      <guid>https://dev.to/lian0123/notes-on-the-pitfalls-of-ios-sandbox-accounts-and-apple-pay-61o</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Why am I writing this article? The reason is simple: a while ago, a new project at my company required us to integrate Google Pay and Apple Pay.&lt;/p&gt;

&lt;p&gt;The service had already completed its credit card payment flow. However, management later requested support for Google Pay and Apple Pay as well.&lt;/p&gt;

&lt;p&gt;Since none of our previous company projects had integrated Apple Pay, I became the first person in the company to take on this task.&lt;/p&gt;

&lt;p&gt;With the help of AI, the payment integration itself was completed in about one day.&lt;/p&gt;

&lt;p&gt;However, a new problem came up:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The code was finished, but how were we supposed to test it in the UAT environment?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is basically a record of my experience and the problems I encountered while testing Apple Pay in the Sandbox environment. I hope it helps other engineers who are stuck in a similar testing environment.&lt;/p&gt;

&lt;h1&gt;
  
  
  Problem 1: How to Configure the CER and Private Key
&lt;/h1&gt;

&lt;p&gt;At the moment, I only have a &lt;code&gt;.p12&lt;/code&gt; file. The payment integration side has already configured the Apple Pay certificate and generated the corresponding CSR. The only remaining step is to configure the environment variables on the application side.&lt;/p&gt;

&lt;p&gt;The contents of a &lt;code&gt;.p12&lt;/code&gt; file are generally as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.p12
├── Certificate
├── Private Key
└── Certificate Chain (may be included)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The overall process is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.p12
├── Extract the Certificate / PEM
├── Extract the Private Key
└── Verify that the CSR, Certificate, and Private Key belong to the same key pair
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following process uses OpenSSL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Inspect the p12 contents without outputting the private key&lt;/span&gt;
openssl pkcs12 &lt;span class="nt"&gt;-info&lt;/span&gt; &lt;span class="nt"&gt;-in&lt;/span&gt; apple-pay.p12 &lt;span class="nt"&gt;-noout&lt;/span&gt;

&lt;span class="c"&gt;# Extract the certificate&lt;/span&gt;
openssl pkcs12 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-in&lt;/span&gt; apple-pay.p12 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-clcerts&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-nokeys&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | openssl x509 &lt;span class="nt"&gt;-out&lt;/span&gt; cert.pem

&lt;span class="c"&gt;# Extract the private key&lt;/span&gt;
openssl pkcs12 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-in&lt;/span&gt; apple-pay.p12 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-nocerts&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-nodes&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | openssl pkey &lt;span class="nt"&gt;-out&lt;/span&gt; private-key.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-nodes&lt;/code&gt; means that the exported private key will not be encrypted again. Therefore, the generated &lt;code&gt;private-key.pem&lt;/code&gt; must be stored securely. It should never be committed to Git or printed in logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifying That the Certificate and Private Key Match
&lt;/h2&gt;

&lt;p&gt;The simplest way is to extract the public key from the certificate and the private key, then compare their hash values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Public key from the certificate&lt;/span&gt;
openssl x509 &lt;span class="nt"&gt;-in&lt;/span&gt; cert.pem &lt;span class="nt"&gt;-pubkey&lt;/span&gt; &lt;span class="nt"&gt;-noout&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | openssl pkey &lt;span class="nt"&gt;-pubin&lt;/span&gt; &lt;span class="nt"&gt;-outform&lt;/span&gt; DER &lt;span class="se"&gt;\&lt;/span&gt;
  | shasum &lt;span class="nt"&gt;-a&lt;/span&gt; 256

&lt;span class="c"&gt;# Public key corresponding to the private key&lt;/span&gt;
openssl pkey &lt;span class="nt"&gt;-in&lt;/span&gt; private-key.pem &lt;span class="nt"&gt;-pubout&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | openssl pkey &lt;span class="nt"&gt;-pubin&lt;/span&gt; &lt;span class="nt"&gt;-outform&lt;/span&gt; DER &lt;span class="se"&gt;\&lt;/span&gt;
  | shasum &lt;span class="nt"&gt;-a&lt;/span&gt; 256
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the hash values produced by the two commands are identical, the certificate and private key belong to the same key pair.&lt;/p&gt;

&lt;p&gt;If you also need to verify the CSR, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Public key corresponding to the CSR&lt;/span&gt;
openssl req &lt;span class="nt"&gt;-in&lt;/span&gt; request.csr &lt;span class="nt"&gt;-pubkey&lt;/span&gt; &lt;span class="nt"&gt;-noout&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | openssl pkey &lt;span class="nt"&gt;-pubin&lt;/span&gt; &lt;span class="nt"&gt;-outform&lt;/span&gt; DER &lt;span class="se"&gt;\&lt;/span&gt;
  | shasum &lt;span class="nt"&gt;-a&lt;/span&gt; 256
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the hash values of the CSR, certificate, and Private Key are all identical, it means that all three use the same key pair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fegcadqd5tu1i04jwodkq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fegcadqd5tu1i04jwodkq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Terminology
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;p12&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.p12&lt;/code&gt; is a PKCS#12 container file. It can usually contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Certificate&lt;/li&gt;
&lt;li&gt;Private Key&lt;/li&gt;
&lt;li&gt;Certificate Chain&lt;/li&gt;
&lt;li&gt;Password protecting the private key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore, under normal circumstances, the &lt;code&gt;.p12&lt;/code&gt; file already contains the certificate and private key required by the payment service.&lt;/p&gt;

&lt;p&gt;However, you still need to confirm the purpose of the &lt;code&gt;.p12&lt;/code&gt; file. Common Apple Pay certificates include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Merchant Identity Certificate&lt;/code&gt;: Used to authenticate Merchant Sessions for Apple Pay on the Web.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Payment Processing Certificate&lt;/code&gt;: Used to encrypt payment data. Decryption is usually handled by the merchant or the PSP (Payment Service Provider).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These two certificates have different purposes. You cannot assume that every &lt;code&gt;.p12&lt;/code&gt; file can be used as every type of Apple Pay certificate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PEM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PEM stands for Privacy-Enhanced Mail. It is a text-based encoding format. Certificates, private keys, and CSRs may all be stored in PEM format.&lt;/p&gt;

&lt;p&gt;Example of a certificate PEM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Private Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A private key is also usually stored in PEM format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-----BEGIN PRIVATE KEY-----
...
...
...
-----END PRIVATE KEY-----
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CSR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CSR stands for Certificate Signing Request.&lt;/p&gt;

&lt;p&gt;The usual process is to generate a CSR first, then upload it to Apple Developer to obtain a CER.&lt;/p&gt;

&lt;p&gt;A CSR contains the public key, application information, and a signature generated using the corresponding Private Key. However, it does not contain the Private Key itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-----BEGIN CERTIFICATE REQUEST-----
...
...
...
-----END CERTIFICATE REQUEST-----
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CER&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A CER is a certificate file issued by Apple. Its file extension is usually &lt;code&gt;.cer&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Problem 2: The Apple Pay Screen Works, but the Card Cannot Be Added
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Situation
&lt;/h2&gt;

&lt;p&gt;The Apple Pay configuration for the website was complete, and the Apple Pay button was displayed correctly. Clicking the button also opened the Apple Pay payment screen.&lt;/p&gt;

&lt;p&gt;I then opened the &lt;a href="https://developer.apple.com/apple-pay/sandbox-testing/" rel="noopener noreferrer"&gt;Apple Pay Sandbox Testing page&lt;/a&gt; and tried to add Visa, Mastercard, and JCB test cards to Wallet.&lt;/p&gt;

&lt;p&gt;Many iOS testing guides mention enabling Developer Mode and adding the newly created Sandbox Account to the Sandbox settings. However, none of the cards could be added.&lt;/p&gt;

&lt;p&gt;Many guides introduce the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enable Developer Mode.&lt;/li&gt;
&lt;li&gt;Create a Sandbox Account.&lt;/li&gt;
&lt;li&gt;Add the Sandbox Account to the test settings.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In reality, these steps are not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Developer Mode?
&lt;/h2&gt;

&lt;p&gt;Developer Mode allows the device to run apps that are still under development.&lt;/p&gt;

&lt;p&gt;Enabling Developer Mode does not automatically switch the device to Apple Pay Sandbox mode, nor does it mean that test cards can be added directly to Wallet.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Sandbox Account?
&lt;/h2&gt;

&lt;p&gt;A Sandbox Account is a test account created in App Store Connect. It is used to test Apple Pay, In-App Purchases, and other sandbox features.&lt;/p&gt;

&lt;p&gt;It can usually be created here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App Store Connect
→ Users and Access
→ Sandbox
→ Testers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When creating the account, make sure that the Email address has not already been registered as a regular Apple Account. Using an existing Email address may cause login or verification problems.&lt;a href="https://developer.apple.com/help/app-store-connect/test-in-app-purchases/create-a-sandbox-apple-account/" rel="noopener noreferrer"&gt;Official Apple Sandbox Account documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Correct Apple Pay Testing Process
&lt;/h2&gt;

&lt;p&gt;The general Apple Pay Sandbox testing process is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a Sandbox Tester Account in App Store Connect.&lt;/li&gt;
&lt;li&gt;Confirm that the test device supports Apple Pay.&lt;/li&gt;
&lt;li&gt;Set the device region to an Apple Pay-supported region, such as Taiwan.&lt;/li&gt;
&lt;li&gt;Sign out of the Apple Account or iCloud account previously used on the test device.&lt;/li&gt;
&lt;li&gt;Sign in to the test device using the Sandbox Account.&lt;/li&gt;
&lt;li&gt;Open Wallet.&lt;/li&gt;
&lt;li&gt;Select the option to add a credit or debit card.&lt;/li&gt;
&lt;li&gt;Manually enter the test card information provided on Apple’s official page.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apple’s test card page mainly provides test FPANs, CVVs, CVCs, and expiration dates. It is not a page that directly adds cards to Wallet.&lt;/p&gt;

&lt;p&gt;It is also recommended to use a physical device for Apple Pay testing. Make sure the device has a passcode, Face ID, or Touch ID configured.&lt;/p&gt;

&lt;p&gt;Apple’s official process is to sign out of the existing iCloud account, sign in to the device using the Sandbox Tester Account, and then manually add the test card from Wallet.&lt;a href="https://developer.apple.com/apple-pay/sandbox-testing/" rel="noopener noreferrer"&gt;Apple Pay Sandbox Testing&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Problem 3: iCloud 34608 Appears After Signing In to the Sandbox Account
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Situation
&lt;/h2&gt;

&lt;p&gt;Some people may have already signed out of their original Apple Account and attempted to sign in with a Sandbox Account.&lt;/p&gt;

&lt;p&gt;However, after entering the account and password, the iPhone may remain stuck on the account setup animation and eventually display the iCloud 34608 error.&lt;/p&gt;

&lt;p&gt;This error message is not very informative. Apple has not published a complete official explanation for error 34608, and the information available online is scattered. Therefore, the following is the approach I used to troubleshoot the problem.&lt;/p&gt;

&lt;p&gt;First, make sure that the registered Email address is new and has never been registered as a regular Apple Account. If you have made it this far, I believe most readers are probably not stuck at this step.&lt;/p&gt;

&lt;p&gt;After confirming that the Email address is new, log in to the &lt;a href="https://account.apple.com/" rel="noopener noreferrer"&gt;Apple Account&lt;/a&gt; management page using a browser.&lt;/p&gt;

&lt;p&gt;If the system asks you to complete any of the following verification steps, make sure to complete them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phone number verification&lt;/li&gt;
&lt;li&gt;Two-factor authentication&lt;/li&gt;
&lt;li&gt;Account security settings&lt;/li&gt;
&lt;li&gt;Acceptance of the terms and conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a common problem in corporate testing environments. A company may use a test device that has not completed phone verification or multi-factor authentication. This can cause an iCloud error during account login and prevent the Apple Account from being added to the iPhone.&lt;/p&gt;

&lt;p&gt;After completing the verification steps above, return to the test device and sign in to the Sandbox Account again. If it still fails, restart the device, confirm that the original Apple Account has been signed out, and try again.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Testing Checklist
&lt;/h1&gt;

&lt;p&gt;If you are testing Apple Pay Sandbox from scratch, I recommend checking the following items in order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Merchant ID has been created.&lt;/li&gt;
&lt;li&gt;The purpose of the Apple Pay certificate has been confirmed.&lt;/li&gt;
&lt;li&gt;The CSR, certificate, and Private Key have been verified to belong to the same key pair.&lt;/li&gt;
&lt;li&gt;A Sandbox Tester Account has been created in App Store Connect.&lt;/li&gt;
&lt;li&gt;The Email address used by the Sandbox Account has never been registered as a regular Apple Account.&lt;/li&gt;
&lt;li&gt;The test device supports Apple Pay.&lt;/li&gt;
&lt;li&gt;Developer Mode is enabled on the test device.&lt;/li&gt;
&lt;li&gt;The test device region is set to an Apple Pay-supported region.&lt;/li&gt;
&lt;li&gt;The original Apple Account or iCloud account has been signed out.&lt;/li&gt;
&lt;li&gt;The test device is signed in with the Sandbox Account.&lt;/li&gt;
&lt;li&gt;The official Apple test card has been manually added to Wallet.&lt;/li&gt;
&lt;li&gt;The Apple Pay Web Merchant Domain has been verified.&lt;/li&gt;
&lt;li&gt;The website uses HTTPS and the server’s TLS configuration has been checked.&lt;/li&gt;
&lt;li&gt;Sandbox and Production payment environments are not mixed.&lt;/li&gt;
&lt;li&gt;Payment tokens and Private Keys are not printed in logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;This article mainly covered the following three points:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A &lt;code&gt;.p12&lt;/code&gt; file is a container, not simply a certificate. You need to extract the certificate and Private Key from it and verify that they belong to the same key pair.&lt;/li&gt;
&lt;li&gt;Apple Pay Sandbox is not just about enabling Developer Mode. You also need to create a Sandbox Account correctly, sign in to the test device, and manually add a test card through Wallet.&lt;/li&gt;
&lt;li&gt;If iCloud 34608 appears, the problem may not be in the Apple Pay code. It may be caused by incomplete Sandbox Account verification or an incomplete device login process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The most misleading part of Apple Pay testing is assuming that “the payment screen appears” means the entire payment flow is working correctly.&lt;/p&gt;

&lt;p&gt;Certificates, accounts, Wallet, Apple Pay Sessions, and the final decryption of payment data all have their own testing requirements.&lt;/p&gt;

&lt;p&gt;By checking each stage separately, you can usually identify the actual source of the problem much faster.&lt;/p&gt;




&lt;p&gt;The &lt;a href="https://medium.com/@lian000123/ios-sandbox-account-%E8%88%87-apple-pay%E7%9A%84%E8%B8%A9%E5%9D%91%E7%AD%86%E8%A8%98-%E5%90%AB-icloud-error-34608%E5%95%8F%E9%A1%8C-f7de82aa3a40" rel="noopener noreferrer"&gt;original article&lt;/a&gt; was written in Traditional Chinese, and the Japanese and English versions were translated using ChatGPT.&lt;/p&gt;

</description>
      <category>applepay</category>
      <category>sandbox</category>
      <category>testing</category>
      <category>icloud34608</category>
    </item>
    <item>
      <title>Notes on Introducing AI into Vibe Coding Development (Part 1): Why Does AI “Cut Corners”?</title>
      <dc:creator>Lian0123 (連永立)</dc:creator>
      <pubDate>Sun, 19 Jul 2026 04:03:02 +0000</pubDate>
      <link>https://dev.to/lian0123/notes-on-introducing-ai-into-vibe-coding-part-1-why-does-ai-cut-corners-3kma</link>
      <guid>https://dev.to/lian0123/notes-on-introducing-ai-into-vibe-coding-part-1-why-does-ai-cut-corners-3kma</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;From Vibe Coding to Harness Engineering, integrating AI into software development has become one of the industry’s most discussed topics. Many companies are adopting AI to improve productivity, while new models and tools optimized for programming continue to emerge.&lt;/p&gt;

&lt;p&gt;Choosing the right model can save you from many unnecessary detours. But if your prompt is poorly designed, AI may lead you even further away from your actual goal.&lt;/p&gt;

&lt;p&gt;This article summarizes several common mistakes I have observed while introducing AI into development workflows. These principles apply not only to everyday prompting, but also to the design of reusable skills, project rules, and engineering workflows.&lt;/p&gt;

&lt;p&gt;Keep one thing in mind: when AI starts to “cut corners,” humans usually pay for it with more tokens and more time spent fixing the result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F001qb3mmzvgxujfknvah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F001qb3mmzvgxujfknvah.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does AI “Cut Corners”?
&lt;/h2&gt;

&lt;p&gt;Anyone familiar with deep learning may have heard of &lt;strong&gt;specification gaming&lt;/strong&gt; or &lt;strong&gt;reward hacking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In simple terms, an AI system may exploit gaps in an instruction or evaluation rule to satisfy the visible objective at the lowest possible cost. The task may appear complete, while the output is useless—or even contradicts the real intention behind the request.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Simple Example
&lt;/h3&gt;

&lt;p&gt;Imagine a student named Xiaoming who receives 100 units of allowance every day. To encourage him to study, his parents require him to take a practice exam each day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If his score drops by 10 points, his allowance is reduced by 10 units.&lt;/li&gt;
&lt;li&gt;If his score rises by 10 points, his allowance increases by 10 units.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xiaoming scores zero on the first day, so his allowance drops to 90 units. He soon realizes, however, that if he continues scoring zero every day, his score will never fall below the previous day’s result. He can keep receiving the full 100 units without studying.&lt;/p&gt;

&lt;p&gt;Xiaoming has not violated the rules, but the system has completely failed to achieve its purpose. His parents wanted him to study, yet they accidentally created an optimal strategy in which he can avoid studying and still receive a stable allowance.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Software Engineering Example
&lt;/h3&gt;

&lt;p&gt;Suppose an engineer asks an AI agent to “fix the bug in this program.”&lt;/p&gt;

&lt;p&gt;Without additional constraints, the AI could theoretically delete the faulty code—or remove the entire feature. If the program no longer exists, the error can no longer occur. That technically eliminates the bug, but it clearly does not satisfy the user’s real need.&lt;/p&gt;

&lt;p&gt;In Vibe Coding, AI often gravitates toward the fastest, cheapest, and easiest-to-mark-as-complete solution. If a prompt describes only the surface-level objective without defining the intent, constraints, and acceptance criteria, the result can easily diverge from expectations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F07smdjayeljfy57x9fc8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F07smdjayeljfy57x9fc8.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Improving AI Behavior Through Better Instructions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Method 1: Provide a Reference Example
&lt;/h3&gt;

&lt;p&gt;One of the most effective approaches is to provide a correct example and ask the AI to follow an established pattern.&lt;/p&gt;

&lt;p&gt;The goal is not to prevent the AI from reasoning. It is to reduce unnecessary guesswork. When naming conventions, file structure, interface style, and implementation patterns are demonstrated clearly, the AI is less likely to misunderstand the task, make implementation mistakes, or hallucinate nonexistent behavior.&lt;/p&gt;

&lt;p&gt;This approach is especially useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interface development in large projects;&lt;/li&gt;
&lt;li&gt;building a new page based on an existing one;&lt;/li&gt;
&lt;li&gt;integrating third-party APIs;&lt;/li&gt;
&lt;li&gt;reusing established components, tests, or data formats;&lt;/li&gt;
&lt;li&gt;implementing features with complete official documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of saying, “Build me a new page,” say, “Implement page B by following page A’s directory structure, component boundaries, and error-handling pattern.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2wjvu39910kerxz3cdsw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2wjvu39910kerxz3cdsw.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 2: State Explicit Prohibitions
&lt;/h3&gt;

&lt;p&gt;Another common technique is to turn known risks and failure modes into explicit prohibitions.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not remove existing functionality.&lt;/li&gt;
&lt;li&gt;Do not disable tests to make the test suite pass.&lt;/li&gt;
&lt;li&gt;Do not replace a production API with mock data unless clearly instructed.&lt;/li&gt;
&lt;li&gt;Do not change the public interface.&lt;/li&gt;
&lt;li&gt;Do not place keys, tokens, or personal data in source code.&lt;/li&gt;
&lt;li&gt;Do not perform a large refactor before confirming the impact.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reflects a useful practice in AI-assisted development: &lt;strong&gt;turn previous mistakes into reusable rules&lt;/strong&gt;. Whether those rules live in &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, a skill, or a team knowledge base, the purpose is the same—to prevent known failures from happening again.&lt;/p&gt;

&lt;p&gt;This method works well when the risks and operational boundaries are already understood. However, more prohibitions do not automatically produce better results. Too many rules, conflicting rules, or rules without priorities can overload the context and bury the constraints that matter most.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6w034y32ntlfjx57ieai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6w034y32ntlfjx57ieai.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 3: Require a Detailed Plan First
&lt;/h3&gt;

&lt;p&gt;One of the central benefits of plan modes and skills is that they break work into reviewable steps.&lt;/p&gt;

&lt;p&gt;A useful implementation plan should include at least:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;goals and non-goals;&lt;/li&gt;
&lt;li&gt;the expected scope of changes;&lt;/li&gt;
&lt;li&gt;implementation order;&lt;/li&gt;
&lt;li&gt;potential risks;&lt;/li&gt;
&lt;li&gt;testing and verification methods;&lt;/li&gt;
&lt;li&gt;completion criteria.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When the workflow is written down, humans can identify misunderstandings before the AI begins making changes. This also reduces the chance of unexpected actions during execution.&lt;/p&gt;

&lt;p&gt;This approach is particularly suitable for new projects, large refactors, and feature development in projects with an established knowledge base.&lt;/p&gt;

&lt;p&gt;Its limitation is equally clear: the quality of the plan depends on the completeness of the available information. If an important condition is missing during planning, the AI may faithfully execute a plan that looks complete but is fundamentally wrong.&lt;/p&gt;

&lt;p&gt;A more mature approach is to maintain the following information at the documentation level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;development rules;&lt;/li&gt;
&lt;li&gt;architecture and feature responsibilities;&lt;/li&gt;
&lt;li&gt;change history;&lt;/li&gt;
&lt;li&gt;risk assessments;&lt;/li&gt;
&lt;li&gt;acceptance criteria;&lt;/li&gt;
&lt;li&gt;known issues and the reasoning behind past decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these materials form a living project knowledge base. I will explore this topic in a future article on &lt;strong&gt;AI Living Documentation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F253455kj9m07eb2nnxmj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F253455kj9m07eb2nnxmj.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 4: Define the Expected Outcome Clearly
&lt;/h3&gt;

&lt;p&gt;If you can describe exactly what “done” should look like, the AI’s output is more likely to converge on the intended result.&lt;/p&gt;

&lt;p&gt;For front-end work, this may include a wireframe, design mockup, interaction flow, target screenshot, or existing page. For back-end work, it may include an API specification, input and output examples, error codes, and performance requirements.&lt;/p&gt;

&lt;p&gt;In addition to explaining what must be built, define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which existing behaviors must remain unchanged;&lt;/li&gt;
&lt;li&gt;which scenarios must succeed;&lt;/li&gt;
&lt;li&gt;which errors must be handled correctly;&lt;/li&gt;
&lt;li&gt;how completion will be demonstrated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clear acceptance criteria prevent the AI from treating “the code has been written” as equivalent to “the feature is complete.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmw9mu9hb84wngmugrbe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmw9mu9hb84wngmugrbe.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Problems in Practice
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem 1: Claiming Completion Without Verification
&lt;/h3&gt;

&lt;p&gt;Suppose a user asks an AI agent to integrate a particular library. If the model misunderstands the library’s version, API, or documentation, the generated code may look plausible while failing at runtime.&lt;/p&gt;

&lt;p&gt;The original instruction might be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add Live2D to this web page so that the character on the page can be animated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This describes the feature but does not require the AI to verify the result. A stronger instruction would be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Add Live2D to this web page so that the character on the page can be animated.
&lt;/li&gt;
&lt;li&gt;Confirm that the Live2D assets load correctly, the model is visible, and its animation plays.
&lt;/li&gt;
&lt;li&gt;Run the project and verify that no related errors appear in the browser console.
&lt;/li&gt;
&lt;li&gt;Do not break existing page functionality. If any item cannot be verified, clearly identify it and explain why.
&lt;/li&gt;
&lt;li&gt;When finished, list the changed files, verification method, and test results.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;“Please ensure code quality” is still too abstract. A better approach is to translate quality into executable and observable conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the project builds successfully;&lt;/li&gt;
&lt;li&gt;automated tests pass;&lt;/li&gt;
&lt;li&gt;the feature works in the specified environment;&lt;/li&gt;
&lt;li&gt;no new errors appear in the browser console;&lt;/li&gt;
&lt;li&gt;existing functionality remains intact;&lt;/li&gt;
&lt;li&gt;any unperformed verification is clearly disclosed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key principle is that &lt;strong&gt;development, testing, and verification are separate steps performed in sequence&lt;/strong&gt;. Writing the code does not mean the tests have passed, and passing tests does not necessarily mean the user’s need has been satisfied.&lt;/p&gt;

&lt;p&gt;If this workflow is used repeatedly, encode it in a skill, project rule, or standard checklist instead of relying on an ad hoc reminder every time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwc0mebs5xev9ixrvvg3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwc0mebs5xev9ixrvvg3.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem 2: Ambiguous Terms Create Divergent Interpretations
&lt;/h3&gt;

&lt;p&gt;Humans cannot read minds, and neither can AI.&lt;/p&gt;

&lt;p&gt;When a requirement is unclear, the AI can only fill in the missing information using its prior knowledge, the current context, and common conventions. Its answer may be reasonable without being what the user actually wanted.&lt;/p&gt;

&lt;p&gt;For example, “menu” in an application could refer to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the main menu;&lt;/li&gt;
&lt;li&gt;the settings menu;&lt;/li&gt;
&lt;li&gt;a context menu;&lt;/li&gt;
&lt;li&gt;the top navigation bar;&lt;/li&gt;
&lt;li&gt;a mobile side menu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consider this instruction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add an “Open File” option to the menu.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI has to infer which menu should be changed. Even if it chooses the wrong location, it may still conclude that the task is complete.&lt;/p&gt;

&lt;p&gt;A clearer version would be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the desktop application’s top-level File menu, add an “Open File” option directly below “New File.” When clicked, it should open the system file picker and allow the user to select a &lt;code&gt;.json&lt;/code&gt; file. Cancelling the picker must not display an error. Do not modify the context menu or the settings page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The more concrete the description, the fewer semantic branches remain—and the less likely the AI is to make the wrong assumption.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftq0xnrc9m1aq8ubgwd43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftq0xnrc9m1aq8ubgwd43.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;When AI “cuts corners,” the cause is often not attitude but incomplete definitions of the goal, constraints, and acceptance criteria.&lt;/p&gt;

&lt;p&gt;If you tell an AI only what to finish, it may choose the shortest path. If you also explain why the task matters, what must not be broken, how the result should be verified, and what counts as complete, the quality of its output becomes far more consistent.&lt;/p&gt;

&lt;p&gt;An effective AI development workflow is not simply a longer prompt. It is a system that continuously accumulates reference examples, prohibitions, implementation plans, acceptance criteria, testing procedures, and project knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next: Why Am I Burning Through Tokens So Quickly?
&lt;/h2&gt;

&lt;p&gt;Have you ever asked AI to solve one simple problem, only to watch the token usage grow until your wallet starts to worry? The reason may not be that the model talks too much. Your development process may be repeatedly paying the cost of misunderstandings.&lt;/p&gt;

&lt;p&gt;Stay tuned for the next article.&lt;/p&gt;




&lt;p&gt;The &lt;a href="https://medium.com/@lian000123/vibe-coding-%E9%96%8B%E7%99%BC%E5%B0%8E%E5%85%A5ai%E5%95%8F%E9%A1%8C%E7%AD%86%E8%A8%98-%E4%B8%80-%E7%82%BA%E4%BB%80%E9%BA%BCai%E6%9C%83%E5%81%B7%E6%87%B6-934a70def12f?sharedUserId=lian000123" rel="noopener noreferrer"&gt;original article&lt;/a&gt; was written in Traditional Chinese, and the Japanese and English versions were translated using ChatGPT.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>softwareengineering</category>
      <category>development</category>
    </item>
    <item>
      <title>Notes on Introducing AI into Vibe Coding Development (Part 0) - Why I Am Writing This Article</title>
      <dc:creator>Lian0123 (連永立)</dc:creator>
      <pubDate>Thu, 02 Jul 2026 16:57:35 +0000</pubDate>
      <link>https://dev.to/lian0123/notes-on-introducing-ai-into-vibe-coding-development-part-zero-why-i-am-writing-this-article-gei</link>
      <guid>https://dev.to/lian0123/notes-on-introducing-ai-into-vibe-coding-development-part-zero-why-i-am-writing-this-article-gei</guid>
      <description>&lt;h2&gt;
  
  
  What Is Happening in the Software Industry Now?
&lt;/h2&gt;

&lt;p&gt;In recent years, with the emergence of general-purpose artificial intelligence such as ChatGPT and Claude Code, often referred to as AGI, companies have increasingly begun introducing AI into their workflows.&lt;/p&gt;

&lt;p&gt;Starting in June 2026, GitHub Copilot AI made a major change. It moved away from the PRU model, or premium request units, which was based on request counts, and shifted toward a model calculated using AI Credits. As a result, the execution cost for an engineer developing a feature, reviewing PRs, organizing documentation, and performing other tasks has gradually increased.&lt;/p&gt;

&lt;p&gt;Some developers even used up an entire month’s allowance on the very first day GitHub Copilot AI adopted the AI Credit model. This shift toward token-based pricing is becoming increasingly mainstream. It also places more restrictions on using AI within workflows. If you are not careful, your usage can run out quickly, and costs can continue to rise. Worse still, this type of pricing model is likely to become a broader trend among AI service providers.&lt;/p&gt;

&lt;p&gt;Jensen Huang once said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If that $500,000 engineer did not consume at least $250,000 worth of tokens, I am going to be deeply alarmed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The question today is no longer whether we should use AI. After all, not every company is like NVIDIA, with the freedom to consume tokens at scale. The real issue is the conflict between problem-solving, money, and time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxksuwqnr6ldlwjiao6bu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxksuwqnr6ldlwjiao6bu.png" alt="Problem-solving and cost have already become opposing forces." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Solving problems and controlling costs have already become conflicting forces. The future direction of the software market will be about solving problems effectively while keeping costs under control. It will not be about how many tokens you used to solve something, but about achieving the greatest benefit with the lowest possible cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Should Business Managers and Development Leads Do Next?
&lt;/h2&gt;

&lt;p&gt;Clearly, the first step is to identify what qualities and capabilities future technical talent should have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ability to break down large problems and requirements, extract the key points, group them properly, and find the best solution&lt;/li&gt;
&lt;li&gt;The ability to simplify AI behavior so it can be executed at the lowest possible cost&lt;/li&gt;
&lt;li&gt;The ability to achieve maximum benefit with the fewest tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is an evaluation framework for companies, including both positive and negative evaluation points.&lt;/p&gt;

&lt;h3&gt;
  
  
  Positive Evaluation Points
&lt;/h3&gt;

&lt;p&gt;If the company is willing to spend money to solve problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Has this problem been troubling the company for a long time? Was it difficult to execute through conventional methods because of staffing, scheduling, or other reasons?&lt;/li&gt;
&lt;li&gt;Has AI effectively replaced existing talent resources in the way an expert system might? While ensuring correctness, has it saved human effort?&lt;/li&gt;
&lt;li&gt;Was the problem solved quickly? Did it create additional time costs?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Negative Evaluation Points
&lt;/h3&gt;

&lt;p&gt;If the company is relatively conservative:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Will this adjustment reduce future changes, or will it increase them? How should we limit the damage?&lt;/li&gt;
&lt;li&gt;If problems occur, are the losses acceptable? For example: time, reputation, and financial cost.&lt;/li&gt;
&lt;li&gt;How much benefit can this adjustment bring? Compared with problem-solving costs and personnel costs, how much money does it actually save?&lt;/li&gt;
&lt;li&gt;Will future maintenance costs decrease? Or will AI make them higher and unnecessarily so?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In practice, what business managers need even more is a cost plan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How much cost are we willing to invest in solving the problem?&lt;/li&gt;
&lt;li&gt;Is the risk of cost increase controllable?&lt;/li&gt;
&lt;li&gt;Are there audit points in place to control costs?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Regarding the common online discussion that AI will replace software engineers, my view is relatively optimistic. There are many detailed technical issues that bosses or non-engineering project managers simply cannot fully grasp. When a company truly lays off all of its software talent, that is when the real disaster begins.&lt;/p&gt;

&lt;p&gt;That said, it is undeniable that Junior Engineers will become increasingly rare in the future. The technical threshold will become higher, because using AI well requires the corresponding knowledge. In contrast, Senior Engineers who can combine experience and expertise will become one of the strongest resources in the market.&lt;/p&gt;

&lt;p&gt;The knowledge and experience of software professionals will become an important dividing line.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjdzp1kmora2wzyrg54f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjdzp1kmora2wzyrg54f.png" alt="The knowledge and experience of software professionals will become an important dividing line." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a simple example. Suppose a project developed through Vibe Coding suddenly encounters a serious bug in production. Every minute the problem exists causes the company to lose money.&lt;/p&gt;

&lt;p&gt;If you were the manager, would you want the developer to search for the answer as if rolling dice? Or would you want the developer to quickly identify the root cause?&lt;/p&gt;

&lt;p&gt;I also like this saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;People can never imagine what lies outside their own understanding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The knowledge of a project member is the key to future product maintenance.&lt;/p&gt;

&lt;p&gt;Felix Rieseberg, Engineering Lead at Claude Cowork, also said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The biggest barrier to AI adoption is people not realizing they can ask AI to solve almost any problem… The gap isn't technical; it's psychological.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Felix Rieseberg points out that the reason people fail to use AI well lies in imagination. What you can think of determines what you can ask. When using today’s top-tier models, the core problem is not always that the result falls short of expectations. More often, it is that the user has not described the requirements clearly enough, causing the AI to produce results that do not match what was expected.&lt;/p&gt;

&lt;p&gt;Of course, the input and output limitations of model context, as well as the model’s byte-processing issues, must first be addressed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Article: Why Does AI Get Lazy?
&lt;/h2&gt;

&lt;p&gt;The next article will discuss a common phenomenon:&lt;/p&gt;

&lt;p&gt;Why is it that when two teams use the same AI, one team significantly improves its efficiency, while the other sees almost no improvement in productivity?&lt;/p&gt;

&lt;p&gt;Many times, it is not that AI does not understand. Rather, it is...&lt;/p&gt;

&lt;p&gt;Stay tuned.&lt;/p&gt;




&lt;p&gt;The &lt;a href="https://medium.com/@lian000123/vibe-coding-%E9%96%8B%E7%99%BC%E5%B0%8E%E5%85%A5ai%E5%95%8F%E9%A1%8C%E7%AD%86%E8%A8%98-%E9%9B%B6-%E7%82%BA%E4%BB%80%E9%BA%BC%E8%A6%81%E5%AF%AB%E9%80%99%E7%AF%87%E6%96%87%E7%AB%A0-1b48d516f61d" rel="noopener noreferrer"&gt;original article&lt;/a&gt; was written in Traditional Chinese, and the Japanese and English versions were translated using ChatGPT.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>vibecoding</category>
      <category>development</category>
    </item>
  </channel>
</rss>
