Category: Daily Report

  • Day 207 – Learning MCP Part #2

    MCP is slightly different from a standard web API, in that the server can request data from a client, to which the client will respond. If no response is required, they send notifications.

    Communication between client and server is stateful – meaning that the history of communication is kept and used as part of the response, thereby getting a larger context over time.

    MCP uses primitives to describe the data / capability of the server. Primitives cover tools (functionality that servers will offer the AI applications), resources (data sources) and prompts (prompt templates).

    MCP is probably one of the extra technologies alongside LLMs that will start breaking a lot of industries. When LLMs can just ‘talk’ directly to services, there will be a lot less requirement for user interfaces … and by that I mean a ton of SAAS products. Simply the functionality a SAAS product does will be abstracted away by automation and MCP. So the web dev industry for sure will start to have demand drop for such things.

  • Day 206 – MCP Part #1

    One of the interesting things that emerged soon after LLMs, was the creation of the Model Context Protocol.

    It does exactly what it sounds like it does… LLMs provide answers to users based on context … so if you have chatted to ChatGPT for months … it will remember what you have said… i.e. it has context on you/your situation.

    For instance, you might have input all your business ideas into ChatGPT, and now its answers will be more personalised to you because it has a better idea of the background (context). It’s like getting to know someone new, the more time you spend with them, the more context you have to understand them and refine your conversation around these understandings.

    So all that was great, and then developers realised they wanted LLMs to have even more context … because there are these wonderful things called databases which have all our information in. So they needed a way to ‘talk to these databases’ rather than just rely on a traditional API.

    Hence MCP was born.

    Model Context Protocol (MCP) is basically a very cool standardised way of linking Language Models (‘AI’) to existing data information systems.

    Protocols have always been fundamental to building the internet. Having standards that we all agree on makes things a lot simpler. Obviously, it doesn’t always work out that way, and you end up with walled gardens.

    But MCP quickly emerged after LLMs to address the issue of how to make AI more useful, by getting it to co-ordinate actually doing something rather than just outputting text or data.

    For companies, being able to ‘talk to your data’ is pretty awesome, but most don’t have it currently.

    MCP operates between three different ‘things’:

    • A host
    • A client
    • A server

    The host is basically a typical application Like a mobile, web or desktop app but with AI programming in it.

    The host application has a component that maintains a connection to another server – the MCP server – and this component is called the MCP client.

    The server provides the context to the client.

    An application (aka MCP host) will, as part of its functionality, manage an internal ‘client’ that maintains a connecting to a server (aka MCP server). Each server will have its own client … 1:1.

    An MCP host can run locally on your computer, or on a remote server.

    The architecture is very straightforward – two layers – data and transport layers.

    The data layer is described in the JSON-RPC 2.0 format, and is used by both the host and server to both request information, and give information. For instance, the server can send data back to the host to request certain input from the user.

    The transport layer is either standard input output for local (STDIO) or HTTP POST for remote.

    More soon…

  • Day 149 – Cursor decreasing in quality

    I’ve been using Cursor a lot recently and in the last few weeks the quality of the suggestions has really left a lot to be desired.

    Most of the times I am finding myself having to reject or rework all suggestions. I do think over time when the training gets more specialised, framework specific LLMs will bridge this gap. At that point when we have a Laravel specific LLM, for instance, that’s when I think we will know for sure how many software engineering jobs are going to get impacted.

    Cursor is great for prototyping your ideas, but it quickly gets confused.

  • Day 148 – Vibe Coding Worsening?

    I’ve noticed that once you are up and running with a proper web application framework like Laravel, blindly using Cursor on it turns it into a nightmare. It feels as if the quality of answers has gone down over last weeks, but I’m frequently rejecting its suggestions. Often it’s got the SoC wrong.

    Anyway, potentially better prompt engineering would fix it, or more training on Laravel framework specifically. Once it fully is trained on the Filament package, it will be amazing.

    Some notes

    • I am finding myself rejecting a lot of the Cursor agent advice… potentially because it needs training on some newer libraries I’m using; but also I do see the glaring errors it makes sometimes.
    • Whilst LLMs are awesome, to mistake them right now for anything approaching intelligence is silly considering ARc2 is being passed at rates less than 5% by AI/LLMs. That really has blown me away. We will see in fall 2025 if anyone has come close. If they do, it’ll be a incredibly scary step forward.
    • For traditional web frameworks, Laravel Filament still looking great. Todays development included:
      • Mostly smooth configuration of import/export to CSVs on models within the Filament table panels.
      • Got job queues setup
      • Quality of life improvements to UI
      • Notifications work great
    • Laravel Pulse is quite good. I was having a few problems with CSV import jobs failing and then infinite retrying but this made me realise I wanted monitoring software asap. Pulse still requires someone to be observing however, and Sentry would still be obvious choice.

    I’ll shortly be in a position to launch the very early version

  • Day 107 – Mac Mini Me

    Still a few days behind on the blogging so adding a general thought for day 107.

    Recently bought new Mac Mini M4 Pro. Entry level.

    Potentially could have upgraded RAM and hard drive (especially, since 500 gigs gets eaten up pretty quick).

    Overall the experience of going back to a desktop rather than laptop with two monitors is quite different. Feels different. I don’t have to keep unplugging wires all the time when I go out to a meeting which happens at least every other day.

    It’s also really nice just having a blank new OS to start with. As with a nice notebook you try and keep it all clean to start with. That’s the feeling I’ve got right now with it.

    The Mac Mini’s are excellent value for money, and was even surprised they have a speaker that pretty much does the job for every day work related audio. A built in microphone would have been welcome, but probably impractical.

    That’s it for now.

  • Day 106 – Back To The Tech Specs with AI

    Today I realised that technical specifications have come full circle in importance.

    We’ve been agile for so long, with focus on short sprints; and I don’t think we need to throw away those benefits.

    But with AI, you can now plan the system on a very wide scale from the beginning.

    I also realised today that I have been thinking too small when it comes to AI. Whatever you think the capabilities of AI are, you are probably underestimating it.

    Today we put together a loose specification of about 3000 lines. Broadly speaking these included:

    • database schemas
    • user stories
    • features
    • UIs
    • component structures

    Using Cursor we would ask it to amend a technical specification MD file as we mapped out the idea from scratch again. Thank to Shaun who pointed this idea out which I’ve sort of tweaked now.

    From this technical specification we asked it to build a vanilla HTML/JS frontend prototype.

    The purpose of this was to see whether the AI could correctly interpret the spec.

    So we went back and forth from the tech spec to prototype, and were able to hone it after a few iterations. This allowed us humans to visually see what we were building.

    I won’t share the prototype UI yet, but suffice to say it reduced several days of work down to an hour or so.

    Crazy times.

  • Day 105 – Cursor

    Today my business partner took his codebase and gave it to cursor.

    The thing is, since he wasn’t hooked up to GitHub, we took the easy route and downloaded the zip file, and I just told him to go play with it.

    He spent the entire day upgrading the application and from the sounds of it integrated a ton of awesome new features.

    And then when it came to showing it to me, it had stopped working.

    Turned out after all that, that he had lost the work. Something went radically wrong, and either some files were deleted, or it just got mega confused.

    No Git commits!

    At any rate, his mind was blown. We will re-continue tomorrow.

  • Day 104 – How to decide when to call it quits on a project, or when & how to pivot?

    For the last few months I have been partially helping out an AI startup get a handle on its product. Their lead developer had left a year ago, leaving a fairly complex and over engineered codebase.

    I realised last night how much of my time, attention, and energy I had been putting into the project.

    Whenever I find myself waking up and my automatic thought process goes to a particular project, I regularly need to assess whether that project is worth of my ever decreasing time.

    The problem is – as with almost all software projects at the moment, is that unless you are able to integrate AI coding tools with it to develop new features faster, you are falling behind.

    The reality is that the combination of automation tools + ‘vibe coding’ + ‘senior engineer experience’ can outpace and rebuild most systems from scratch very quickly now. The cost of software development is now significantly less although the increase in technical debt from AI generated code will be substantially higher than normal.

    Sunk Cost Bias

    With the right attitude, you can take lessons from most experiences in life. When an individual or company has invested resources into a project for too long, there’s this thing called sunk cost bias…which is the psychological desire to keep on going on a path because you’ve journeyed so far.

  • Day 102 – OpenAI Structured Outputs

    When you want the OpenAI API to return output in a specific structure, you use Structured Outputs.

    Here’s an example:

    import { NextResponse } from 'next/server';
    import OpenAI from 'openai';
    import { zodTextFormat } from "openai/helpers/zod";
    import { z } from "zod";
    
    export async function POST(request) {
      try {
        const client = new OpenAI({
          apiKey: process.env.OPENAI_API_KEY,
          organization: process.env.OPENAI_ORG_ID,
        });
    
        const requestData = await request.json();
        const { model, input } = requestData;
    
        const CalendarEvent = z.object({
          name: z.string(),
          date: z.string(),
          participants: z.array(z.string()),
        });
    
        const response = await client.responses.parse({
          model: model || "gpt-4o-2024-08-06",
          input: input,
          text: {
            format: zodTextFormat(CalendarEvent, "event"),
          },
        });
    
        return NextResponse.json({ 
          success: true, 
          event: response.output_parsed 
        });
      } catch (error) {
        console.error('OpenAI API Error:', error);
        return NextResponse.json(
          { success: false, error: error.message },
          { status: 500 }
        );
      }
    } 

    So, if you are doing it the javascript way:

    • You use Zod to define the object. Here you see we’ve created CalendarEvent with name, date and participants, all of which are strings.
    • You use the responses API and you use the { text.format }

  • Day 101 – Long term consequences of AI

    Day 101 – Long term consequences of AI

    It’s been quite a journey over last 100 days.

    I am very happy I made the decision to go all in on AI.

    I know a huge amount more than I did 100 days ago.

    I can see that it’s going to become a huge opportunity for big corporates to automate almost all their tasks.

    Big insurance companies will use AI to make most of their workforce redundant. Whether they find new work for them to do, I don’t know… but I can clearly see that the big companies are going to want to use AI to cut costs.

    Here’s where a potential down spiral begins:

    1 – Companies have always been interested in cost savings.

    2 – AI will offer the perception of massive cost savings.

    3 – Companies will either: a) ignore & wait b) upskill & create an internal AI team c) get in external contractors

    4 – Current internal systems and workflows will be analysed

    5 – Patterns in these systems / workflows will be identified

    6 – These patterns will be automated with AI

    7 – Companies achieve cost savings

    Obviously this is fairly abstract, but it’s sufficient to demonstrate what I’m talking about.

    So, all the big companies in the world will start investing in internal or external workforces (creating a new career sector) and they will reduce the bloat that humans created. So they will eventually, mostly, get rid of staff.

    How quickly and at what magnitude this happens I don’t know, but basically, take the UK as an example, all FTSE100 companies will eventually downsize significantly. This is simply because most ‘work’ that is done in enterprise companies is the moving around of data in a certain way. And in reality, most workers are a bit bone idle. There is huge room for improvement.

    As of January–March 2025, the UK’s labour force—comprising 33.98 million employed and 1.61 million unemployed, for a total of about 35.6 million people House of Commons Library

    Total employed (Jan–Mar 2025): 33.98 million people

    FTSE 100 companies: ≈ 6.0% of the workforce (≈ 2.04 million employees)

    Public sector (government): ≈ 17.4% of the workforce (≈ 5.90 million employees, excluding major reclassifications)

    So, let’s take a cautious approach – 10% of the workforce will be made redundant. So for every 100 people at AVIVA (insurance company), AI will absorb about 10 peoples jobs. That doesn’t seem unrealistic right?

    Let’s extrapolate to the entire 34 million. So 10% made redundant … thats 3.4 million jobs gone and not coming back … which triples the number of unemployed straight off.

    This is potentially manageable, but will put huge strain on welfare. Massive growth in government sponsored training companies as they try to achieve any sort of retraining numbers.

    The circular problem is:

    • 3.4 million people (many with kids) … suddenly have less money.
    • Less money goes into economy
    • Businesses shrink again, lay off more staff
    • Process repeats

    And the problem mainly is that the new brains are looking to create companies that are entirely AI driven. The fewer humans the better is the mantra. So you have that, and probably the fact that most companies will self-preserve and take out more than 10% of their workforce.

    The only way out of this is either:

    • Reduce supply chain costs (mainly through energy sources)
    • Open up new industries
    • Nationalise and subsidise industries
    • UBI

    To be continued.