Mark Richards – Will there be software jobs when you graduate?

Codecamp România organized last week in Iași an interesting talk together with the local university. They have invited Mark Richards to talk about “Will There Be Software Jobs When You Graduate? AI, Hiring Trends, and the Future of Software Careers”. The original talk was supposed to be held by James Coplien but his flight was canceled so Mark stepped in to help. 

Mark Richards is an important worldwide software architect who published important books on software architecture: ‘Fundamentals of Software Architecture: A Modern Engineering Approach’, ‘Software Architecture: The Hard Parts: Modern Trade-Off Analyses for Distributed Architectures’, ‘Head First Software Architecture’, ‘Architecture as Code: Specifying Architecture for Humans and Agents’, ‘Software Architecture Patterns, Antipatterns, and Pitfalls: Understanding Trade-Offs‘(just released). Please see https://developertoarchitect.com/books.html for all the books he has written.

He has been in this industry since 1983. And he is still coding almost every day.

I made a post on LinkedIn that evening about the talk and I felt the need to extend a little bit more because it was an interesting presentation: https://lnkd.in/p/dF6FcAvB 

Seeing such an important person from IT going to the heart of Romanian education, a Romanian school, touched in me a sensible cord. And I told this to Mark. 

So, here are the main ideas that I recall from his talk which I think are very important:

Time

He said that he had a lot of time to prepare for his career, a lot of time. He started as a programmer and gradually over 12 years he got his first job as a software architect.

Then he said to the students that maybe they will not have those 12 years, but perhaps 2 or 3 years at most, in order to get a comparable experience because things are so accelerated now. 

Karma

He quoted an idea from Venkat Subramaniam. The fact that programmers write bad code. He also admitted to writing bad code. Well … we all wrote bad code. But, AI is trained on code written by programmers. Then programmers complain that AI writes bad code. “Guess what? This is karma”.

Dreyfus Model for Knowledge Acquisition

Dreyfus Model for Knowledge Acquisition in the context of AI and IT

The Dreyfus model is being used to describe stages of knowledge acquisition. And he centered the discussion around this.  

He said that a novice applies recipes and follows step-by-step instructions.

The next level in the Dreyfus model is the advanced beginner. In this stage an advanced beginner is applying more complex recipes, but they are still recipes.

The next level is competent. The competent are still following recipes and still doing analytical thinking but they begin to be more creative with their thought process. If something is not ok they can apply other techniques to fix that particular problem. 

He then went to describe the proficient and expert stages. He mentioned that the experts create the recipes.

In the context of AI this Dreyfus model is important because it helps to show where, most probably, AI agents are now: at the border between advanced beginner and competent. These agents are recipe followers with no creative thought. 

But Mark also spoke about RSI (Recursive Self Improvement). It is about agents recursively starting to improve themselves. He thinks that, because of RSI, AI might get to the competent level. But he also expressed his skepticism when he invited us to think about all the problems that can pop up while AI will do its learning via the RSI. 

Picasso Quote

Picasso Quote

Mark liked this quote because it shows the importance of good new questions, ideas.

Computers are deterministic, and that LLMs have non-deterministic responses.

Then he mentioned the fact that computers are deterministic, and that LLMs have non-deterministic responses. And that LLMs can help with good questions. 

He mentioned that AI is and should be seen as a tool. Is a tool that accelerates code generation and that also gives great questions and great ideas. 

Behaviour and Capabilities 

Behaviors and Capabilities in Software Architecture

For Mark, behaviour is about design. In the image it can be seen that usually when trying to design for the behaviour, programmers start from something simple and then gradually arrive at the desired thing. In the image it can be seen that the truck is the goal. 

He said that the AI can write code regarding the behaviours, and he also says that it is bad code. And even if it is bad code, it will still work.

But there is another important detail, which is about the capabilities that architecture must provide. In the example from the image it can be deduced that the capabilities needed for a truck will for sure not map at all to the ones needed for roller skates.

Here are some examples of capabilities provided via some questions by Mark: Do we need to scale to 100,000 users?  Do we have to have response times in our systems of under 200 milliseconds? Does our system have to be highly maintainable? 

Then, on the next slide he provided a long list of all the capabilities that can be considered for a system:

List of all the capabilities the architecture must provide

And it is in these capabilities, Mark says, where the opportunity for programmers lies. Because the AI is not good at these, even though the AI is good at producing code.

You can emerge design, but you cannot emerge architecture.

Gall’s Law

Gall's Law

Gall’s law can be applied to software architecture and is a very needed skill to have as a programmer. We need to start with a simple system, but we have to plan. Because it is not that we can just simply add an architecture. He gave the example of building a very simple system that will scale to 100,000 users and that we will continuously verify it. Now that there is a simple system that works, the emergence of the design starts.

So, AI is currently lacking architecture. And it will be onto us to teach the agents architecture, and for doing this we need to know architecture.

He has also shown some examples of Architecture Definition Language (ADL).  The ADL’s are a new way to describe architecture through a pseudo-code language.(1) He is using ADL and the generated code after it, with AI, in order to validate architectures. There are great advantages in using this language in connection with LLMs.

I recall that he used an example from his class regarding a ticketing system and how he used ADL’s to describe its architecture and how actual code can be automatically generated with Claude.

So, ADL can be used to describe the architecture, but also to validate it with code via agents. And programmers can play a very important role here.

He mentioned that the traditional role of a programmer is moving from writing source code toward architecture and design. 

Increase your technical breadth of knowledge

Increase your technical breadth of knowledge

At a certain moment he explained a hypothetical scenario where a programmer said that is an expert in micro-services but is struggling to find work. And is asking Mark why it is hard to find a job. And Mark’s answer was: The problem is you are an expert in microservices. And the same for a lot of other people that are competing with each other for 3 or 4 open positions. It is about how a programmer will differentiate herself/himself in the industry, and architecture is a differentiator and can help.

Communication and collaboration skills also matter a lot. His book ‘Fundamentals of Software Architecture: A Modern Engineering Approach’ addresses all of the people skills needed for a programmer.

In the previous image Mark is showing a triangle. He is using it as an analogy that represents all the knowledge in the world. On top are the things we know and we are experts in. In the middle of the triangle is about the things we know we do not know. At the bottom of the triangle is about the stuff we do not know that we do not know. It is about the things we never heard of. 

He insists on increasing the breadth of our technological knowledge. He advises to place our focus in the middle of the triangle. And that we can do this by investigating various resources like infoq.com or https://www.thoughtworks.com/radar. He advises to spend at least 20 minutes per day in the morning, but before opening email and MS Teams or the social media, and after the ‘blessed’ coffee or tea. 

Increasing our technical breadth is a differentiator in this new state of the industry.

Advice

Do not take as face value all the code that is being generated. Trust, but verify. The code might work, but once modified the behavior might change and it will no longer work.

As developers we will need to deeply verify the code that we did not write.

Ethics 

No one talks about it. Who is teaching our agents about ethics?

After his talk, I made the following question and comment on which he agreed:

– Isn’t, in a way, that this AI triggered us to return to the essentials, for what it meant for us to be programmers? Because it was never about just knowing C++ or Angular  syntax, tips and tricks. It was about solving some problems. So, it seems to me that the good thing about AI is that it triggered this aspect.

When answering my question he said so nicely that it’s not about the syntax of the languages. It never has been. It’s about how to program, how to think about algorithms, and how to solve a particular problem. That it really is getting us back to some of the essentials. Rather than focusing on all the languages and the problems of code syntax, we are solving problems.

Then he did an interesting thing. He said that initially he programmed in assembly language, then C and C++ , then Java, and then he had to handle the cloud. And suddenly he made me think about the leaky abstractions and how important it is to be careful at them. Because we have abstractions over abstractions, for example cloud environments abstract us from the infrastructure. We have no idea where the code is running.

– It seems to me that AI has raised the bar. It doesn’t mean we shouldn’t know things. It’s related to the time it took you to become an architect, 12 years. It raises the bar and it also pushes and hurries us to learn things faster. It doesn’t make us abdicate on knowing those things.

And he exclaimed: Bingo! And then asked how many bits in a byte? How many bytes in a word? Like an invitation to realize that we need to know our craft as computer scientists.

We are living interesting and challenging times. And Mark’s talk is helping, I believe, us navigate uncertainty whether we are students, juniors or experts.

Important note: The images were used with permission of Mark Richards. 


(1) Lesson 210 – Architecture Definition Language – (August 4, 2025) – https://developertoarchitect.com/lessons/lesson210.html 

Discussion about hiring developers

Context: A lot of managers, product owners try to solve the problem of hiring only based on some specific skill sets. This is problematic because it shows a control mentality. But what happens when the needed skill sets change? We modify the team based on the skillset or we let them the chance to adapt, learn?(1)  Which approach is more agile?

Shu: Hi Ri. There is a thing which puzzles me, regarding the process of hiring developers. Tell me if I am wrong. 

Ri: Hi Shu, which thing?

Shu: Very often I see an announcement with  the following form: “We need a senior .Net/React/Vue/Java/Angular/… developer”. For sure a certain language/framework matters if it is known, but  is not enough – at least not for a senior. Seniority should not be tied to a certain technology only. 

Ri: Is it maybe just an unfortunate choice of words? Maybe they want to say a “senior developer with Net/React/Vue/Java/Angular/… skills”

Shu: I do not think this, because of a strange effect I saw. Is about how teams are formed, at least what I have noticed in the past. 

Ri: Could you tell me more…

Shu: You have a well functioning team and a new project comes. That project needs a React developer. No one in the current team has worked with React, but they are willing to learn. But it does not matter. A well functioning team will be broken because of that. Is a framework which can be mastered in a week or two by a person who knows things. 

Ri: Tell me more about other skills a developer should have.

Shu: Design, analysis, algorithms, architecture, OOP, testing, experience with at least 2 languages and platforms,… 

Ri: Why at least 2 languages and platforms? 

Shu: Because the elders  say so? 🙂 

Ri: Why do they say this? 

Shu: Maybe because of biases. 

Ri: And also, maybe, because a developer who will not have fear approaching multiple languages/technologies she/he will understand what unites them actually. When doing this, in the end maybe, will understand that in order to adapt fast she/he will need a common ground. And this common ground transcends the language/technology. 

[Shu is thinking] 

Shu: By common ground you mean clean code, architecture, domain analysis, patterns, Liskov principle, algorithms,…. 

Ri: Yes. So, what you are trying to say is that the problem is about the locus of attention being in a slightly wrong direction? 

Shu: Yes…

Ri: There are some things, among others, to consider when hiring:

– Hiring is also about learning. We want those developers, testers to learn when the market/product/needs/conditions will change. We do not want to destroy circle and community of trust(2). “Experience is not a state but a process”(3) ;

– If the focus when forming a team is first on the technology used, then on the available people and only then on the social aspects of the persons in that team and the learning, then it will be problematic and sad. 


(1) Strongly influenced by James Coplien in Scrum – Product Owner class discussion [October 2019]

(2) Jeff Sutherland, James O. Coplien, “Circle of trust”, http://www.scrumbook.org/product-organization-pattern-language/development-team/circle-of-trust.html 

(3) James Coplien, Scrum – Product Owner class discussion [October 2019]

Forming a team, an agile perspective

I’m seriously concerned about this topic because I see the disastrous effects of its bad handling every day.  It’s not enough to put some people together and ask them, usually in a perverse, detached and manipulative way, that no matter the difficulties encountered, they should make it work because this is what professionals do – in a way this is like an abdication of the job a manager should do rigorously. I know it’s hard, damn hard, I made my share of mistakes …

I wrote about this topic before.

But this time I would like to recall two important perspectives, from the agile world, that unfortunately seem to be ignored:

1. Early this year a nice interview(1) with Jerry Weinberg was published. In it, he described one method to form a team:

“…We put together teams. What I recommend is people put together their agile teams by what I call incremental consensus. You start with one person who you feel has the personal qualities. Stop emphasizing very soon with what I read about is people emphasizing: you got to have the most skilled coder and you can put all the best coders together and then you have an agile team. Now you find someone who has got these personal qualities: they know how to communicate , they’re willing to communicate, they’re willing to admit their mistakes and learn. And you start with that person. And you say: okay now among all the people we have available to us who would you like most to team up with to do a good job; you understand the agile principles. And they choose of course… it’s one person so it’s a consensus and the person has to want to be on it … Now you have two people. Now you say to them: okay now come to an agreement on who else you’d like to have. If you started with the right person the process goes on and they put together a team that really does well; and they take awhile to learn but they can learn the skills, technical skills, more easily than they can learn the personal skills, the people’s skills as we call them…”

In 2016, after a horrible month of solving some issues, with a delicate suite of products, I realized that this is the time when the core problem could be solved. It could be solved because the key persons were prepared to allow the kind of work I had in my mind for almost 2 years. In that terrible month, I have worked with some wonderful people to fix the problems. I knew that the kind of work I wanted to do needed special people. Even before I spoke with the management, I spoke with each of them separately. I told them what I had in mind and the persons I wanted to do the work with. I needed their green light regarding the work that needs to be done, their future colleagues and if they were willing to join the team. I left them time to reflect on all those things. In this time I talked with no one else. After several days we spoke again, separately, and each of them gave the green light. Then I spoke with management and it was hard…but I was determined, if one of them could not join the new setup, I would not take in charge that new project/product. I wanted from each of the future team members their consensus. And as Jerry Weinberg said, it was not only about the technical skills of these people, it was much much more. Please watch the Jerry Weinberg interview.

2. Scrum Plop(2) – I am amazed that so many Scrum people, from my circles, are not aware of this. It’s about patterns that show and help on how to implement Scrum.  If Scrum guide seems abstract and hard to be decoded, well these patterns help a lot in making sense on how to implement Scrum. There is a pattern called Stable Teams(3) which accurately articulates the problem and also gives a solution:

“…Keep teams stable and avoid shuffling people around between teams. Stable teams tend to get to know their capacity, which makes it possible for the business to have some predictability. Dedicate team members to a single team whenever possible. Members of Stable Teams get to know each other. The team members experience each other’s work style and learn how much work they can do together. A Stable Team grows in familiarity and consistency of meeting mutual expectations and starts developing a Community of Trust…. what is often forgotten when measuring a team’s velocity is that the only way that a team can get to know their velocity is by having the same team members over a longer period of time…”

Trust is a key/serious/important word. Trust takes time because is arising from people interactions over a certain period of time. You cannot create a roadmap or a checklist on how to build trust within a team.

Since I mentioned Scrum above, it is important to also mention 2 important related details about it:

– an important detail, also applicable to teams, is about competence(4)/skill/mastery/expertise. Although this is an aspect that is not explicitly specified in the Scrum guide, it is a sine qua non condition for Scrum to work;

– management plays an important role when forming the team. Not an easy thing to do. But after they’ve formed the team, they should trust them and let them accomplish their mission(5).

Conclusion:

Every time I think about this subject, I think about families. Look at families, at how delicate  things can get sometimes, because family members can’t get along with each other. And it’s not like this problem can be easily solved by a parent, for example, by just saying: “hey, you are brothers, you are supposed to get along”. Some will say, when speaking about team members, that it’s not about friends or family members. And I say “Exactly. It’s even harder and it’s not that easy to impose things”. So, I imagine that for some managers it’s easier to pretend that they don’t know things/techniques  on forming a team, and then use some fancy words and clichés to “solve it”, thus tossing the effort they should have done onto the shoulders of other people. But the reality has its own style to deny certain approaches/ideas/opinions.

What was a surprise for me is that it can be really really dangerous to desire having a Stable Team. The surprise was even bigger that the danger came from people which actually, at least declaratively, supports and promotes Scrum and agility.


(1) Jerry Weinberg, “Agile for Humans #26: Agile Impressions and Errors with Jerry Weinberg”, https://www.youtube.com/watch?v=I_AOoSnhE-8

(2) Scrum Pattern Community, Jim Coplien – Product Owner for the Scrum Patterns effort, http://www.scrumplop.org/

(3) Stable Teams Pattern, https://sites.google.com/a/scrumplop.org/published-patterns/product-organization-pattern-language/development-team/stable-teams

(4) Jim Coplien, “Ten things scrummers do wrong”, https://vimeo.com/42772592

(5) Alistair Cockburn, “Core scrum, barnacles, rumors and hearsay, improved version”, https://www.youtube.com/watch?v=AuUadPoi35M

Forming a team discussion metaphor

Shu(1): I need your help.

Ri: About what?

Shu: Help me with a metaphor. I see teams formed just by simple association of people, at least this is my feeling.  I want to tell my boss, or anyone who does this, that is not quite like this. Sometimes is hard for me to explain a certain subject without being to verbose. But now I need something simple, but powerful to explain what I feel.

Ri: Hmm….[smiling]

Shu: Is hard to start a new battle and a lot of problems will appear because of this …. help me please.

[A moment of silence appears. Shu is looking at Ri puzzled. Suddenly the Ri’s face became serious and his right palm suddenly and firmly is put on the table.]

Ri: Look at the fingers. All have their place.

[Shu looked for several seconds, and put his right hand near Ri’s hand]

Shu: And my fingers are not on your hand and your fingers are not on my hand. Each have its place.

[Ri smiled]

Ri: You see, with this hand you can do a lot of things. It depends on you. The cohesion of the fingers helps in doing different things. They work for a purpose/goal. The same is with people, they are different and they have to work for a common goal/purpose/direction.

[Shu interrupts Ri, like continuing what Ri says]

Shu: And you cannot do that if you are not careful on how you choose those people. If you have a broken/abnormal finger it affects the things you can do with the hand.

[Ri smiled]


From a discussion had with clinical psychologist Dr. Ion Zamfir regarding management.


(1) Alistair Cockburn, “Shu Ha Ri”: http://alistair.cockburn.us/Shu+Ha+Ri