{"id":185856,"date":"2025-08-05T10:12:31","date_gmt":"2025-08-05T14:12:31","guid":{"rendered":"https:\/\/innowise.com\/?p=185856"},"modified":"2026-02-13T02:34:38","modified_gmt":"2026-02-13T07:34:38","slug":"ai-technische-schulden-beheben","status":"publish","type":"post","link":"https:\/\/innowise.com\/de\/blog\/ai-technical-debt-cleanup\/","title":{"rendered":"Zuerst nutzten sie ChatGPT, um Kosten zu sparen. Dann haben sie uns beauftragt, die technischen Schulden von KI zu beseitigen."},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"185856\" class=\"elementor elementor-185856\">\n\t\t\t\t<div class=\"elementor-element elementor-element-819836f e-flex e-con-boxed e-con e-parent\" data-id=\"819836f\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-475732b elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"475732b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div style=\"display: none;\">The power of data mapping in healthcare: benefits, use cases & future trends. As the healthcare industry and its supporting technologies rapidly expand, an immense amount of data and information is generated. Statistics show that about 30% of the world's data volume is attributed to the healthcare industry, with a projected growth rate of nearly 36% by 2025. This indicates that the growth rate is far beyond that of other industries such as manufacturing, financial services, and media and entertainment.<\/div>\n\n<div class=\"breadcrumbs flex\">\n    <div class=\"info\"> \n    <a href=\"https:\/\/innowise.com\/\">\n  Main\n  <\/a>\n    <\/div>\n    <div class=\"info\">\n         <a href=\"https:\/\/innowise.com\/about-us\/\">\n  About us\n  <\/a>\n    <\/div>\n     <div class=\"info\">\n          <a href=\"https:\/\/innowise.com\/blog\/\">\n  Blog\n  <\/a>\n    <\/div>\n<\/div>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\/\", \n  \"@type\": \"BreadcrumbList\", \n  \"itemListElement\": [{\n    \"@type\": \"ListItem\", \n    \"position\": 1, \n    \"name\": \"Innowise is on Top: We Are No. 554 on Inc. 5000 Annual List\",\n    \"item\": \"https:\/\/innowise.com\/blog\/inc-5000-puts-innowise-group-among-the-fastest-growing-technology-companies-in-the-usa-2022\/\"  \n  },{\n    \"@type\": \"ListItem\", \n    \"position\": 2, \n    \"name\": \"Blog\",\n    \"item\": \"https:\/\/innowise.com\/blog\/\"  \n  },{\n    \"@type\": \"ListItem\", \n    \"position\": 3, \n    \"name\": \"Main\",\n    \"item\": \"https:\/\/innowise.com\/\"  \n  }]\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93f634e elementor-widget-tablet__width-inherit elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"93f634e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">First, they used ChatGPT to cut costs. Then they hired us to clean up the AI technical debt<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0ba38f elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"a0ba38f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"heroBottom\">\n<div>    \n <a href=\"\/authors\/philip-tikhanovich\/\">Philip Tikhanovich<\/a>\n<\/div> \n\n<div class=\"second\">    \n<span>Aug 5, 2025<\/span>\n<span>10 min read<\/span>  \n<\/div>  \n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b399fb9 elementor-hidden-desktop elementor-hidden-tablet e-flex e-con-boxed e-con e-parent\" data-id=\"b399fb9\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-523b86d elementor-widget elementor-widget-image\" data-id=\"523b86d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"440\" height=\"330\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Small-cover_First-they-used-ChatGPT-to-cut-costs.jpg\" class=\"attachment-large size-large wp-image-186659\" alt=\"\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Small-cover_First-they-used-ChatGPT-to-cut-costs.jpg 440w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Small-cover_First-they-used-ChatGPT-to-cut-costs-300x225.jpg 300w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Small-cover_First-they-used-ChatGPT-to-cut-costs-16x12.jpg 16w\" sizes=\"(max-width: 440px) 100vw, 440px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-970be0b article-description e-flex e-con-boxed e-con e-parent\" data-id=\"970be0b\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f2465c0 author-article e-con-full e-flex e-con e-child\" data-id=\"f2465c0\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-260e082 e-con-full e-flex e-con e-child\" data-id=\"260e082\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-266ea1a elementor-widget elementor-widget-shortcode\" data-id=\"266ea1a\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[summarize_button_ai]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e64314b e-con-full e-flex e-con e-child\" data-id=\"e64314b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dfd48a8 elementor-widget elementor-widget-text-editor\" data-id=\"dfd48a8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>You\u2019d be surprised just how many companies are doing this now.<\/p><p style=\"margin-bottom: 0px;\">As reports from across the industry indicate, there&#8217;s now a growing specialized sector for engineers who focus on correcting AI-generated code errors.<\/p><p style=\"margin-bottom: 0px;\">The pattern has become remarkably consistent. Companies turn to ChatGPT to generate migration scripts, integrations, or entire features, hoping to save time and cut costs. After all, the technology appears fast and accessible.<\/p><p style=\"margin-bottom: 0px;\">Then the systems fail.<\/p><p style=\"margin-bottom: 0px;\">And they call us.<\/p><p style=\"margin-bottom: 0px;\">Recently, we\u2019ve been getting more and more of these requests. Not to ship a new product, but to untangle whatever mess was left behind after someone trusted a language model with their production code.<\/p><p style=\"margin-bottom: 0px;\">At this point, it&#8217;s starting to look like its own niche industry. Fixing AI-generated bugs is now a billable service. And in some cases, a very expensive one.<\/p><p style=\"margin-bottom: 0px;\"><a style=\"text-decoration: underline;\" href=\"https:\/\/www.gitclear.com\/ai_assistant_code_quality_2025_research\" target=\"_blank\" rel=\"noopener nofollow\">GitClear\u2019s 2024 report<\/a>\u00a0confirms what we\u2019ve seen with clients: AI coding tools are speeding up delivery, but also fueling duplication, reducing reuse, and inflating long-term maintenance costs.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ecac00 elementor-widget elementor-widget-image\" data-id=\"1ecac00\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"456\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Percent-of-commits-containing-a-cloned-code-block.jpg\" class=\"attachment-large size-large wp-image-186187\" alt=\"\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Percent-of-commits-containing-a-cloned-code-block.jpg 1000w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Percent-of-commits-containing-a-cloned-code-block-300x171.jpg 300w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Percent-of-commits-containing-a-cloned-code-block-768x438.jpg 768w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/08\/Percent-of-commits-containing-a-cloned-code-block-18x10.jpg 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b195ecf elementor-widget elementor-widget-text-editor\" data-id=\"b195ecf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In one case, a client came to us after an AI-generated migration dropped critical customer data. We spent <i>30 hours recovering what was lost, rewriting the logic from scratch, and cleaning up the pipeline<\/i>. The ironic part is that it would\u2019ve been cheaper to have a senior developer write it the old-fashioned way.<\/p><p style=\"margin-bottom: 0px;\">Let\u2019s be clear, however, we\u2019re not \u201cagainst AI.\u201d We use it too. And it\u2019s helpful in the right context, with the right guardrails. But what frustrates me about the overreliance on AI and its widespread implications \u2014 and probably you too \u2014 is the magical thinking. The idea that a language model can replace real engineering work.<\/p><p style=\"margin-bottom: 0px;\">It can\u2019t. And as the saying goes, the proof is in the pudding. When companies pretend otherwise, they end up paying someone like us to clean it up.<\/p><p style=\"margin-bottom: 0px;\">So, what does one of these clean-up jobs look like? Here\u2019s what the AI-afficionados aren\u2019t telling you when it comes to time lost and money wasted.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-34b78b9 e-con-full e-flex e-con e-child\" data-id=\"34b78b9\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d1205e5 elementor-widget elementor-widget-heading\" data-id=\"d1205e5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What a typical request looks like<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0260b1c elementor-widget elementor-widget-text-editor\" data-id=\"0260b1c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The message usually comes in like this:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b4d3e45 e-con-full takeways e-flex e-con e-child\" data-id=\"b4d3e45\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1445428 elementor-widget elementor-widget-text-editor\" data-id=\"1445428\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u201cHey, can you take a look at a microservice we built? We used ChatGPT to generate the first version. We pushed it to staging, and now our RabbitMQ queue is completely flooded.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80eab95 elementor-widget elementor-widget-text-editor\" data-id=\"80eab95\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>It always starts small. A task that seemed too boring or time-consuming. Something like parsing a CSV, rewriting a cron job, or wiring up a simple webhook. So they hand it off to a language model and hope for the best.<\/p><p>But here\u2019s the thing: the symptoms show up much later. Sometimes days later. And when they do, it\u2019s rarely obvious that the root cause was AI-generated code. It just looks like\u2026 something\u2019s off.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ad13726 e-con-full e-flex e-con e-child\" data-id=\"ad13726\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-15e6684 elementor-widget elementor-widget-text-editor\" data-id=\"15e6684\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u201cYou can\u2019t outsource architectural thinking to a language model. AI can speed things up, but it still takes engineers to build systems that don\u2019t fall apart under pressure.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-99d6c44 e-grid e-con-full e-con e-child\" data-id=\"99d6c44\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a9fab6 elementor-widget elementor-widget-image\" data-id=\"3a9fab6\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"360\" height=\"360\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/05\/Dmitry-Nazarevich.png\" class=\"attachment-full size-full wp-image-182344\" alt=\"Dmitry Nazarevich\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/05\/Dmitry-Nazarevich.png 360w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/05\/Dmitry-Nazarevich-300x300.png 300w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/05\/Dmitry-Nazarevich-150x150.png 150w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/05\/Dmitry-Nazarevich-12x12.png 12w\" sizes=\"(max-width: 360px) 100vw, 360px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5783e9e e-con-full max100 e-flex e-con e-child\" data-id=\"5783e9e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-063918d no-text-decoration elementor-widget elementor-widget-heading\" data-id=\"063918d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\"><a href=\"\/authors\/dmitry-nazarevich\/\">Dmitry Nazarevich<\/a><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-980f799 elementor-widget elementor-widget-text-editor\" data-id=\"980f799\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Chief Technical Officer<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-917f59c e-con-full e-flex e-con e-child\" data-id=\"917f59c\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b79d580 elementor-widget elementor-widget-text-editor\" data-id=\"b79d580\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"margin-bottom: 0px;\">After a dozen of these cases, patterns start to emerge:<\/p><ul class=\"blackUl bottomText\"><li><b>No tests<\/b><span style=\"font-weight: 400;\">. At all. Not even a hello-world assert. Just raw, speculative code that was never exercised properly.<\/span><\/li><li><b>No awareness of system boundaries<\/b><span style=\"font-weight: 400;\">. We\u2019ve seen ChatGPT scripts that query three microservices synchronously, ignore timeouts, and blow up the entire call chain on the first failure.<\/span><\/li><li><b>Misuse of transactions<\/b><span style=\"font-weight: 400;\">. One client used AI-generated SQL with nested transactions inside a Node.js service using Knex. It worked, until it didn\u2019t, and half the writes silently failed.<\/span><\/li><li><b>Subtle race conditions.<\/b><span style=\"font-weight: 400;\"> Especially in multithreaded or async-heavy codebases. The kind of bugs that don\u2019t show up in dev but wreck production at scale.<\/span><\/li><\/ul><p style=\"margin-bottom: 0px;\">And of course, when everything collapses, the AI doesn&#8217;t leave you a comment saying, \u201cBy the way, I\u2019m guessing here.\u201d<\/p><p style=\"margin-bottom: 0px;\">That part\u2019s on you.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4d81179 elementor-widget elementor-widget-image\" data-id=\"4d81179\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"514\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/07\/AI-technical-debt-doesnt-show-up-in-tests.-It-shows-up-in-production.jpg\" class=\"attachment-large size-large wp-image-185860\" alt=\"\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/07\/AI-technical-debt-doesnt-show-up-in-tests.-It-shows-up-in-production.jpg 1000w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/07\/AI-technical-debt-doesnt-show-up-in-tests.-It-shows-up-in-production-300x193.jpg 300w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/07\/AI-technical-debt-doesnt-show-up-in-tests.-It-shows-up-in-production-768x493.jpg 768w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/07\/AI-technical-debt-doesnt-show-up-in-tests.-It-shows-up-in-production-18x12.jpg 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b8e5aa8 e-con-full e-flex e-con e-child\" data-id=\"b8e5aa8\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7e9c2ba elementor-widget elementor-widget-heading\" data-id=\"7e9c2ba\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Case 1: The migration script that quietly dropped customer data<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-753fe30 elementor-widget elementor-widget-text-editor\" data-id=\"753fe30\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"margin-bottom: 0px;\">This one came from a fast-growing fintech company.<\/p><p style=\"margin-bottom: 0px;\">They were rolling out a new version of their customer data model, splitting one large JSONB field in Postgres into multiple normalized tables. Pretty standard stuff. But with tight deadlines and not enough hands, one of the developers decided to \u201cspeed things up\u201d by asking ChatGPT to generate a migration script.<\/p><p style=\"margin-bottom: 0px;\">It looked good on the surface. The script parsed the JSON, extracted contact info, and inserted it into a new <code>user_contacts<\/code> table.<\/p><p style=\"margin-bottom: 0px;\">So they ran it.<\/p><p style=\"margin-bottom: 0px;\">No dry run. No backup. Straight into staging, which, as it turns out, was sharing data with production through a replica.<\/p><p style=\"margin-bottom: 0px;\">A few hours later, customer support started getting emails. Users weren\u2019t receiving payment notifications. Others had missing phone numbers in their profiles. That\u2019s when they called us.<\/p><h3>What went wrong<\/h3><p>We traced the issue to the script. It did the basic extraction, but it made three fatal assumptions:<\/p><ul class=\"blackUl bottomText\"><li>It didn\u2019t handle <code>NULL<\/code> values or missing keys inside the JSON structure.<\/li><li>It inserted partial records without validation.<\/li><li>It used <code>ON CONFLICT DO NOTHING<\/code>, so any failed inserts were silently ignored.<\/li><\/ul><p><b>Result<\/b>: about <b>18% of the contact data<\/b> was either lost or corrupted. No logs. No error messages. Just quiet data loss.<\/p><h3>What it took to fix<\/h3><p>We assigned a small team to untangle the mess. Here&#8217;s what we did:<\/p><ol class=\"blackUl bottomText\"><li><b>Diagnosis and replication (4 hours)<\/b> We recreated the script in a sandbox environment and ran it against a snapshot of the database. That\u2019s how we confirmed the issue and mapped exactly what went missing.<\/li><li><b>Forensic data audit (8 hours)<\/b> We compared the broken state with backups, identified all records with missing or partial data, and matched them against event logs to trace which inserts failed and why.<\/li><li><b>Rewriting the migration logic (12 hours)<\/b> We rewrote the entire script in Python, added full validation logic, built a rollback mechanism, and integrated it into the client\u2019s CI pipeline. This time, it included tests and dry-run support.<\/li><li><b>Manual data recovery (6 hours) <\/b>Some records were unrecoverable from backups. We pulled missing fields from external systems (their CRM and email provider APIs) and manually restored the rest.<\/li><\/ol><h3>Total time: 30 engineering hours<\/h3><p>Two engineers, three days. Cost to client: around <b>$4,500<\/b> in service fees.<\/p><p>But the bigger hit came from customer fallout. Failed notifications led to missed payments and churn. The client told us they spent at least <b>$10,000<\/b> on support tickets, SLA compensation, and goodwill credits over that one botched script.<\/p><p>The ironic thing is that a senior developer could\u2019ve written the correct migration in maybe four hours. But the promise of AI speed ended up costing them two weeks of cleanup and reputation damage.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6b71586 e-con-full e-flex e-con e-child\" data-id=\"6b71586\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-732f30e e-con-full e-flex e-con e-child\" data-id=\"732f30e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8b359f2 elementor-widget-tablet__width-inherit elementor-widget__width-initial max100 elementor-widget elementor-widget-heading\" data-id=\"8b359f2\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">We fix what ChatGPT broke - and build what it couldn\u2019t.<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ce94df2 e-con-full e-flex e-con e-child\" data-id=\"ce94df2\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b9cf834 elementor-absolute elementor-widget-mobile__width-inherit transform elementor-widget elementor-widget-html\" data-id=\"b9cf834\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"wave-container\"><\/div>\r\n\r\n<style>\r\n  .wave-container {\r\n    width: 400px;\r\n    height: 400px;\r\n  }\r\n\r\n  @media(max-width: 767px) {\r\n    .wave-container {\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n  }\r\n\r\n\r\n  .wave {\r\n    position: absolute;\r\n    border: 1px solid rgba(210, 184, 214, 1);\r\n    border-radius: 50%;\r\n    animation: drop 16s infinite;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  @keyframes drop {\r\n    0% {\r\n      width: 0px;\r\n      height: 0px;\r\n      border: 1px solid rgba(210, 184, 214, 1);\r\n    }\r\n\r\n    100% {\r\n      width: 400px;\r\n      height: 400px;\r\n      border: 1px solid rgba(210, 184, 214, 0);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n    function createWaves(numberOfWaves) {\r\n      const waveContainers = document.querySelectorAll('.wave-container');\r\n\r\n      waveContainers.forEach((waveContainer) => {\r\n        for (let i = 0; i < numberOfWaves; i++) {\r\n          const wave = document.createElement('div');\r\n          wave.classList.add('wave');\r\n\r\n          wave.style.animationDelay = `${i * 0.8}s`;\r\n\r\n          waveContainer.appendChild(wave);\r\n        }\r\n      });\r\n    }\r\n\r\n    createWaves(10)\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-284f10b elementor-align-left elementor-widget__width-initial elementor-widget-mobile__width-inherit cta-btn elementor-widget elementor-widget-button\" data-id=\"284f10b\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#contact-form\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Let us help<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8272531 e-con-full e-flex e-con e-child\" data-id=\"8272531\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-22ffcab elementor-widget elementor-widget-heading\" data-id=\"22ffcab\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Case 2: The API client that ignored rate limits and broke production<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-edca269 elementor-widget elementor-widget-text-editor\" data-id=\"edca269\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<style>\ncode {\ncolor: green !important;\n}\n<\/style>\n<p style=\"margin-bottom: 0px;\">This one came from a legal tech startup building a document management platform for law firms. One of their core features was integrating with a government e-notification service \u2014 a third-party REST API with OAuth 2.0 and strict rate limiting: 50 requests per minute, no exceptions.<\/p>\n<p style=\"margin-bottom: 0px;\">Instead of assigning the integration to an experienced backend dev, someone on the team decided to \u201cprototype it\u201d using ChatGPT. They dropped in the OpenAPI spec, asked for a Python client, and got a clean-looking script with <code>requests<\/code>, retry logic using <code>tenacity<\/code>, and token refresh.<\/p>\n<p style=\"margin-bottom: 0px;\">Looked solid on paper. So they shipped it.<\/p>\n\n<h3>What went wrong<\/h3>\nAt first, everything seemed fine. The client handled individual requests correctly, passed authentication, and even retried on failure. But during real-world usage, especially under load, the platform started behaving unpredictably.\n<p>Here\u2019s what actually happened:<\/p>\n<ul class=\"blackUl bottomText\">\n \t<li><b>No respect for rate limits.<\/b> The generated code didn\u2019t read or interpret <code>X-RateLimit-Remaining<\/code> or <code>Retry-After<\/code> headers. It just kept sending requests blindly.<\/li>\n \t<li><b>Retries made things worse.<\/b> When 429 errors started coming back, the tenacity decorator retried them automatically. No jitter. No queueing. Just a flood of follow-up requests.<\/li>\n \t<li><b>The API provider temporarily blocked their IP.<\/b> For 3 hours, no one on the platform could sync documents. No logs, no alerts. Just quiet failure.<\/li>\n<\/ul>\nThis wasn\u2019t a one-line fix. It was a misunderstanding of how production systems behave. And it\u2019s a great example of what LLMs don\u2019t know; not because they\u2019re broken, but because they don\u2019t have runtime awareness.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e3d7b85 e-con-full e-flex e-con e-child\" data-id=\"e3d7b85\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-8dc30f0 e-con-full e-flex e-con e-child\" data-id=\"8dc30f0\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-da6b196 elementor-widget-tablet__width-inherit elementor-widget__width-initial max100 elementor-widget elementor-widget-heading\" data-id=\"da6b196\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Stop patching AI-generated code in prod - bring us in before it breaks.<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-49bbb23 e-con-full e-flex e-con e-child\" data-id=\"49bbb23\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-68a869f elementor-absolute elementor-widget-mobile__width-inherit transform elementor-widget elementor-widget-html\" data-id=\"68a869f\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"wave-container\"><\/div>\r\n\r\n<style>\r\n  .wave-container {\r\n    width: 400px;\r\n    height: 400px;\r\n  }\r\n\r\n  @media(max-width: 767px) {\r\n    .wave-container {\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n  }\r\n\r\n\r\n  .wave {\r\n    position: absolute;\r\n    border: 1px solid rgba(210, 184, 214, 1);\r\n    border-radius: 50%;\r\n    animation: drop 16s infinite;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  @keyframes drop {\r\n    0% {\r\n      width: 0px;\r\n      height: 0px;\r\n      border: 1px solid rgba(210, 184, 214, 1);\r\n    }\r\n\r\n    100% {\r\n      width: 400px;\r\n      height: 400px;\r\n      border: 1px solid rgba(210, 184, 214, 0);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n    function createWaves(numberOfWaves) {\r\n      const waveContainers = document.querySelectorAll('.wave-container');\r\n\r\n      waveContainers.forEach((waveContainer) => {\r\n        for (let i = 0; i < numberOfWaves; i++) {\r\n          const wave = document.createElement('div');\r\n          wave.classList.add('wave');\r\n\r\n          wave.style.animationDelay = `${i * 0.8}s`;\r\n\r\n          waveContainer.appendChild(wave);\r\n        }\r\n      });\r\n    }\r\n\r\n    createWaves(10)\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-452c14c elementor-align-left elementor-widget__width-initial elementor-widget-mobile__width-inherit cta-btn elementor-widget elementor-widget-button\" data-id=\"452c14c\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#contact-form\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contact us<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dcbd874 elementor-widget elementor-widget-text-editor\" data-id=\"dcbd874\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>How we fixed it<\/h3>\n\n<ol class=\"blackUl bottomText\">\n \t<li><b>Trace and isolate the failure (6 hours)<\/b> We added middleware to inspect outbound traffic and confirmed the flood of requests during peak usage. We also recreated the failure in staging to fully understand the triggering pattern.<\/li>\n \t<li><b>Rebuild the API client (10 hours)<\/b> We rewrote the client using <code>httpx.AsyncClient<\/code>, implemented a semaphore-based throttle, added exponential backoff with jitter, and properly handled <code>Retry-After<\/code> and rate-limit headers.<\/li>\n \t<li><b>Stress test and validation (6 hours)<\/b> We simulated real-world usage with thousands of concurrent requests using Locust, tested rate throttling under different burst scenarios, and confirmed zero 429s under sustained load.<\/li>\n \t<li><b>Add monitoring and alerting (4 hours)<\/b> We set up custom Prometheus metrics to track API usage per minute, and added alerts to notify the team if they were nearing rate thresholds.<\/li>\n<\/ol>\n\n<h3>Total time: 26 hours<\/h3>\n<p>Two engineers, spread over two and a half days. Cost to client: around <b>$3,900<\/b>.<\/p>\n<p>The bigger problem is that their largest customer \u2014 a law firm with time-sensitive filings \u2014 missed two court submission windows due to the outage. The client had to do damage control and offer a discount to keep the account.<\/p>\n<p>All because a language model didn\u2019t understand the difference between &#8220;working code&#8221; and &#8220;production-ready code.&#8221; And just like that, another layer of AI technical debt was quietly added to the stack.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9b49bd3 e-con-full e-flex e-con e-child\" data-id=\"9b49bd3\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dba22e6 elementor-widget elementor-widget-heading\" data-id=\"dba22e6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Why this keeps happening<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0455228 elementor-widget elementor-widget-text-editor\" data-id=\"0455228\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The scary part isn\u2019t that these things go wrong. It\u2019s how predictable it\u2019s all becoming.<\/p><p>Every one of these incidents follows the same pattern. A developer asks ChatGPT for a code snippet. It returns something that works just well enough not to throw errors. They wire it into the system, maybe clean it up a little, and ship it, assuming that if it compiles and runs, it must be safe.<\/p><p>But here\u2019s the catch: Large language models don\u2019t know your system.<br \/>They don\u2019t know how your services interact.<br \/>They don\u2019t know your latency budget, your deployment pipeline, your observability setup, or your production traffic patterns.<\/p><p>They generate the most likely-looking code based on patterns in their training data. That\u2019s all. There\u2019s no awareness. No guarantees. No intuition for system design.<\/p><p>And the output often reflects that:<\/p><ul class=\"blackUl bottomText\"><li><b>Code that works once, but fails under load<\/b><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>No defensive programming, no fail-safes<\/b><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Poor understanding of real-world constraints like rate limits, timeouts, or eventual consistency<\/b><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Absolutely zero sense of architectural intent<\/b><\/li><\/ul><p>What\u2019s worse is that the code looks correct. It\u2019s syntactically clean. It passes linters. It might even be covered by a basic test. But it\u2019s missing the one thing that actually matters: context.<\/p><p>That\u2019s why these bugs don\u2019t show up right away. They wait for Friday night deployments, for high-traffic windows, for rare edge cases. That\u2019s the nature of AI technical debt &#8211; it\u2019s invisible until it breaks something critical.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fd674dc e-con-full e-flex e-con e-child\" data-id=\"fd674dc\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b6004ca elementor-widget elementor-widget-heading\" data-id=\"b6004ca\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">When AI actually helps<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42cebc1 elementor-widget elementor-widget-text-editor\" data-id=\"42cebc1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>As we mentioned earlier, we use AI too. Pretty much every engineer on our team has a Copilot-like setup running locally. It\u2019s fast, helpful, and honestly, a great way to skip the boring parts.<\/p><p>But here\u2019s the difference: nothing makes it into the main branch without going through a senior engineer, and in most cases, a CI pipeline that knows what to look for.<\/p><p>LLMs are great at:<\/p><ul class=\"blackUl bottomText\"><li>scaffolding boilerplate for new services or API endpoints,<\/li><li style=\"font-weight: 400;\" aria-level=\"1\">generating test coverage for existing logic,<\/li><li style=\"font-weight: 400;\" aria-level=\"1\">helping with repetitive refactoring across large codebases,<\/li><li style=\"font-weight: 400;\" aria-level=\"1\">translating simple shell scripts into infrastructure-as-code templates,<\/li><li style=\"font-weight: 400;\" aria-level=\"1\">or even comparing algorithmic approaches we already understand.<\/li><\/ul><p>What they\u2019re <b>not<\/b> good at is design. Or context. Or safe defaults.<\/p><p>That\u2019s why we\u2019ve built our workflows to treat LLM output like suggestions, not source of truth. Here\u2019s what that looks like in practice:<\/p><ul class=\"blackUl bottomText\"><li>We tag all AI-generated commits so they\u2019re easy to trace and review.<\/li><li style=\"font-weight: 400;\" aria-level=\"1\">Our editors have inline prompts, but with enforced pre-commit hooks that block anything without tests or documentation.<\/li><li style=\"font-weight: 400;\" aria-level=\"1\">Our CI includes static analysis rules that flag unsafe patterns we\u2019ve seen before from LLMs: things like unguarded retries, unscoped timeouts, naive JSON parsing, or unsafe SQL handling.<\/li><li style=\"font-weight: 400;\" aria-level=\"1\">Every pull request with LLM-generated code goes through a mandatory human review, usually by someone senior who understands the domain logic and risk surface.<\/li><\/ul><p>Used right, it\u2019s a time-saver. Used blindly, it\u2019s a time bomb.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c9b625f e-con-full e-flex e-con e-child\" data-id=\"c9b625f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-be1f4bb elementor-widget elementor-widget-heading\" data-id=\"be1f4bb\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What we recommend to CTOs<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2622eea elementor-widget elementor-widget-text-editor\" data-id=\"2622eea\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>We\u2019re not here to tell you to ban AI tools. That ship has sailed.<\/p><p>But giving a language model commit access? That\u2019s just asking for trouble.<\/p><p>Here\u2019s what we recommend instead:<\/p><h3>1. Treat LLMs like tools, not engineers<\/h3><p>Let them help with repetitive code. Let them propose solutions. But <b>don\u2019t trust them with critical decisions<\/b>. Any code generated by AI should be reviewed by a senior engineer, no exceptions.<\/p><h3>2. Make LLM-generated code traceable<\/h3><p>Whether it\u2019s commit tags, metadata, or comments in the code, <b>make it clear which parts came from AI<\/b>. That makes it easier to audit, debug, and understand the risk profile later on.<\/p><h3>3. Define a generation policy<\/h3><p>Decide as a team where it\u2019s acceptable to use LLMs and where it\u2019s not. Boilerplate? Sure. Auth flows? Maybe. Transactional systems? Absolutely not without review. <b>Make the policy explicit<\/b> and part of your engineering standards.<\/p><h3>4. Add DevOps-level monitoring<\/h3><p>If you\u2019re letting AI-generated code touch production, you need to assume something will eventually break. Add synthetic checks. Rate-limit monitors. Dependency tracking. <b>Make the invisible visible<\/b>, especially when the original author isn\u2019t human.<\/p><h3>5. Build for recoverability<\/h3><p>The biggest AI-driven failures we\u2019ve seen didn\u2019t come from \u201cbad\u201d code. They came from silent errors \u2014 missing data, broken queues, retry storms \u2014 that went undetected for hours. <b>Invest in observability, fallback logic, and rollbacks.<\/b> Especially if you\u2019re letting ChatGPT write migrations.<\/p><p>In short, AI can save your team time, but it can\u2019t take responsibility.<\/p><p>That\u2019s still a human job.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-662d902 e-con-full e-flex e-con e-child\" data-id=\"662d902\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14ef2da elementor-widget elementor-widget-heading\" data-id=\"14ef2da\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Closing thoughts: AI \u2260 software engineers<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7616f2 elementor-widget elementor-widget-text-editor\" data-id=\"e7616f2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>AI can help you move faster. But it can\u2019t think for you.<\/p><p>It doesn\u2019t understand your architecture. It doesn\u2019t know what \u201cdone\u201d means in your context. And it definitely doesn\u2019t care if your data pipeline silently breaks on a Friday night.<\/p><p>That\u2019s why, as CTOs, we need to stay focused on system resilience, not just speed.<\/p><p>It\u2019s tempting to let AI handle the boring parts. And sometimes that\u2019s fine. But every shortcut comes with a tradeoff. When AI-generated code slips through unchecked, it often becomes AI technical debt. The kind you don\u2019t see until your ops team is firefighting in production.<\/p><p>If you\u2019ve already run into that wall, you\u2019re not alone. We\u2019ve helped teams recover from everything from broken migrations to API disasters. We don\u2019t just refactor code. We help refactor the thinking behind it.<\/p><p>Because in the end, that\u2019s what actually makes systems reliable.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f24459 e-con-full e-flex e-con e-child\" data-id=\"7f24459\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c34e772 elementor-widget elementor-widget-shortcode\" data-id=\"c34e772\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[post_share]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-43a0c63 e-con-full tablePadding40 e-flex e-con e-child\" data-id=\"43a0c63\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-f8524ba e-grid e-con-full e-con e-child\" data-id=\"f8524ba\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96f5913 elementor-widget elementor-widget-image\" data-id=\"96f5913\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/06\/Philip-Tihonovich.png\" class=\"attachment-full size-full wp-image-183711\" alt=\"\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/06\/Philip-Tihonovich.png 150w, https:\/\/innowise.com\/wp-content\/uploads\/2025\/06\/Philip-Tihonovich-12x12.png 12w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-326d86b e-con-full e-flex e-con e-child\" data-id=\"326d86b\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-ac422d3 e-con-full e-flex e-con e-child\" data-id=\"ac422d3\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6065798 fioBottom elementor-widget elementor-widget-heading\" data-id=\"6065798\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\"><a href=\"\/authors\/philip-tikhanovich\/\">Philip Tikhanovich<\/a><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a44acf3 elementor-widget elementor-widget-image\" data-id=\"a44acf3\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.linkedin.com\/in\/tihonfil\/\" target=\"_blank\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"32\" height=\"33\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/04\/Social-icons-1.svg\" class=\"attachment-full size-full wp-image-181902\" alt=\"Linkedin icon\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d30fe50 elementor-widget elementor-widget-text-editor\" data-id=\"d30fe50\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tHead of Python, Big Data, ML\/DS\/AI Department\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-86069e5 e-con-full e-flex e-con e-child\" data-id=\"86069e5\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ae37326 text4String elementor-widget elementor-widget-text-editor\" data-id=\"ae37326\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tPhilip brings sharp focus to all things data and AI. He&#8217;s the one who asks the right questions early, sets a strong technical vision, and makes sure we\u2019re not just building smart systems \u2014 we\u2019re building the right ones, for real business value.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a39f7c readMore elementor-widget elementor-widget-heading\" data-id=\"7a39f7c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"\/authors\/philip-tikhanovich\/\">Read more<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0b7f46c table-content-container e-con-full e-flex e-con e-child\" data-id=\"0b7f46c\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c64ce58 e-con-full stickyTable e-flex e-con e-child\" data-id=\"c64ce58\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-76e3778 author-block e-con-full e-flex e-con e-child\" data-id=\"76e3778\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-320b245 ddcv elementor-widget elementor-widget-html\" data-id=\"320b245\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n\r\n.article-description > .e-con-inner{\r\n     align-items: baseline !important;\r\n}\r\n\r\n.table-content-container {\r\n    position: sticky;\r\n    top: 72px;\r\n    bottom: auto;   \r\n}  \r\n\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", ()=>{\r\n        \r\nconst headerElement = document.querySelector(\".new-menu\");\r\n\r\nconst stickyElement = document.querySelector(\".table-content-container\");\r\n\r\nconst headerElementH = headerElement.clientHeight;\r\n\r\nstickyElement.style.top =  headerElementH + 60 + \"px\"\r\n        \r\n});\r\n<\/script>\r\n\r\n\r\n<!--NOTE Change data-id in wrapper styles for hide this block on the mobile device screen-->\r\n<div class=\"toc-wrapper\">\r\n  <h3 class=\"toc-title\">Table of contents<\/h3>\r\n  <div class=\"toc toc-2\"><\/div>\r\n<\/div>\r\n\r\n<script>\r\n  \/\/NOTE Add the value from h2 as the key and the text you want to display as the key value in LINKS variable:\r\n  \/\/   const LINKS = {\r\n  \/\/       \"The demand for retail digital transformation\": \"The demand\"\r\n  \/\/   }\r\n\r\n  \r\n  \/\/NOTE Add the value from h2 as the key and the text you want to display as the key value in LINKS variable:\r\n  \/\/   const LINKS = {\r\n  \/\/       \"The demand for retail digital transformation\": \"The demand\"\r\n  \/\/   }\r\n\r\n  const LINKS = {\r\n    \"Unleashing the power of .NET 8\": \"gggggg\",\r\n    \"Revamping legacy systems: unlocking business potential through software modernization\":\r\n      \"hello\",\r\n  };\r\n\r\n  const OFFSET = 70;\r\n   const PADDING_BOTTOM_FOR_SCROLL = 100;\r\n  let headerList = [];\r\n  let allLinks = [];\r\n  \r\n  let ticking = false;\r\n     \r\n\r\n  const createList = () => {\r\n      \r\n      console.log('create');\r\n      \r\n      \r\n    const tocTarget = document.querySelector(\".toc.toc-2\");\r\n    const toc = document.createElement(\"ul\");\r\n    \r\n    \r\n    \r\n     headerList = [...document.querySelectorAll(\"h2\")];\r\n\r\n\r\n    \r\n    headerList = headerList.slice(0, -3);\r\n    \r\n    const filteredNodes = [document.querySelector(\".related_content_blog_container h2\")]\r\n    \r\n    headerList = headerList.filter((node)=> !filteredNodes.includes(node))\r\n    \r\n    \r\n   headerList.forEach((header,index) => {\r\n      const headerId = header.getAttribute(\"id\");\r\n      const headerText =\r\n        header.dataset.title && header.dataset.title !== \"\"\r\n          ? header.dataset.title\r\n          : header.textContent;\r\n          \r\n\r\n      const headerTocText = header.dataset.title;\r\n\r\n      const idFromText =\r\n        !headerId || headerId === \"\"\r\n          ? headerText\r\n              .toLowerCase()\r\n              .replace(\/[^\\w ]+\/g, \"\")\r\n              .replace(\/ +\/g, \"-\")\r\n          : headerId;\r\n          \r\n         \r\n\r\n      const newListItem = document.createElement(\"li\");\r\n      const newLink = document.createElement(\"a\");\r\n      newLink.setAttribute(\"href\", \"#\" + idFromText);\r\n      newLink.textContent = LINKS[headerText] || headerText;\r\n\r\n      newLink.addEventListener(\"click\", (e) => {\r\n          \r\n        e.preventDefault();\r\n        const y =\r\n          header.getBoundingClientRect().top +\r\n          window.pageYOffset -\r\n          PADDING_BOTTOM_FOR_SCROLL -\r\n          OFFSET;\r\n          ticking = true; \r\n        window.scrollTo({ top: y, behavior: \"smooth\" });\r\n        \r\n        setTimeout(()=>{\r\n            ticking = false;\r\n        },500);\r\n        \r\n      });\r\n      \r\n\r\n      newListItem.appendChild(newLink);\r\n    toc.appendChild(newListItem);\r\n    \r\n    \r\n    });\r\n    tocTarget.appendChild(toc);\r\n    allLinks = Array.from(document.querySelector(\".toc.toc-2\").querySelectorAll(\"ul li\"));\r\n  };\r\n\r\n  const setContainerHeight = () => {\r\n    const windowHeight = window.innerHeight;\r\n    const tocContainer = document.querySelector(\".ddcv\");\r\n\r\n    tocContainer.style.maxHeight = \"calc(100vh - 230px)\";\r\n    tocContainer.style.minHeight = \"200px\";\r\n  };\r\n\r\n\r\n  const checkScroll = () => {\r\n      const windowHeight = window.innerHeight;\r\n      const scrollTop = window.scrollY || document.documentElement.scrollTop;\r\n\r\n      let selectedHeaderIndex = -1;\r\n\r\n      headerList.forEach((header, index) => {\r\n        \r\n  const posTop = header.getBoundingClientRect().top;\r\n       \r\n\r\n const isInViewport = posTop + elem.clientHeight <= window.innerHeight ;\r\n \r\n\r\n \r\n if(isInViewport){\r\n      selectedHeaderIndex = index;\r\n }\r\n        \r\n\r\n\r\n        \r\n      });\r\n      \r\n\r\n\r\n        allLinks.forEach((link, i) => {\r\n            if(i === selectedHeaderIndex){\r\n              link.classList.remove(\"pre-active\");  \r\n              link.classList.add(\"active\");\r\n            }\r\n            if(i < selectedHeaderIndex){\r\n              link.classList.add(\"pre-active\"); \r\n               link.classList.remove(\"active\");\r\n            }\r\n             if(i > selectedHeaderIndex){\r\n            link.classList.remove(\"pre-active\");\r\n            link.classList.remove(\"active\");\r\n            }\r\n            \r\n            \r\n            \r\n        });\r\n        \r\n\r\n\r\n  };\r\n\r\n  const loadAllImages = () => {\r\n    const images = document.getElementsByTagName(\"img\");\r\n\r\n    for (let i = 0; i < images.length; i++) {\r\n      const img = images[i];\r\n      const src = img.getAttribute(\"data-src\") || img.src;\r\n      img.src = src;\r\n    }\r\n  };\r\n\r\n  loadAllImages();\r\n  \r\n  \r\n  \r\n\r\n\r\n  document.addEventListener(\"DOMContentLoaded\", () => {\r\n      \r\n      \r\n     setTimeout(()=>{\r\n           createList();\r\n    setContainerHeight();\r\n  \r\n    \r\n    document.addEventListener(\"scroll\", (event) => {\r\n  if (!ticking) {\r\n    checkScroll();\r\n  }\r\n});\r\n    \r\n    \r\n},300) \r\n\r\n    \r\n  });\r\n  \r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0bf68d9 e-flex e-con-boxed e-con e-parent\" data-id=\"0bf68d9\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ca9837f elementor-widget elementor-widget-shortcode\" data-id=\"ca9837f\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f100240-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"100240\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/de\/wp-json\/wp\/v2\/posts\/185856#wpcf7-f100240-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" enctype=\"multipart\/form-data\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"100240\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f100240-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<style>\n#form-templates .contact__info {\n  background-color: #f4f4f4;\n  padding: 70px 44px 70px 50px;\n  position: relative;\n  max-width: 540px;\n  width: 100%;\nborder: 1px solid #AEB1B7;\n}\n\n#form-templates .contact__info-background {\n  z-index: -1;\n  position: absolute;\n  top: 20px;\n  left: 20px;\n  width: 100%;\n  height: 100%;\n  border: 1px dashed #ef4557;\n}\n\n\n#form-templates .new-container{\ndisplay: flex;\njustify-content: space-between;\nflex-wrap: wrap;\n}\n\n\n#form-templates{\npadding: 100px 15px 100px 15px;        \n}\n\n#form-templates .contact__info-heading {\n  font-family: 'Sora' !important;\n  font-style: normal !important;\n  font-weight: 400 !important;\n  font-size: 36px !important;\n  line-height: 46px !important;\n  color: #2E2E2E !important;\n   margin-bottom: 60px !important;\n\n}\n\n\n#form-templates .message label{\ncolor: #585858 !important;   \n}\n\n.elementor-widget-container.form-template h2,.elementor-widget-container.form-template h1{\n font-size: 60px !important;\n  line-height: 70px !important;\n  font-family: \"Sora\", Sans-serif;\n  font-weight: 400;\n  margin: 0;  \n  margin-bottom: 20px;\n}\n\n\n\n\n.elementor-widget-container.form-template p{\n  font-family: \"Karla\", Sans-serif;\n  font-size: 22px;\n  font-weight: 400;\n  line-height: 28px;\n  color: var( --e-global-color-primary );\n  max-width: 700px;\n  margin: 0; \n  margin-bottom: 40px;\n} \n  \n\n\n.new-container #spinner{\nwidth: 50%;\nmax-width: 700px;\n}\n\n\n#form-templates .new-container #spinner div.contact-us__wrapper:nth-child(6){\ngap:30px; \n    \n}\n\n\n#form-templates .contact__info-heading {\n  margin-bottom: 67px;\n  font-size: 36px;\n  font-family: karla;\n  color:  #2E2E2E;\n\n  line-height: 49px;\n}\n\n#form-templates .contact__info-steps {\n  display: flex;\n  flex-direction: column;\n  max-width: 425x;\n  row-gap: 20px;\n  border-left: 1px solid #2e2e2e;\n}\n\n#form-templates .contact__info-block {\n  position: relative;\n  padding-left: 45px;\n}\n\n#form-templates .contact__info-block:last-child {\n  box-shadow: -1px 0 0 1px #f4f4f4;\n}\n\n#form-templates .contact__info-step {\n  position: absolute;\n  border: 1px solid #2e2e2e;\n  width: 40px;\n  height: 40px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 20px;\n  left: -20px;\n  top: -8px;\n  background-color: #F4F4F4;\n  color:  #2E2E2E;\n\nfont-family: Karla;\nfont-weight: 700;\nfont-size: 18px;\nline-height: 28px;\n\n}\n\n.elementor-widget-global .contact__info-step {\n        color:  #2E2E2E;\n}\n\n#form-templates .contact__info-text {\n  margin: 0;\n  font-size: 16px;\n  line-height: 26px;\n  color: #2E2E2E;\n  font-family: karla;\n\n  width: 100%;\n}\n\n\n#form-templates .contact-us__send{\nflex-shrink: 0;\nmargin-top:0;\n}\n\n\n\n@media screen and (max-width: 1279px) {\n    .new-container #spinner{\n        width: 100%;\n        max-width:100%;\n        margin-bottom:40px;\n    }\n    \n\n    .new-container .contact__info {\n        max-width: 700px !important;\n    }\n    \n}\n\n\n@media screen and (max-width: 1279px) {\n#form-templates{\npadding: 60px 15px 70px 15px;     \n}\n}\n\n\n\n@media screen and (max-width: 767px) {\n\n#form-templates .new-container #spinner div.contact-us__wrapper:nth-child(6){\ngap:20px; \n \n}\n\n\n  #form-templates .contact__info {\n    padding: 20px 20px 40px 40px;\n    margin: 0 auto;\n  }\n\n\n#form-templates{\npadding: 40px 15px 50px 15px;  \n    \n}\n\n  \n   .new-container #spinner{\n       \n    margin-bottom:30px;   \n   }\n   \n   \n   .elementor-widget-container.form-template h2,.elementor-widget-container.form-template h1{\n   font-size: 32px !important;\n    line-height: 42px !important;    \n   }\n   \n   \n   .elementor-widget-container.form-template p{\n       \n    font-size: 16px;\n    line-height: 20px;  \n    margin-bottom: 30px;\n \n       \n   }\n   \n   #form-templates .contact__info-heading{\n   font-size: 24px !important;\n    line-height: 49px !important;    \n       \n   }\n   \n\n.mailToContact{\nmargin-top: 10px !important;        \n}\n   \n\n  #form-templates .contact__info-heading {\n    font-size: 24px;\n    margin-bottom: 37px;\n  }\n\n  #form-templates .contact__info-background {\n    top: 10px;\n    left: 10px;\n  }\n\n  #form-templates .contact__info-text {\n    font-size: 12px;\n    line-height: 20px;\n  }\n  \n  \n  #form-templates .contact__info-heading {\n   margin-bottom: 35px !important;\n\n}\n\n}\n\n@media (max-width: 767px) {\n    .mailToContact {\n        max-width: 100%;\n    }\n}\n<\/style>\n\n<script>\nwindow.addEventListener('hashchange',function(e){if(window.history.pushState){window.history.pushState('','\/',window.location.pathname)}else{window.location.hash=''}})\n<\/script>\n\n\n<div id=\"form-templates\">\n<div class=\"elementor-widget-container form-template\">\n<a name=\"contact-form\"><\/a>\n<h2>Contact us<\/h2>\n<p><a id=\"calendlylink\" style=\"color: #c63031; border-bottom: 1px solid #c63031; padding: 0;\">Book a call<\/a> or fill out the form below and we\u2019ll get back to you once we\u2019ve processed your request.<\/p>\n<\/div>\n\n<div class=\"new-container\">\n\n\n<div class=\"contact-us__main\" id=\"spinner\" data-no-defer=\"1\">\n\n<div class=\"contact-us__wrapper\">\n\n<div class=\"name\">\n<label>Name<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"field_name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required contact-us__name\" id=\"contact-name\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name*\" value=\"\" type=\"text\" name=\"field_name\" \/><\/span>\n<\/div>\n\n<div class=\"company\">\n<label>Company<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required contact-us__company\" id=\"contact-company\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Company*\" value=\"\" type=\"text\" name=\"company\" \/><\/span>\n<\/div>\n\n<\/div>\n\n<div class=\"contact-us__wrapper\">\n\n<div class=\"email\">\n<label>Email<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email contact-us__email\" id=\"contact-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Corporate email*\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n<\/div>\n\n<div class=\"phone\">\n<label>Phone<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"tel\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel contact-us__phone\" id=\"contact-phone\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Phone*\" value=\"\" type=\"tel\" name=\"tel\" \/><\/span>\n<\/div>\n\n<\/div>\n<div class=\"contact-us__wrapper subj\">\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-recipient\"><select class=\"wpcf7-form-control wpcf7-select\" id=\"form-field-subj_js\" aria-invalid=\"false\" name=\"your-recipient\"><option value=\"\">Subject*<\/option><option value=\"IT staff augmentation\">IT staff augmentation<\/option><option value=\"Turnkey product development\">Turnkey product development<\/option><option value=\"Support and enhancement\">Support and enhancement<\/option><option value=\"Careers\">Careers<\/option><option value=\"Other\">Other<\/option><\/select><\/span>\n\n<span class=\"wpcf7-form-control-wrap\" data-name=\"form-field-budget_js\"><select class=\"wpcf7-form-control wpcf7-select\" id=\"form-field-budget_js\" aria-invalid=\"false\" name=\"form-field-budget_js\"><option value=\"\">Project budget<\/option><option value=\"Under $15K\">Under $15K<\/option><option value=\"$15K-$30K\">$15K-$30K<\/option><option value=\"$30K-$100K\">$30K-$100K<\/option><option value=\"$100K-$250K\">$100K-$250K<\/option><option value=\"$250K-$500K\">$250K-$500K<\/option><option value=\"More than $500K\">More than $500K<\/option><\/select><\/span>\n\n<\/div>\n\n\n<div class=\"message\">\n<label>Message<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"message\"><textarea cols=\"40\" rows=\"1\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required contact-us__message\" id=\"contact-message\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Describe your needs in detail*\" name=\"message\"><\/textarea><\/span>\n<\/div>\n\n<div class=\"atvoice-wrap\">\n\n<div class=\"voice-wrap\">\n<span id=\"voice-mut\" class=\"voicetext\">Send us a voice message<\/span>\n         <div class=\"qc_voice_audio_wrapper\">\n            <div class=\"qc_voice_audio_container\">\n                <div class=\"qc_voice_audio_upload_main\" id=\"qc_audio_main\">\n                    <a class=\"qc_audio_record_button\" id=\"qc_audio_record\" href=\"#\" aria-label=\"Record an audio message\">\n                        <span class=\"dashicons dashicons-microphone\"><\/span> \u00a0<\/a> \n                <\/div>\n\n                <div class=\"qc_voice_audio_recorder\" id=\"qc_audio_recorder\" style=\"display:none\">\n\n                <\/div>\n                <div class=\"qc_voice_audio_display\" id=\"qc_audio_display\"  style=\"display:none\">\n                    <audio id=\"qc-audio\" controls src=\"\"><\/audio>\n                    <span title=\"Remove and back to main upload screen.\" class=\"qc_audio_remove_button dashicons dashicons-trash\"><\/span>\n                <\/div>\n            <\/div>\n            <input type=\"hidden\" value=\"\" name=\"qcwpvoicemessage\" id=\"qc_audio_url\" \/>\n        <\/div>\n        \n<\/div>\n\n\n<div class=\"attach-wrap\">\n<span class=\"voicetext\">Attach documents<\/span>\n\n<div class='attachment'>\n\n<div class=\"downloaded\">\n<span><\/span>\n<div class=\"deleteFile\"><\/div>\n<\/div>\n\n<div class=\"attachmentButton\" onclick=\"(function cl(e){if(e.target.nodeName == 'DIV'){e.target.parentNode.children[1].children[0].click(); }})(arguments[0]);\">\n\n<div class=\"innerText\">Upload file<\/div>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"att-files\"><input size=\"40\" class=\"wpcf7-form-control wpcf7-file\" accept=\".jpg,.png,.jpeg,.pdf\" aria-invalid=\"false\" type=\"file\" name=\"att-files\" \/><\/span>\n\n<div class=\"tip\" onclick=\"event.stopPropagation()\">\n<p>You can attach 1 file up to 2MB. Valid file formats: pdf, jpg, jpeg, png.<\/p>\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<\/div>\n\n<div class=\"contact-us__wrapper\"> \n<p class=\"pp\">By clicking Send, you consent to Innowise processing your personal data per our<a href=\"\/privacy-notice\/\"> Privacy Policy <\/a>to provide you with relevant information. By submitting your phone number, you agree that we may contact you via voice calls, SMS, and messaging apps. Calling, message, and data rates may apply.<\/p>\n\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"scoring_point\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmCampaign\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmContent\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmMedium\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmSource\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmTerm\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"location\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"city\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"ip\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"Summ\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"gclid\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"rating\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"urlCompany\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"urlWithParams\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"audioMessageLink\" \/>\n<input class=\"wpcf7-form-control wpcf7-submit has-spinner contact-us__send\" id=\"contact-send-button\" type=\"submit\" value=\"Send\" \/>\n<\/div>\n\n<div class='mailToContact'>You can also send us your request <\/br>to <a href=\"mailto:contact@innowise.com\">contact@innowise.com<\/a><\/div>\n\n<\/div>\n\n<div class=\"elementor-widget-container\" style=\"z-index:1;\">\n<div class=\"contact__info\">\n  <div class=\"contact__info-background\"><\/div>\n  <div class=\"contact__info-heading\">What happens next?<\/div>\n  <div class=\"contact__info-steps\">\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">1<\/div>\n      <p class=\"contact__info-text\">Once we\u2019ve received and processed your request, we\u2019ll get back to you to detail your\n        project needs and sign an NDA to ensure confidentiality.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">2<\/div>\n      <p class=\"contact__info-text\">After examining your wants, needs, and expectations, our team will devise a project\n        proposal with the scope of work, team size, time, and cost estimates.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">3<\/div>\n      <p class=\"contact__info-text\">We\u2019ll arrange a meeting with you to discuss the offer and nail down the details.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">4<\/div>\n      <p class=\"contact__info-text\">Finally, we\u2019ll sign a contract and start working on your project right away.<\/p>\n    <\/div>\n  <\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\n<\/div>\n\n<\/div><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"related_content_blog_container\">[related_content_list]<\/div><script>\n            jQuery( document ).ready(function($) {\n            var parentSection = $('[data-elementor-type=\"wp-page\"]');\n            if($('[data-elementor-type=\"wp-post\"]').length){\n                var parentSection = $('[data-elementor-type=\"wp-post\"]');\n            }\n            \n                parentSection.children().last().before($('.related_content_blog_container'));\n            });\n            <\/script><div class=\"other_services_container\">[need_other_services_v2]<\/div><script>\n                    jQuery( document ).ready(function($) {\n                        var parentSection = $('[data-elementor-type=\"wp-page\"]');\n                        if($('[data-elementor-type=\"wp-post\"]').length){\n                            var parentSection = $('[data-elementor-type=\"wp-post\"]');\n                        }\n                        \n                        console.log(parentSection);\n                        parentSection.children().last().before($('.other_services_container'));\n                        var sections = parentSection.find('.net-15.dt-16');\n                        for(var i = 0; i<sections.length; i++){\n                            if($(sections[i]).hasClass( 'net-15' ) && $(sections[i]).hasClass( 'dt-16' ) && $(sections[i]).hasClass( 'elementor-hidden-desktop' )==false){\n                                $(sections[i]).before($('.other_services_container'));   \n                            }\n                        }\n                        \n                    });\n                <\/script>","protected":false},"excerpt":{"rendered":"<p>The power of data mapping in healthcare: benefits, use cases &#038; future trends. As the healthcare industry and its supporting technologies rapidly expand, an immense amount of data and information is generated. Statistics show that about 30% of the world&#8217;s data volume is attributed to the healthcare industry, with a projected growth rate of nearly [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":185857,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1486,128],"class_list":["post-185856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artsiom_kozak","category-blog","tag-ai-ml","tag-it-consulting"],"acf":[],"_links":{"self":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/posts\/185856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/comments?post=185856"}],"version-history":[{"count":0,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/posts\/185856\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/media\/185857"}],"wp:attachment":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/media?parent=185856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/categories?post=185856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/tags?post=185856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}