\u003C/figure>\n\u003C!-- /wp:image -->\n\n\u003C!-- wp:heading -->\n\u003Ch2 class=\"wp-block-heading\" id=\"h-ai-right-now-chess-versus-self-driving-cars\">AI right now: Chess versus self-driving cars\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The concept of artificial intelligence has been around for quite some time, although the high profile advances have raised concerns in the media \u003Ca href=\"https://www.npr.org/2023/05/15/1175776384/congress-wants-regulate-ai-artificial-intelligence-lot-of-catching-up-to-do\">as well as Congress\u003C/a>. Artificial intelligence has already been very successful in certain areas. The first one that comes to mind is chess.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>AI has been applied to chess as far back as the 1980s. It is widely accepted that AI has exceeded human’s ability to win at chess. It’s also not surprising, as the parameters of chess are FINITE (\u003Ca href=\"https://chess.stackexchange.com/questions/13522/is-chess-a-solved-game\">but the game has not yet been solved\u003C/a>).\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Chess always starts with 32 pieces on 64 squares, has well documented officially agreed upon rules, and most importantly has a clearly defined objective. In each turn, there are a finite number of possible moves. Playing chess is just following a rules engine. AI systems can calculate the repercussions of every move to select the move most likely outcome to capture an opponent's piece or gain position, and ultimately win.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>There has been another front where AI has been very active - self driving cars. Manufacturers have been promising self-driving cars for quite some time. Some have the capacity to self-drive, but there are caveats. In many situations the car requires active supervision; the driver may need to keep their hands on the wheel, the self-driving feature is not autonomous.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Like chess-playing AI programs, self-driving cars largely use \u003Ca href=\"https://www.oreilly.com/radar/podcast/the-technology-behind-self-driving-vehicles/\">rules-based engines\u003C/a> to make decisions. Unlike the chess programs, the rules on how to navigate every possible situation are not clearly defined. There are thousands of little judgments drivers make in a given trip avoiding pedestrians, navigating around double-parked cars, and turning in busy intersections. Getting those judgments right means the difference between arriving at the mall safely or arriving at the hospital.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>In technology, the standard is \u003Ca href=\"https://www.skmurphy.com/blog/2009/09/01/achieving-six-nines-when-you-launch/\">five or even six 9s for availability\u003C/a>—a website or service is available 99.999% (or 99.9999%) of the time. The cost to achieve the first 99% isn’t that high. It means that your website or service can be down for more than three days—87.6 hours—a year. However for each 9 you add at the end, the cost to get there grows exponentially. By the time you reach 99.9999%, you can only allow for 31.5 seconds of downtime a year. It requires significantly more planning and effort and of course is more expensive. Getting the first 99% may not be easy, but proportionally it’s a lot easier and cheaper than that last tiny fraction.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>365 X 24 X 60 minutes = 525,600 minutes a year\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>99% availability -> down for 5256 minutes, 87.6 hours\u003Cbr>99.9% availability -> down 526 minutes, 8.76 hours\u003Cbr>99.99% -> 52 minutes, less than 1 hour\u003Cbr>99.999% -> 5.2 minutes\u003Cbr>99.9999% -> 0.52 minutes, roughly 31.5 seconds\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>No matter how close AI gets to being good enough, there’s always the risk of accidents and fatalities. Those risks and consequences happen every day with humans behind the wheel. I don’t know what rate of accidents and fatalities will be acceptable by governments, but you have to think it needs to be at least as good as human beings.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The reason it’s so difficult to get that acceptable level of safety is because driving a car entails significantly more variables than chess, and those variables are NOT FINITE. The first 95% or 99% might be predictable and easy to account for. However, there are so many edge cases after that first 99%, and each one may share some traits but each one is unique; other vehicles on the road driven by other human beings, road closures, construction, accidents, weather events, How many times have you driven after a road has been paved over but the paint for the dividing lines on the road has not been applied. It’s significantly harder to get your AI model to be able to account for and recognize those anomalies and edge cases, and more importantly how to respond appropriately without getting into an accident. Each edge case may share some traits, but rarely are they identical, which makes it harder for AI identify the appropriate way to respond.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2 class=\"wp-block-heading\" id=\"h-ai-can-t-create-software-only-code\">AI can’t create software, only code\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Creating and maintaining software has a lot more in common with driving than playing chess. There are far more variables involved and the rules are based on judgment calls. You may have a desired outcome when you are building software, but it’s unlikely that it's as singular as chess. Software is rarely done; features get added and bugs are fixed; it’s an ongoing exercise. Unlike software, once a chess game is won or lost it's over. \u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>In software development, we do have a tool to get our software designs closer to the tightly-controlled rules engine of chess: \u003Ca href=\"https://stackoverflow.blog/2020/04/06/a-practical-guide-to-writing-technical-specs/\">technical specifications\u003C/a>. At their best, specs walk through expected user behaviors and program flows. Here’s how a user buys an e-sandwich: click this button, create this data structure, run this service. However, that’s rarely what we get. Too often, we’re handed wishlists as feature specs, back-of-the-napkin wireframes, and unclear requirements documents and told to make our best judgments. \u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Worse yet, requirements change or are ignored. Recently I was asked to help a team build something that could help people get information on health issues related to COVID 19. The application was going to be for an area of the globe that did not have reliable WIFI. The team wanted me to help build an application that could do surveys via SMS—phone text messages. Initially I was excited to be involved.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Once I started hearing the team describe what they thought they wanted, I realized this was going to be a problem. It’s one thing for a retail company to ask you on a scale of 1-10 how likely you are to shop in their store again. It’s very different to ask multistep surveys with multiple choice questions about the symptoms you’re experiencing with a possible COVID infection. I never said no, but I did bring up all the possible points of failure in this process and wanted the team to clearly define how we would handle incoming answers for all questions. Would it be comma separated numbers mapped to each answer? What happens if a submitted answer does not map to any of the options given?\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>After all these questions, the team came to the same conclusion. We decided it would be best not to go through with it. Believe it or not, I'd say this was actually a successful outcome. It would have been more wasteful to have gone ahead without a clear resolution for all of the potential errors when invalid user data was submitted.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Is the idea behind using AI to create software to just let those same stakeholders talk directly to a computer to create a SMS based survey? Is AI going to ask probing questions about how to handle all the possible issues of collecting survey data via SMS? Is it going to account for all the things that we as human beings might do incorrectly along the way and how to handle those missteps?\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>In order to produce a functional piece of software from AI, you need to know what you want and be able to clearly and precisely define it. There are times when I'm writing software just for myself where I don't realize some of the difficulties and challenges until I actually start writing code.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Over the past decade, the software industry has transitioned from the waterfall methodology to \u003Ca href=\"https://stackoverflow.blog/2023/06/13/the-meeting-that-changed-how-we-build-software-ep-579/\">agile\u003C/a>. Waterfall defines exactly what you want before any code is written, while agile allows enough flexibility so you can make adjustments along the way.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>So many software projects using waterfall have failed because the stakeholders thought they knew what they wanted and thought they could accurately describe it and document it, only to be very disappointed when the final product was delivered. Agile software development is supposed to be an antidote to this process.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>AI might be best suited to rewrite the software we already have but need to rewrite it to use newer hardware or a more modern programming language. There are still a lot of institutions with software written in \u003Ca href=\"https://stackoverflow.blog/2020/04/20/brush-up-your-cobol-why-is-a-60-year-old-language-suddenly-in-demand/\">COBOL\u003C/a>, but there are fewer programmers learning how to use it. If you know exactly what you want, maybe you could get AI to produce software faster and cheaper than a team of human programmers. I believe AI could create the software that has already been created faster than human programmers but that's because someone figured out what that software should do along the way.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>AI might actually do pretty well building software using the waterfall process, which is also affectionately known as death march. You know who is terrible at waterfall? We are, human beings. And it's not because of the part where the signed documents are handed over to a team of programmers so they can write the code. It's everything before that. Artificial intelligence can do some extraordinary things, but it can’t read your mind or tell you what you should want.\u003C/p>\n\u003C!-- /wp:paragraph -->","html","2023-12-29T14:04:48.758Z",{"current":459},"the-hardest-part-of-building-software-is-not-coding-its-requirements",[461,470,476,481,485,490,495,499,503],{"_createdAt":462,"_id":463,"_rev":464,"_type":465,"_updatedAt":466,"slug":467,"title":469},"2023-05-23T16:43:21Z","wp-tagcat-ai","fpDTFQqIDjNJIbHDKPBGpV","blogTag","2025-01-30T16:19:01Z",{"current":468},"ai","AI",{"_createdAt":462,"_id":471,"_rev":472,"_type":465,"_updatedAt":462,"slug":473,"title":475},"wp-tagcat-ai-assistant","9HpbCsT2tq0xwozQfkc4ih",{"current":474},"ai-assistant","ai assistant",{"_createdAt":462,"_id":477,"_rev":472,"_type":465,"_updatedAt":462,"slug":478,"title":480},"wp-tagcat-code-for-a-living",{"current":479},"code-for-a-living","Code for a Living",{"_createdAt":462,"_id":482,"_rev":472,"_type":465,"_updatedAt":462,"slug":483,"title":484},"wp-tagcat-llm",{"current":484},"llm",{"_createdAt":486,"_id":487,"_rev":472,"_type":465,"_updatedAt":486,"slug":488,"title":489},"2023-07-12T12:46:58Z","wp-tagcat-requirements",{"current":489},"requirements",{"_createdAt":462,"_id":491,"_rev":472,"_type":465,"_updatedAt":462,"slug":492,"title":494},"wp-tagcat-software-engineering",{"current":493},"software-engineering","software engineering",{"_createdAt":462,"_id":496,"_rev":472,"_type":465,"_updatedAt":462,"slug":497,"title":498},"wp-tagcat-se-tech",{"current":498},"se-tech",{"_createdAt":462,"_id":500,"_rev":472,"_type":465,"_updatedAt":462,"slug":501,"title":502},"wp-tagcat-se-stackoverflow",{"current":502},"se-stackoverflow",{"_createdAt":504,"_id":505,"_rev":506,"_type":465,"_updatedAt":507,"description":508,"slug":517,"title":518},"2025-04-24T16:28:57Z","797b8797-6e65-4723-b53f-8bc005305384","vn3UzGZJyacwgllS8WZNgc","2025-04-24T16:29:32Z",[509],{"_key":510,"_type":65,"children":511,"markDefs":516,"style":74},"bb32f75814b4",[512],{"_key":513,"_type":69,"marks":514,"text":515},"dbcf27ef29b3",[],"Community-generated articles submitted for your reading pleasure. ",[],{"_type":10,"current":518},"contributed","The hardest part of building software is not coding, it's requirements",[521,527,533,539],{"_id":522,"publishedAt":523,"slug":524,"sponsored":12,"title":526},"f0807820-02d7-4fc5-845f-3d76514b81c0","2025-08-11T16:00:00.000Z",{"_type":10,"current":525},"renewing-chat-on-stack-overflow","Renewing Chat on Stack Overflow ",{"_id":528,"publishedAt":529,"slug":530,"sponsored":12,"title":532},"e33464c4-b21b-4019-8b86-64a46335a95e","2025-08-07T16:00:00.000Z",{"_type":10,"current":531},"a-new-worst-coder-has-entered-the-chat-vibe-coding-without-code-knowledge","A new worst coder has entered the chat: vibe coding without code knowledge",{"_id":534,"publishedAt":535,"slug":536,"sponsored":12,"title":538},"8b04b236-51d5-4747-9de8-2fe6e6a2512e","2025-08-04T16:00:00.000Z",{"_type":10,"current":537},"cross-pollination-as-a-strategic-advantage-for-forward-thinking-organizations","Cross-pollination as a strategic advantage for forward-thinking organizations",{"_id":540,"publishedAt":541,"slug":542,"sponsored":12,"title":544},"5bddfa7a-32ce-4f9b-9919-10f03a9ef39b","2025-07-31T16:00:00.000Z",{"_type":10,"current":543},"do-ai-coding-tools-help-with-imposter-syndrome-or-make-it-worse","Do AI coding tools help with imposter syndrome or make it worse?",{"count":546,"lastTimestamp":547},43,"2024-01-22T19:33:35Z",["Reactive",549],{"$sarticleModal":453},["Set"],["ShallowReactive",552],{"sanity-SOxDvw4OrHok_0Zf6U2kIIGdds3g9fleQYfDXWyi6HQ":-1,"sanity-comment-wp-post-22373-1755286365016":-1},"/2023/12/29/the-hardest-part-of-building-software-is-not-coding-its-requirements/?cb=1"]