<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Dennis on Medium]]></title>
        <description><![CDATA[Stories by Dennis on Medium]]></description>
        <link>https://medium.com/@Dennis.laetsch?source=rss-48cab03e4f50------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*LSJpDc8kRGDwl2nRLspNew@2x.jpeg</url>
            <title>Stories by Dennis on Medium</title>
            <link>https://medium.com/@Dennis.laetsch?source=rss-48cab03e4f50------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 24 May 2026 12:51:21 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@Dennis.laetsch/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[The World depends on 800 billion lines of Legacy-Code]]></title>
            <link>https://medium.com/@Dennis.laetsch/the-world-depends-on-800-billion-lines-of-legacy-code-6dbaf1b4f8ab?source=rss-48cab03e4f50------2</link>
            <guid isPermaLink="false">https://medium.com/p/6dbaf1b4f8ab</guid>
            <category><![CDATA[development]]></category>
            <category><![CDATA[legacy-code]]></category>
            <category><![CDATA[cobol]]></category>
            <category><![CDATA[programming-languages]]></category>
            <category><![CDATA[legacy-systems]]></category>
            <dc:creator><![CDATA[Dennis]]></dc:creator>
            <pubDate>Fri, 14 Jun 2024 13:05:10 GMT</pubDate>
            <atom:updated>2024-06-14T13:59:18.190Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>In case you haven’t guessed the programming language I’m talking about, it’s COBOL.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8s3ydFz_PresBiXoQyo4tg.png" /></figure><p>The acronym of <strong>COBOL </strong>stands for (Common Business-Oriented Language). A imperative, procedural and English-like programming language designed by Grace Hopper In the sixties. <br>COBOL has the reputation of being totally outdated, even most universities don’t teach COBOL these days. COBOL is commonly used on mainframes, especially in industries such as banking, aviation, insurance, government, healthcare, and automotive. In this article, we explore the reasons for the continued use of COBOL and mainframes, and the problems this poses for an industry that relies on a more than 60-year-old programming language to process $3 trillion in transactions every day.</p><h3>The Relevance of COBOL and Mainframes</h3><p>According to surveys by <a href="https://www.opentext.com/en-gb/what-is/cobol">Micro Focus (2022)</a>, around 800 billion lines of COBOL code are used in production every day. 50 percent of the companies surveyed believe that they will be using more COBOL code in 12 months’ time than they currently do. 92 percent of respondents stated that their organizations’ COBOL applications are strategic with future IT strategy. Between 60% and 80% of all transactions conducted worldwide are done in COBOL.</p><p>During the Corona crisis, COBOL even made headlines when the U.S. government had problems with its COBOL-based IT, when suddenly 10 million people were out of work, and retired engineers came to the rescue.</p><h4>Why Companies Stick with the Old</h4><ol><li><strong>Stability and Reliability</strong>: COBOL and mainframes have proven themselves over decades, providing the stability that is critical for systems that handle essential business operations. The reliability of these systems outweighs the perceived benefits of adopting newer technologies.</li><li><strong>Legacy Code Dependence</strong>: Many organizations have vast amounts of legacy COBOL code, often developed over years or even decades. Rewriting or replacing this code is a daunting task that carries significant risk and cost.</li><li><strong>Mission-Critical Systems</strong>: COBOL underpins applications that are critical to business operations. The potential disruptions and financial risks associated with migrating away from these systems make organizations hesitate to make the transition.</li></ol><h3>Industry Challenges and Costs</h3><p>The industry faces several challenges due to the continued use of COBOL and mainframes.</p><p>One pressing issue is the shortage of skilled COBOL developers. As the demand for COBOL engineers continues and the so-called “<a href="https://cobolcowboys.com/">COBOL Cowboys</a>&quot; age out of the workforce, companies are struggling to find qualified professionals, resulting in a competitive job market. To be fair, due to the enormous code base that exists in the companies, the day-to-day work consists more of fixing bugs than developing new innovative solutions. Maintenance isn’t everyone’s idea of an exciting job, but maybe it is for some of us.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*INAaFVmDU6rH6GCxIGK_aQ.png" /><figcaption>COBOL cares about what column your code is in. This is all based on the days when code was written with punch cards.</figcaption></figure><p>In addition, mainframes are generally expensive to maintain and to upgrade. IBM’s monopoly position in the mainframe market adds to the financial burden on businesses, limiting options and potentially stifling innovation.</p><p>Despite the good reasons for sticking with COBOL mentioned above, for some companies the negatives outweigh the benefits and they have managed to migrate their technology stack.</p><h3>Migration Stories</h3><p>Several companies have successfully moved away from COBOL and mainframes and adopted newer technologies to future-proof their operations. For example, <a href="https://www.capitalone.com/software/blog/cloud-migration-journey/">Capital One</a> moved from mainframes to microservices and cloud-based solutions. Their success can be attributed to careful planning, phased implementation, and a commitment to addressing the challenges posed by legacy systems.</p><h4>Why It’s Hard for Others</h4><ol><li><strong>Complexity of Legacy Code:</strong> As mentioned above, the sheer volume of existing COBOL code is a daunting challenge. For many organizations, the complexity of deciphering and rewriting this code is a major deterrent.</li><li><strong>Fear of Service Interruptions:</strong> Organizations fear that migrating away from COBOL and mainframes will result in service disruptions that will impact operations and potentially cause financial losses or even bankruptcy.</li><li><strong>Regulatory Compliance:</strong> In highly regulated industries such as finance and healthcare, compliance concerns make it difficult to make the transition. The long-standing presence of COBOL has made it easier to comply with regulations, making organizations reluctant to change.</li></ol><h3>Conclusion</h3><p>The lack of qualified developers, the high maintenance costs and IBM’s monopoly do not make the situation easy. Some successful migrations show what is possible with precise planning. Despite the age, COBOL and the mainframe will survive due to their stability, reliability, and the challenges associated with migration, and as we have seen, the market is actually growing. It remains to be seen which path the industry will take. Currently, the developments in generative AI are a promising solution to solve the lack of developers in this area, but it remains exciting — maybe one day I will give my kids some COBOL lessons ;).</p><p>PS: Funny… today I found out that Cobol was part of my university script, namely the implementation of the Fibonacci sequence: <a href="https://github.com/KnowledgePending/COBOL-Fibonacci-Sequence/blob/master/fib.cbl">https://github.com/KnowledgePending/COBOL-Fibonacci-Sequence/blob/master/fib.cbl</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6dbaf1b4f8ab" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Navigating the Perfectionism Paradox: Making Decisions in Software Projects]]></title>
            <link>https://medium.com/@Dennis.laetsch/navigating-the-perfectionism-paradox-making-decisions-in-software-projects-45965064aac5?source=rss-48cab03e4f50------2</link>
            <guid isPermaLink="false">https://medium.com/p/45965064aac5</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[agile-methodology]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[decision-making]]></category>
            <dc:creator><![CDATA[Dennis]]></dc:creator>
            <pubDate>Wed, 20 Dec 2023 19:04:23 GMT</pubDate>
            <atom:updated>2024-06-14T13:33:40.924Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introduction:</h3><p>In the dynamic realm of software development, the pursuit of perfection often walks hand in hand with the need for effective decision-making. However, the pitfalls of overthinking can cast a shadow on the development process, leading to delays, missed opportunities, and the unintended costs of implicit decisions. In this article, we’ll explore the delicate balance between perfectionism and decision-making in software projects.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PGUpksdy1svsp4tK2zb1lw.png" /><figcaption><a href="https://en.wikipedia.org/wiki/Analysis_paralysis">The Thinker</a> by <a href="https://www.flickr.com/people/95969344@N00">Douglas O’Brien</a></figcaption></figure><h3>The Perfectionism Paradox</h3><p>The desire to create flawless code and excellent solutions can unintentional lead to excessiv analysis and lenghty decision-making processes (Analysis paralysis). It is important to recognize the fine line between the pursuit of excellence and the danger of perfectionism.</p><h3>The Cost of Overthinking</h3><p>In software development, time is of the essence. Overthinking often leads to a state where teams are so focused by the desire for a perfect solution that decision-making comes to a standstill. The cost of overthinking is not merely the time lost in indecision: it extends to missed opportunities, strained team dynamics, and the unintended consequences of implicit decisions made under pressure.</p><h3>Implicit Decisions and Their Hidden Costs</h3><p>Implicit decisions, often born out of indecision or rushed choices, can have far-reaching consequences. A seemingly harmless assumption made early in the project can lead to a lack of flexibility, requiring extensive refactoring down the line. Understanding the hidden costs of implicit decisions is crucial for fostering a culture of conscious decision-making.</p><h3>Embracing Iteration and Learning</h3><p>The Agile methodology, with its emphasis on flexibility and responsiveness, provides an effective antidote to the pitfalls of perfectionism. Instead of striving for perfection from the outset, embrace an iterative approach. Make decisions based on the best information available, knowing that adjustments and improvements can be made as the project progresses. This requires an environment in which decisions can be reflected upon.</p><h3>Start Documenting Decisions</h3><p>If the team does not record decisions, how do you want to reflect on them interactively, especially if the team composition changes?<br>Tools like Architecture Decision Record (ADRs) are a good way to document decisions and consequences of each choice.<br>Start with a document on a place where your whole team can collaborate together. There are plenty of templates for ADRs. Keep them short one or two Pages max. Large documents are never kept up to date.</p><h3>Keep Learning and Iterate</h3><p>Embrace a learning mindset. Treat each decision as an opportunity for growth, learning from both successes and failures to continually refine the decision-making process. If a decision leads to unexpected challenges or inefficiencies, a continuous learning approach encourages the team to analyze the situation, learn from mistakes, and make informed adjustments. If you have an ADR and the decision is reversed keep the old one around and mark it as superseded. It could be relevant to know what was the decision once, but is no longer the decision.</p><h3>Conclusion</h3><p>In an environment as dynamic as software development, perfectionism can hinder progress and stifle innovation. Striking a balance between the pursuit of excellence, the costs of delayed decisions, and the need for timely decision-making is crucial for success. By embracing an iterative mindset, implementing decision frameworks, and leveraging Agile methodologies, software development teams can navigate the perfectionism paradox, avoid the hidden costs of delayed decisions, and deliver outstanding results in a rapidly changing landscape.</p><p><strong>Remember</strong> that the perfect is constantly changing. It is a constantly moving target that will never stop.</p><p><strong>Reference</strong>:<br>Decision record templates: <a href="https://github.com/joelparkerhenderson/architecture-decision-record">https://github.com/joelparkerhenderson/architecture-decision-record</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45965064aac5" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>