<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.2.2">Jekyll</generator><link href="https://higherlevel.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://higherlevel.dev/" rel="alternate" type="text/html" /><updated>2024-10-15T13:31:45+00:00</updated><id>https://higherlevel.dev/feed.xml</id><title type="html">HigherLevel.dev</title><subtitle>HigherLevel.dev: Revolutionizing software development with AI-powered agents. Learn how to code more efficiently using natural language.</subtitle><author><name>Higher Level Software Ltd</name></author><entry><title type="html">Not investing in AI Augmented Development is commercial suicide</title><link href="https://higherlevel.dev/Economics-Of-Higher-Level-Dev.html" rel="alternate" type="text/html" title="Not investing in AI Augmented Development is commercial suicide" /><published>2024-10-04T00:00:00+00:00</published><updated>2024-10-04T00:00:00+00:00</updated><id>https://higherlevel.dev/Economics-Of-Higher-Level-Dev</id><content type="html" xml:base="https://higherlevel.dev/Economics-Of-Higher-Level-Dev.html"><![CDATA[<p>Before Eli Whitney invented the cotton gin in 1793, a worker could clean about 450 grams of cotton per day manually. With the cotton gin, that same worker could process 23 kilograms—a 50x productivity boost. Similarly, Cyrus McCormick’s mechanical reaper, introduced in 1831, revolutionized farming by allowing a single person to harvest up to 12 acres of grain in a day, compared to the half-acre possible with traditional methods—a 24x increase. And then, in 1913, Henry Ford’s assembly line delivered an 8x improvement in automobile production, reducing the time to assemble a car from 12 hours to just 90 minutes.</p>

<p>This pattern of radical productivity increases is now happening in software development. Today, with the right AI tools, developers can boost their productivity by a factor of three to four. In the near future, we can expect this to jump to 10x, and perhaps even 50x.</p>

<p>In previous posts, we’ve seen an AI Software Engineering Agent complete <a href="https://higherlevel.dev/Intro-to-Higher-Level-Dev.html" target="_blank">two hours of manual coding work in just two minutes</a>. We’ve also explored how <a href="https://higherlevel.dev/Claude-Surpasses-Expectations.html" target="_blank">human + AI partnerships deliver superior results</a> compared to humans working alone.</p>

<h3 id="a-seismic-shift-in-developer-work-patterns">A Seismic Shift in Developer Work Patterns</h3>

<p>A <a href="https://www.gartner.com/en/newsroom/press-releases/2024-10-03-gartner-says-generative-ai-will-require-80-percent-of-engineering-workforce-to-upskill-through-2027" target="_blank">recent Gartner report</a> anticipates a seismic shift:</p>

<blockquote>
  <p>“AI agents will transform developer work patterns by enabling developers to fully automate and offload more tasks. This will mark the beginning of AI-native software engineering, where most code is AI-generated rather than human-authored.”</p>
</blockquote>

<p>Philip Walsh, Senior Principal Analyst at Gartner, added:</p>

<blockquote>
  <p>“In the AI-native era, software engineers will adopt an ‘AI-first’ mindset, focusing on steering AI agents toward the most relevant context and constraints for a given task. This makes natural-language prompt engineering and retrieval-augmented generation (RAG) essential skills for developers.”</p>
</blockquote>

<p>We are entering this era now. These agents are available today and can deliver significant productivity gains immediately.</p>

<h3 id="estimating-the-cost-of-code">Estimating the Cost of Code</h3>

<p>To put this into context, I asked Open AI’s new o1-preview model to estimate the cost of each line of code written by a senior engineer earning £80,000 per year. The estimate came out to roughly £2.40 per line of code, based on an average of 50 lines of code per hour and four hours of coding per day (* see Appendix below).</p>

<p>Over the past week, while figuring out how to market my new consultancy business, I’ve also used my dev kit to enhance itself. Here’s a screenshot of the new dashboard, showing this week’s work:</p>

<p><img src="https://higherlevel.dev/assets/img/posts/20241004/hldk-dashboard-this-week.png" alt="Dashboard Screenshot" /></p>

<p>A total of 201 requests this week. The last one? I just made a small adjustment to improve the screenshot:</p>

<blockquote>
  <p>Add labels to the period drop down on the dashboard page so value all-time reads as “All Time” in the drop down and similarly for the other values.</p>
</blockquote>

<p>This took 25 seconds, cost me 10 pence in Claude credits, and updated eight lines of code.</p>

<p>In total, I’ve spent roughly £50 on Claude this week and updated over 4,000 lines of code. If we use the £2.40 per line estimate, this equates to just under £10,000 in value generated. On average, each request took about one minute and updated 20 lines of code, costing 25p and delivering £50 in value.</p>

<p>Looking back, I’ve likely spent around half of each workday (Monday to Thursday) working on the Higher-Level Dev Kit. That’s approximately 16 hours in total—resulting in 250 lines of code per hour, a 5x increase over the industry average.</p>

<p>Every company with a software development team should be engaging with these AI tools today. Those that don’t will be at a severe disadvantage against those that do.</p>

<h3 id="the-future-of-software-engineering">The Future of Software Engineering</h3>

<p>I’ll leave you with some insightful words from Simon Willison, co-creator of Django:</p>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/uRuLgar5XZw?si=B_wL_MPp2D0yUJX0&amp;start=2817" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<blockquote>
  <p>“… when you combine expertise in using these tools with subject-matter expertise, you can operate at a level far above other people and the competitive advantage you get is enormous”</p>
</blockquote>

<hr />

<h3 id="appendix-calculating-the-cost-per-line-of-code-loc">*Appendix: Calculating the Cost per Line of Code (LOC)</h3>

<p>Obviously, this is a very rough estimate - and should be taken with a large pinch of salt.</p>

<p>For a UK-based Senior Back-End Engineer earning £80,000 annually, let’s recalculate the cost of producing each line of code, factoring in total costs to the employer.</p>

<h4 id="total-cost-to-employer">Total Cost to Employer:</h4>
<ul>
  <li>Base Salary: £80,000</li>
  <li>Employer’s National Insurance Contributions (NICs): £9,784.20</li>
  <li>Employer’s Pension Contributions (5%): £4,000</li>
  <li>Overheads (20%): £16,000</li>
</ul>

<p><strong>Total Cost to Employer</strong> = £110,000</p>

<h4 id="estimating-productive-coding-hours">Estimating Productive Coding Hours:</h4>
<ul>
  <li>Working Days per Year: 227 (after accounting for leave and holidays)</li>
  <li>Total Working Hours per Year: 1,816</li>
  <li>Time Spent on Coding: 50% of total working hours = 908 hours</li>
</ul>

<h4 id="lines-of-code-per-hour">Lines of Code per Hour:</h4>
<ul>
  <li>Assumed Productivity: 50 LOC per hour</li>
</ul>

<h4 id="total-lines-of-code-per-year">Total Lines of Code per Year:</h4>
<ul>
  <li>908 hours × 50 LOC/hour = 45,400 LOC</li>
</ul>

<h4 id="cost-per-line-of-code">Cost per Line of Code:</h4>
<ul>
  <li>Cost per LOC = £110,000 / 45,400 LOC = £2.42 per LOC</li>
</ul>

<p><strong>Summary</strong>:
A senior engineer costs a company approximately £110,000 per year and produces roughly 45,400 lines of code annually, leading to an estimated cost of £2.42 per line of code.</p>

<h3 id="sources">Sources:</h3>
<ul>
  <li>UK Government Resources on Employer NICs</li>
  <li>Steve McConnell’s <em>Software Estimation: Demystifying the Black Art</em> (2006)</li>
  <li>Industry salary benchmarks via Glassdoor and Indeed</li>
</ul>]]></content><author><name>Adam</name></author><category term="technology" /><category term="ai augmented dev" /><category term="software engineering" /><category term="higher level dev" /><category term="LLM" /><category term="productivity" /><category term="coding" /><category term="gartner" /><summary type="html"><![CDATA[Explore how AI is revolutionizing software development, following the path of historic productivity leaps like the cotton gin and the assembly line. This post examines the impact of AI tools on developer efficiency, featuring insights from a recent Gartner report and real-world examples of AI-enhanced coding. Learn about the future of AI-native software engineering and how it's reshaping the role of developers.]]></summary></entry><entry><title type="html">When AI Surpasses Expectations</title><link href="https://higherlevel.dev/Claude-Surpasses-Expectations.html" rel="alternate" type="text/html" title="When AI Surpasses Expectations" /><published>2024-09-27T00:00:00+00:00</published><updated>2024-09-27T00:00:00+00:00</updated><id>https://higherlevel.dev/Claude-Surpasses-Expectations</id><content type="html" xml:base="https://higherlevel.dev/Claude-Surpasses-Expectations.html"><![CDATA[<p>As I continue developing the Higher Level Dev Kit, I am constantly amazed by how <strong>Claude Sonnet 3.5</strong> not only executes my ideas but often improves upon them in ways I hadn’t anticipated. Let me share a recent experience that truly highlights the transformative power of AI in software development.</p>

<h2 id="capturing-the-essence-of-each-commit">Capturing the Essence of Each Commit</h2>

<p>I recently added a feature to my toolkit that captures the essence of each commit in a JSON file. This file is stored in the target repository under a <code class="language-plaintext highlighter-rouge">.hldk/specs</code> directory, effectively creating a history or story of the repository’s development. The idea was to have a structured way to document changes, making it easier to track progress and understand the evolution of the codebase.</p>

<h2 id="tracking-test-lines-changed">Tracking Test Lines Changed</h2>

<p>Building on that, I wanted to differentiate between changes made to production code and test code. Specifically, I aimed to track <code class="language-plaintext highlighter-rouge">testLinesChanged</code> — the number of lines changed in test files as opposed to production files. Adding this metric will allow us to track the relative cost of changes to test code as opposed to production code</p>

<h2 id="the-git-update-that-surprised-me">The Git Update That Surprised Me</h2>

<p>I instructed Claude to implement this feature with the following mini-spec:</p>

<figure class="highlight"><pre><code class="language-markdown" data-lang="markdown">update mutation entity to add testLinesChanged similar to linesChanged but 
is only populated if the filePath contains the string "test" (any case) 
otherwise it's set to 0. Update the service and repo as necessary to set 
testLinesChanged and also add methods for getTestLinesChangedForSession|Request. 
Also add the flyway migration.</code></pre></figure>

<p>And here’s the result—the contents of the generated JSON file that was included in the commit:</p>

<figure class="highlight"><pre><code class="language-javascript" data-lang="javascript"><span class="p">{</span>
  <span class="dl">"</span><span class="s2">spec</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">update mutation entity to add testLinesChanged similar to linesChanged but is only populated if the filePath contains the string </span><span class="se">\"</span><span class="s2">test</span><span class="se">\"</span><span class="s2"> (any case) otherwise it's set to 0. Update the service and repo as necessary to set testLinesChanged and also add methods for getTestLinesChangedForSession|Request. Also add the flyway migration.</span><span class="dl">"</span><span class="p">,</span>
  <span class="dl">"</span><span class="s2">commitMessage</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Add testLinesChanged feature to mutations</span><span class="dl">"</span><span class="p">,</span>
  <span class="dl">"</span><span class="s2">stats</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
    <span class="dl">"</span><span class="s2">processingMillis</span><span class="dl">"</span><span class="p">:</span> <span class="mi">65294</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">inputTokens</span><span class="dl">"</span><span class="p">:</span> <span class="mi">100931</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">outputTokens</span><span class="dl">"</span><span class="p">:</span> <span class="mi">4587</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">totalTokens</span><span class="dl">"</span><span class="p">:</span> <span class="mi">105518</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">cost</span><span class="dl">"</span><span class="p">:</span> <span class="mf">0.2786985</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">linesChanged</span><span class="dl">"</span><span class="p">:</span> <span class="mi">71</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">currency</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">gbp</span><span class="dl">"</span>
  <span class="p">}</span>
<span class="p">}</span></code></pre></figure>

<h2 id="beyond-expectations">Beyond Expectations</h2>

<p>What surprised me was that Claude not only implemented the feature flawlessly, adding 71 lines of code in just over 1 minute at a cost of 28p, but also added an update line to the Flyway migration script to backfill the <code class="language-plaintext highlighter-rouge">testLinesChanged</code> data in the existing database—a step I hadn’t even considered.</p>

<p>Here’s the Flyway migration that it generated:</p>

<figure class="highlight"><pre><code class="language-sql" data-lang="sql"><span class="k">ALTER</span> <span class="k">TABLE</span> <span class="n">mutations</span> <span class="k">ADD</span> <span class="k">COLUMN</span> <span class="n">testLinesChanged</span> <span class="nb">INTEGER</span> <span class="k">DEFAULT</span> <span class="mi">0</span><span class="p">;</span>

<span class="k">UPDATE</span> <span class="n">mutations</span> <span class="k">SET</span> <span class="n">testLinesChanged</span> <span class="o">=</span> <span class="n">linesChanged</span> <span class="k">WHERE</span> <span class="k">LOWER</span><span class="p">(</span><span class="n">filePath</span><span class="p">)</span> <span class="k">LIKE</span> <span class="s1">'%test%'</span><span class="p">;</span>

<span class="k">CREATE</span> <span class="k">INDEX</span> <span class="n">idx_mutations_test_lines_changed</span> <span class="k">ON</span> <span class="n">mutations</span> <span class="p">(</span><span class="n">testLinesChanged</span><span class="p">);</span></code></pre></figure>

<p>By adding this extra line, Claude ensured that all historical data was consistent with the new feature, allowing for accurate analytics from the moment of implementation.</p>

<h2 id="the-power-of-ai-augmented-development">The Power of AI-Augmented Development</h2>

<p>This experience reinforces the incredible potential of AI-augmented development:</p>

<ul>
  <li><strong>Speed</strong>: Tasks that would typically take hours are completed in minutes.</li>
  <li><strong>Insight</strong>: The AI doesn’t just follow instructions—it understands the context and identifies improvements.</li>
  <li><strong>Efficiency</strong>: With AI handling the heavy lifting, developers can focus on higher-level problem-solving.</li>
</ul>

<h2 id="embracing-the-new-paradigm">Embracing the New Paradigm</h2>

<p>This is not just a one-off occurrence. I’ve been consistently experiencing similar enhancements while using the Higher Level Dev Kit with Claude Sonnet 3.5. The AI agent:</p>

<ul>
  <li>Understands the codebase layout and adapts accordingly.</li>
  <li>Replicates coding styles and best practices, ensuring consistency.</li>
  <li>Identifies potential improvements that may not be immediately obvious.</li>
</ul>

<p>By embracing AI-augmented development, we unlock unprecedented productivity and insight, allowing us to focus on more innovative and creative tasks.</p>]]></content><author><name>Adam</name></author><category term="technology" /><category term="ai augmented dev" /><category term="software engineering" /><category term="higher level dev" /><category term="LLM" /><category term="productivity" /><category term="coding" /><summary type="html"><![CDATA[Discover how Claude Sonnet 3.5, an AI-powered assistant, enhances software development by not just following instructions but making insightful improvements. A deep dive into AI-augmented development and its impact on productivity.]]></summary></entry><entry><title type="html">Intro to Higher Level Development</title><link href="https://higherlevel.dev/Intro-to-Higher-Level-Dev.html" rel="alternate" type="text/html" title="Intro to Higher Level Development" /><published>2024-09-22T00:00:00+00:00</published><updated>2024-09-22T00:00:00+00:00</updated><id>https://higherlevel.dev/Intro-to-Higher-Level-Dev</id><content type="html" xml:base="https://higherlevel.dev/Intro-to-Higher-Level-Dev.html"><![CDATA[<p>When Anthropic released Claude Sonnet 3.5 on Friday, June 21st, 2024, software development changed forever.</p>

<p>Just a few days later, on Monday the 24th, I was made redundant from the fintech payments company where I had been working for over six years, as it prepared to shut down. In hindsight, I believe this turn of events was quite serendipitous.</p>

<p>I had already been experimenting with ChatGPT and other large language models (LLMs), trying to leverage them to become more productive in my role as a backend engineer. 
But with Claude Sonnet 3.5, we finally had an LLM capable of writing decent, reliable code that was mostly bug-free.</p>

<p>This changed everything.</p>

<p>Given six weeks of gardening leave, I decided to immerse myself in this new world instead of searching for another job. 
I started by dabbling in Python and learning about frameworks like LangChain and LangGraph.</p>

<p>By pasting existing code into Claude and asking it to build the next part, then incorporating that back into my IDE, I managed to build a Python-based server running some agents and a rudimentary web app to interact with them.</p>

<p>One of the agents I developed was called the System Improver Bot. It functioned by providing it with the root folder of a code 
repository (I simply pointed it to itself) and sending the tree of source file names to Claude along with instructions on what 
to do next.</p>

<p>By equipping Claude with a read_file tool, it could decide which files it needed to read to understand the codebase before generating new code. By parsing the responses, I could automatically save the generated code back to the file system.</p>

<p>I no longer needed the Claude UI at all, and my productivity skyrocketed. It didn’t matter that I didn’t really know Python or that I was a complete novice at web development.</p>

<p><b>I’m now developing in the English language - this is Higher Level Development.</b></p>

<p>After 25 years of building backend systems in the Java ecosystem, I’ve finally become a 10x Engineer. And it’s a lot of fun. And any other developer can do the same with access to the right tools and a few days to get up to speed on how to direct the agent.</p>

<p>It’s a new paradigm: you develop one small specification at a time.
For example:</p>

<figure class="highlight"><pre><code class="language-markdown" data-lang="markdown">Add a new person module to the system. 
The Person entity needs properties:id (UUID), title, firstName, 
lastName, dob (string), createdAt (timestamp). 
Add the appropriate repository with the usual methods, 
the service and controller, and all the necessary DTOs and unit tests. 
Also, add a Flyway migration for the new person table.</code></pre></figure>

<p>This task usually involves a lot of boilerplate code and might have taken at least an hour or two in the past. But a Claude-powered coding agent can do an excellent job of this in about two minutes.</p>

<p>Claude can see the codebase layout and examine other modules in the system. It learns how entities are structured and replicates the same style and tooling.</p>

<p>I’ve been using this methodology over the past (checks notes…) 2 weeks (!?!) to build a new production-ready version of my toolkit.. this time the tech stack is a NestJS/Node server and a Vue3 web UI.</p>

<p>Here’s a video of the new tool implementing the above mini-spec in a Java Spring Boot git repo:</p>

<div class="video-container" style="position: relative; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden;">
  <iframe style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" src="https://higherleveldev.s3.eu-west-1.amazonaws.com/HLDKAddPersonModule-opt.mp4" title="Video player" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">
  </iframe>
</div>

<p>At the end, it also runs the tests—including the newly created unit tests—and verifies that everything is working. If it wasn’t working then it would iterate fix -&gt; test -&gt; fix –&gt; test until everything was working correctly.</p>

<p><img src="https://higherlevel.dev/assets/img/posts/20240922/tests-passed.png" alt="All tests passed" /></p>

<p>Generating new code like this is fairly straightforward, but Claude Sonnet 3.5 also excels at making edits to existing code and even performing refactorings of limited size. As a general rule, if I anticipate changes to more than ten files at once, I tend to break the work down into smaller specs and iterate through them one at a time.</p>

<p>The toolkit I’ve developed will automatically commit each set of changes to Git with a suitable commit message. If you’re not satisfied with the changes, a simple “undo” is enough to revert them.</p>

<p>Though the example uses a Java Spring Boot application, the Higher Level Dev Kit is designed for versatility across any codebase. Whether you’re working in Node.js, .NET, Python, Go, building Android or iOS apps, or using React, Angular, or Next.js, the toolkit seamlessly adapts to your stack. By allowing developers to hand off coding tasks to an LLM agent through concise specs written in English (or other native languages), it transforms how you approach development, letting you focus on higher-level problem-solving while the agent handles the details.</p>

<p>This is how I do all my development now. There’s no going back or putting the genie back in the bottle.</p>

<p><b>This is the way.</b></p>

<p>Based on what I’ve learned and the excellent results I’ve been seeing so far using this approach, I’m starting my own boutique consultancy, offering to help companies radically improve their developer productivity by adopting this same toolkit and workflow.</p>

<p>My goal is to build a sustainable business, fostering long-term relationships with a small set of software teams, so they can leverage the Higher Level Dev Kit to supercharge their development in a totally affordable way.</p>

<p>Together, we can improve the toolkit, incorporate the latest and greatest LLM models (o1 anyone?), and be at the forefront of AI-augmented development.</p>

<p><a href="https://www.higherleveldev.com/dyp-offer?utm_source=blog&amp;utm_medium=linkedin&amp;utm_campaign=intro-to-hld" target="_blank">Early Bird Offer till end of October: Book your free consultation now!</a></p>]]></content><author><name>Adam</name></author><category term="technology" /><category term="ai augmented dev" /><category term="software engineering" /><category term="higher level dev" /><category term="LLM" /><category term="productivity" /><category term="coding" /><summary type="html"><![CDATA[Discover how AI-powered Software Engineering Agents are transforming software development, allowing developers to code primarily through natural language.]]></summary></entry></feed>