Definition of done

"Musicians are lazy" is quote from Paul Guy. I believe the same is valid for software developers.

This is why the definition of done is extremly cruical for business critical systems. With optimistic estimates for development, the agile teams won't do more than necessary, i.e. according to the definition of done.

The problem lies in when the definition of done is shallow, and the missing parts affects data quality, security and build technical dept.

I asked Copilot for some input and it came up with twenty different point related to maintainability, team & delivery and governance. The first paragraph in the text was "This Definition of Done is mandatory. A change is not considered DONE and must not be released unless all criteria below are satisfied."

Back to reality.

I'm doing a PoC, lightweight MVP, for my film production related project. A this makes development take much more time if I have a proper DoD. This makes me skip a number of checkpoints for the initial version that will be used to verify the concept. However, with this list I know which debt I've got to resolve in upcoming sprints.

The Defintion of Done is only part of the story. To guide developers (me and some friends) and AI-tools, I'm compiling a playbook for software development & operations. It includes principles, guidelines and patterns, based on best practice, for the context of this application. Without context, you can't suggest a suitable best practice.

Both the structure of the playbook and the content is based on reasoning with Copilot, using references to a number of public sources relevant to this case as input. With a few hours of effort, I've have something usable and good enough to start with.

The more I tinker with AI, the more obvious is it that for rapid prototyping it's already very good. To build large, stable, maintainable systems, you still need to think in advance, before letting AI write your code. The upside is that AI can help you in your thought process.

Good old days

Is software development different today, compared to the good old days?

Today, you often have three main scenarios when starting major programs.

  1. Build on what you have

  2. Buy something new, COTS and/or SaaS

  3. Build something new from scratch

Build on what you usually works well, until there are major changes to your business model, or the technical debt becomes too huge.

For many years, I've seen option two and option three fail miserably. We have our own share of them in Sweden, most recent one being Millienum health care system that was cancelled by two different regions. [edit] Classic waterfall project where the politicians stepped in and closed.

But I've also seen a number of programs developing subscription billing systems going down the drain. The question is why, because they were running agile, not waterfall development style.

Back to late 80's when I got the task to implement a material production system at a manufacturing site, replacing paper. No existing IT-systems, no COTS and cloud computing was somebody’s else mainframe.

The first thing I had to do was to collect a hard hat and safety shoes, so I could go out in the factory and see what really happened in real life. As a manger, I both did a budget and motivate the investment, as well as installing the minicomputers running VAX/VMS and plan a local fibre network.

The requirement work we did was very process oriented, starting with identifying how the people worked at every station in the factories. Then designing a SQL-database and UX for terminals to support the workflow. Used consultants to write most of the code, but we wrote interface code for API communication in C and embedded SQL. It even worked in year 2000, avoiding the millennium bug.

Fast forward until today.

A fair share of the software developers I met recent years have no clue about the business and how things are done. They often don't care about budgets or the cost of development and maintenance. They are highly specialized on a few tools and frameworks, and often competent in their area.

But the problems with major programs starts, but not ends, with requirements.

Lack of requirements, or incomplete requirements. If you starting a new digital business from scratch, and doesn't need to be profitable the first ten years, the your can run agile. If you have an existing business, and try to replace you legacy systems, the skateboard to car analogy doesn't work. Period.

Garbage in - garbage out is next. Information models more or less non-existent in today’s agile world. Very few software developers have the skill or the mandate to a proper information model. The consequences are delays, building up technical debt and lack of data quality.

Today's computers are fast, and this also makes non-functional requirements a forgotten topic. Lack of those will result in bad data quality, technical debt and problems with compliance to regulations.

Finally a word about stakeholder commitments. There are often to many layers between the guy or girl who present the budget to the guy who writes code, or the person who will use the system. Neither is anybody accountable for the whole.

Back in the good old days, we could have the whole team around a large table in the lunchroom, sipping coffee and smoking cigarettes, and I was accountable.

Back to code again

I need a small application to support film production, but the barrier (effort) to write code have been to high. What I will try now if I can use AI for fast development, as I have a documented UI, API and a database schema with test data.

The solution architecture was tricky, but with this design, I assume the coding will be ”easier” than in the 90’s.

Business need

I need a better way to find out who has been participating in each film production, i.e. project, both in front of the camera and behind. In Film production, both the cast and crew are managed in Yamdu, but in separate modules. Then there are projects not in Yamdu, where we have crew and pay wages, e.g. Provide crew & equipment.

There are two reasons for this epic, better CV matching and answers to GDPR requests.

High-level design

The solution should manage a list of projects imported from Finance system, Role descriptions from the CRM system, cast and crew from Yamdu, plus manually entered Individuals with roles in projects.

The SQL database will be in Azure, and the schema will be based on TM Forum SID and their Open API specifications. Access control via Azure Entra and two factor authentication as this data includes PII.

I've created a draft UX for mobile, so this will the basis for a small web application, accessing the database.

.net as development framework, with an aim to use only open source products in the future.

Solution approach

Use of Copilot to set up environment and Claude assist in coding.

First PoC is without integrations, to verify. Then integrations to all internal systems via CSV-files.

My background in software development was more than 25 years ago, and then in Java, C, Fortran, Pascal and script-languages, with Oracle RDBMS (UNIX) and MS SQL-server (Windows).

Enterprise Architecture playground

Architects working together could sometimes be compared to small children in the playground. Totall chaos and one boy is grabbing the others childrens cars.

Still, if you are a grown up enterprise architect, you still need a playground or sandbox to learn and try out new things.

Very few enterprise architects are developers in their daily life, so the question is how you can experiment with new things outside development tools?

For me, my EA playground is my film production hobby, and the EA Case study a way to try out ways of working and new tools

Many of you are very focused on frameworks and tools, so I will now update the architecture documentation using new tools. The reason to this is a new legal entity in film production that have impact on the existing EA views.

Provide crew and film production is now one legal entity and film distribution is another entity.

I will use  a sandbox version of LeanIX to model the film production and film distribution business, to learn what you can do with the tools today.

What is your playground for Enterprise Architecture?

A physical sandbox

The last article about agile city planning was the joy of agile.

Now, we are in R&D mode, trying to learn how to create custom made platforms for the shadow station and the branch-line.

As this is something completely new for me, I've created a small diorama for experiments, e.g. a sandbox environment where I can learn, without messing up the larger layout.

This is the same reason, why you need a sandbox environment when doing something new with IT. A safe place to try and learn without messing up the large systems.

You can try new concepts within a limited cost, and scrap if it doesn’t work.

The same principle applies regardless it’s for creating contract tracks for feedback or doing an event based integration. If you haven’t done it before, you need a learning environment.