Aug. 20, 2026

GitHub Copilot, Clean Context, Automated Testing & AI Coding Agents with Lars Gyrup Brink Nielsen [MVP]

GitHub Copilot, Clean Context, Automated Testing & AI Coding Agents with Lars Gyrup Brink Nielsen [MVP]
GitHub Copilot, Clean Context, Automated Testing & AI Coding Agents with Lars Gyrup Brink Nielsen [MVP]
M365 FM Podcast
GitHub Copilot, Clean Context, Automated Testing & AI Coding Agents with Lars Gyrup Brink Nielsen [MVP]

Key Takeaways

  • Modern AI coding agents are shifting development beyond simple autocomplete, allowing them to inspect repositories, run tests, and create pull requests.
  • Developer experience focuses on removing friction through automated tooling, standardized workflows, and repeatable processes.
  • Tools like Nx can attach metadata to projects and automatically enforce architectural boundaries using linting rules.
  • Monorepos store multiple projects in a shared repository, making cross-system dependencies more visible and easier to manage.
  • Providing AI coding agents with a clean context and codifying team standards prevents them from making architecture-breaking decisions.
  • Automated testing frameworks like Playwright provide the reliable feedback loops needed to verify changes made by AI coding agents.

AI-assisted development is moving beyond autocomplete and chat. Modern AI coding agents can inspect repositories, modify files, run tests, analyze failures, create pull requests, and execute increasingly complex development tasks. In this episode of the M365 FM Podcast, Mirko Peters talks with Microsoft MVP Lars Gyrup Brink Nielsen about GitHub Copilot, AI coding agents, developer experience, automated testing, TypeScript, JavaScript, Nx, monorepos, Polygraph, GitHub Actions, Playwright, and the architectural foundations required to make agentic software engineering work at enterprise scale.

FROM AI ASSISTANCE TO AI CODING AGENTS
For the last few years, AI development tools have primarily helped developers generate code, autocomplete functions, answer technical questions, and accelerate individual programming tasks. Agentic engineering changes that model. AI coding agents can potentially inspect an existing repository, understand an issue, modify multiple files, run automated tests, analyze failures, make corrections, and prepare a pull request. That changes the central question from "Can AI generate code?" to "Can AI safely perform engineering work inside a real software architecture?"

MEET LARS GYRUP BRINK NIELSEN
Lars Gyrup Brink Nielsen is a Microsoft MVP in Developer Technologies, author, international speaker, tech writer, open-source maintainer, community organizer, and former GitHub Star. His experience spans frontend development, cloud-native systems, developer experience, automated testing, continuous delivery, deployment, and open-source software. He has also worked with GitHub Copilot since its early days and has spent more than a year experimenting with AI coding agents in open-source development.

WHY DEVELOPER EXPERIENCE MATTERS
Developer experience is fundamentally about removing friction from software development. That includes choosing and integrating development frameworks, testing tools, build systems, CI pipelines, documentation, reusable packages, development environments, architectural standards, and automation. Lars contrasts modern developer tooling with earlier workflows involving FTP deployments, directly editing production systems, shared ZIP files, and environments without proper source control. Modern developer experience replaces these fragile processes with repeatable, automated, and verifiable workflows.

ARCHITECTURE SHOULD BE ENFORCED
Documentation alone isn't enough for large software architectures. Lars explains how tooling such as Nx can attach metadata to projects and enforce architectural boundaries. Organizations can define which types of projects may depend on other projects and use linting rules to automatically detect violations. Generators can also scaffold components, services, projects, tests, and configurations according to organizational standards. This becomes particularly important with AI coding agents. Instead of expecting an agent to remember every architectural rule, organizations can make those rules automatically enforceable.

MONOREPOS EXPLAINED
A monorepo stores multiple projects or systems inside a shared source-control repository. Microservices and micro-frontends don't necessarily require separate repositories. They can exist within one monorepo while still being independently built and deployed. The advantage is that dependencies between projects become easier to understand and changes spanning multiple systems can be tested together. However, Lars also explains that moving hundreds or thousands of developers from established repositories into one monorepo can be extremely difficult organizationally.

MONOREPO VS MULTIPLE REPOSITORIES
Separate repositories don't eliminate dependencies between teams. They simply manage those dependencies differently. When two teams maintain dependent systems in different repositories, changes can require coordination, separate environments, cross-repository testing, and synchronized deployments. A monorepo can make those dependencies more visible because the relevant source code exists within the same repository. The larger challenge is often organizational rather than technical: teams still need to communicate, coordinate ownership, and manage dependencies regardless of repository strategy.

WHAT IS NX?
Nx is a development toolchain that helps teams manage complex codebases, project dependencies, tasks, testing, builds, linting, generators, and development workflows. Lars explains how Nx has evolved beyond its earlier JavaScript-focused roots. It can integrate development tools, automate migrations, understand project relationships, orchestrate tasks, and support multiple technologies. It can also determine which projects are actually affected by a change rather than unnecessarily rebuilding or retesting an entire large codebase.

CACHING CAN DRAMATICALLY ACCELERATE DEVELOPMENT
Large codebases can contain hundreds of projects and enormous test suites. Repeatedly running every build, test, linting operation, and compilation task wastes significant developer and CI time. Nx can cache task results. If the relevant source files and dependencies haven't changed, developers can reuse previous results instead of executing the same work again. Remote caching can also allow teams and CI systems to share those results. For AI agents, faster verification becomes especially valuable because an agent may repeatedly modify, test, inspect, and correct code during a single task.

POLYGRAPH AND MULTI-REPOSITORY AI AGENTS

Not every enterprise can move hundreds of existing repositories into a monorepo. Lars discusses Polygraph as a newer approach for helping AI coding agents operate across multiple related repositories. Instead of an AI coding session being isolated to one repository, Polygraph can provide a harness around multiple repositories and their dependencies. This can allow an agent to work across frontend, backend, microservice, and other repositories during the same development task and potentially prepare coordinated pull requests across those systems.

GITHUB ACTIONS AND CONTINUOUS INTEGRATION
Automation is a major part of the development environment discussed throughout the episode. GitHub Actions can provide the CI foundation for building, testing, validating, and deploying changes. Nx can work alongside CI workflows and delegate tasks through its own cloud capabilities. During the rapid-fire round, Lars gives GitHub Actions a particularly strong endorsement, calling it the best CI system.

PLAYWRIGHT FOR AUTOMATED TESTING
Automated verification becomes more important as AI writes a larger percentage of software. When asked to choose between Playwright and Cypress during the rapid-fire round, Lars chooses Playwright. The broader point is significant for agentic development: organizations need reliable automated feedback loops. If an agent changes code, it needs tools capable of determining whether those changes still satisfy the expected behavior.γ…€

GITHUB COPILOT AND THE AGENTIC SHIFT
Lars was an early GitHub Copilot user through his involvement with the GitHub Stars program and provided feedback during Copilot's earlier development. His development workflow has now moved significantly beyond traditional Copilot autocomplete. He explains that he rarely writes code manually anymore and instead instructs coding agents to perform much of the implementation work. The challenge increasingly becomes reviewing and ensuring the quality of the code produced by those agents.

CONTEXT IS THE NEW ENGINEERING PROBLEM
An AI model may understand TypeScript, JavaScript, Angular, React, .NET, testing frameworks, and popular development tools from its training. What it doesn't automatically understand is your organization. Every large software environment contains internal naming conventions, architectural decisions, team standards, project-specific rules, historical constraints, and unique development practices. Those rules need to become accessible to AI agents through mechanisms such as agent instructions, skills, automated checks, architectural boundaries, and repository-specific context.

CLEAN CONTEXT FOR AI CODING AGENTS
Giving an AI agent more information isn't automatically better. Large repositories can contain enormous amounts of source code, documentation, configuration, legacy decisions, and irrelevant files. The challenge is providing the agent with the information required for its current task without overwhelming its working context. Development tooling, dependency graphs, repository structures, project metadata, agent instructions, and automated validation can help narrow that context. The objective is to give agents enough information to make architecturally correct decisions rather than merely locally correct code changes.

CODIFY YOUR TEAM STANDARDS FOR AI
Organizations don't necessarily need to fine-tune an AI model on their complete private codebase. Lars points instead toward codifying team-specific knowledge into agent skills and instruction files such as AGENTS.md. These instructions can explain how a particular team performs common tasks, which conventions should be followed, and how the codebase should be approached. This transforms knowledge that previously existed mainly inside experienced developers' heads into context AI coding agents can use. γ…€



Become a supporter of this podcast: https://www.spreaker.com/podcast/m365-fm-modern-work-security-and-productivity-with-microsoft-365--6704921/support.

πŸš€ Want to be part of m365.fm?

Then stop just listening… and start showing up.

πŸ‘‰ Connect with me on LinkedIn and let’s make something happen:

  • πŸŽ™οΈ Be a podcast guest and share your story
  • 🎧 Host your own episode (yes, seriously)
  • πŸ’‘ Pitch topics the community actually wants to hear
  • 🌍 Build your personal brand in the Microsoft 365 space

This isn’t just a podcast — it’s a platform for people who take action.

πŸ”₯ Most people wait. The best ones don’t.

πŸ‘‰ Connect with me on LinkedIn and send me a message:
"I want in"

Let’s build something awesome πŸ‘Š

Frequently Asked Questions

What is an AI coding agent?

An AI coding agent is an advanced AI development tool that can inspect repositories, understand issues, modify multiple files, run automated tests, analyze failures, and prepare pull requests.

How does Nx help manage large codebases?

Nx is a development toolchain that helps teams manage project dependencies, tasks, builds, and linting while caching results to significantly accelerate development and CI times.

Why is clean context important for AI coding agents?

Clean context ensures that AI agents receive only the relevant information needed for their current task without being overwhelmed by legacy code or irrelevant files, helping them make architecturally sound decisions.

What is the benefit of a monorepo strategy?

A monorepo stores multiple projects or microservices within a shared repository, making dependencies easier to understand and allowing changes spanning multiple systems to be tested together.

1
00:00:00,000 --> 00:00:04,000
Welcome back to the M665FM podcast.

2
00:00:04,000 --> 00:00:07,600
Today we are talking about one of the biggest shifts

3
00:00:07,600 --> 00:00:10,240
happening in software development right now.

4
00:00:10,240 --> 00:00:13,920
For the last few years, AI assist development

5
00:00:13,920 --> 00:00:18,880
has largely made out of complete code generation chat

6
00:00:18,880 --> 00:00:19,800
interfaces.

7
00:00:19,800 --> 00:00:27,000
And yeah, and give some co-pilot to the people.

8
00:00:27,000 --> 00:00:29,840
But now we are entering a different phase.

9
00:00:29,840 --> 00:00:33,120
We are moving from AI that helps developers write code

10
00:00:33,120 --> 00:00:39,120
towards AI agents that can perform development work.

11
00:00:39,120 --> 00:00:42,840
They can inspect repositories, understand issues,

12
00:00:42,840 --> 00:00:46,840
modify files, run tests, reason over failure,

13
00:00:46,840 --> 00:00:51,440
create and pull requests, and potentially work

14
00:00:51,440 --> 00:00:53,560
through entry engine task.

15
00:00:53,560 --> 00:00:57,320
And that's changed the problem.

16
00:00:57,320 --> 00:01:02,440
Because one of the AI agents starts operating inside a large

17
00:01:02,440 --> 00:01:03,440
product code base.

18
00:01:03,440 --> 00:01:06,200
The biggest challenge is no longer simply where

19
00:01:06,200 --> 00:01:10,160
the model can generate wild, type scripting.

20
00:01:10,160 --> 00:01:14,720
The request to become what context does the agent receive,

21
00:01:14,720 --> 00:01:17,960
how does it understand the architecture,

22
00:01:17,960 --> 00:01:21,360
how do you set now your team standards,

23
00:01:21,360 --> 00:01:25,720
and how you stop it from making locally correct,

24
00:01:25,720 --> 00:01:28,040
but architecture of terrible decisions.

25
00:01:28,040 --> 00:01:33,040
And how do you verify that the work in products

26
00:01:33,040 --> 00:01:34,800
is actually safe and merge?

27
00:01:34,800 --> 00:01:39,280
My guest today is Lars Bureau Brink Nielsen.

28
00:01:39,280 --> 00:01:41,160
I always manage writer.

29
00:01:41,160 --> 00:01:42,280
That was pretty good.

30
00:01:42,280 --> 00:01:42,800
Thank you.

31
00:01:42,800 --> 00:01:44,440
Thank you.

32
00:01:44,440 --> 00:01:47,600
Microsoft MVP in development technologies.

33
00:01:47,600 --> 00:01:50,680
And X-Chemchin, Github Star Aluminum,

34
00:01:50,680 --> 00:01:53,040
book author, international speaker,

35
00:01:53,040 --> 00:01:57,640
take writer, resource, meditator, and community organizer.

36
00:01:57,640 --> 00:02:01,240
If I have forgotten something, you can correct me.

37
00:02:01,240 --> 00:02:06,000
Lars has extensive experience across

38
00:02:06,000 --> 00:02:10,040
from development, cloud native systems,

39
00:02:10,040 --> 00:02:14,520
debodder parks, periods, out of maging, testing,

40
00:02:14,520 --> 00:02:17,320
continuous delivery, and deployment.

41
00:02:17,320 --> 00:02:21,400
And yeah, what calls a "gentake experience"

42
00:02:21,400 --> 00:02:25,280
is also been working with Github co-pilot since early days,

43
00:02:25,280 --> 00:02:30,160
and he spent more than a more than a year

44
00:02:30,160 --> 00:02:34,760
automating open source software development.

45
00:02:34,760 --> 00:02:38,440
More recently, Lars has been codified team standards,

46
00:02:38,440 --> 00:02:40,360
especially for a eye-coding agents,

47
00:02:40,360 --> 00:02:43,600
and one of the hardest problems in large

48
00:02:43,600 --> 00:02:46,360
mono-respresenting clean context.

49
00:02:46,360 --> 00:02:50,040
So today, we are going deep into Github co-pilot,

50
00:02:50,040 --> 00:02:53,080
type scripting, and X-play, write, automated testing,

51
00:02:53,080 --> 00:02:54,160
and so on.

52
00:02:54,160 --> 00:02:57,120
Yeah, Lars, welcome to the ELX-65 podcast.

53
00:02:57,120 --> 00:03:00,280
I hope I haven't forgotten anything.

54
00:03:00,280 --> 00:03:01,640
Thank you.

55
00:03:01,640 --> 00:03:03,240
There's always more about that.

56
00:03:03,240 --> 00:03:03,880
That was a lot.

57
00:03:03,880 --> 00:03:07,080
Thank you for remembering all of that.

58
00:03:07,080 --> 00:03:09,000
Yeah.

59
00:03:09,000 --> 00:03:12,280
Lars, before we get into the AI agent topic,

60
00:03:12,280 --> 00:03:15,280
let's start a little bit with your background.

61
00:03:15,280 --> 00:03:19,320
You worked across very broad range of development technologies.

62
00:03:19,320 --> 00:03:24,200
What organically pulled you into software development,

63
00:03:24,200 --> 00:03:27,400
and why did JavaScript become your favorite programming

64
00:03:27,400 --> 00:03:30,200
language?

65
00:03:30,200 --> 00:03:33,480
Oh, then we have to go a long way back,

66
00:03:33,480 --> 00:03:37,480
because I guess already as a child,

67
00:03:37,480 --> 00:03:39,080
I got interested in computers.

68
00:03:39,080 --> 00:03:40,560
I'm from 1986.

69
00:03:40,560 --> 00:03:44,040
I just turned 40 years a few weeks ago,

70
00:03:44,040 --> 00:03:51,800
and got my first Commodore 64 as five years old boy,

71
00:03:51,800 --> 00:03:54,680
and that's what got me hooked, basically.

72
00:03:54,680 --> 00:03:57,720
I couldn't program, but just having to enter

73
00:03:57,720 --> 00:04:00,680
commands on a keyboard and insert cassette tapes and things

74
00:04:00,680 --> 00:04:03,560
like that, that was just really, really interesting to me,

75
00:04:03,560 --> 00:04:06,360
to get to play games.

76
00:04:06,360 --> 00:04:11,560
And then I started tinkering with computers back then,

77
00:04:11,560 --> 00:04:17,880
as you might remember, it was not that easy to set up and install drivers,

78
00:04:17,880 --> 00:04:20,760
and install windows and operating systems, and all that.

79
00:04:20,760 --> 00:04:23,320
It was not nearly as easy as it is today,

80
00:04:23,320 --> 00:04:27,160
so you had to know a thing or two about computers and how

81
00:04:27,160 --> 00:04:29,640
they work and building your own hard,

82
00:04:29,640 --> 00:04:34,280
collecting different sets of hardware,

83
00:04:34,280 --> 00:04:35,960
like the motherboard and the RAMs,

84
00:04:35,960 --> 00:04:37,560
and everything had to fit together,

85
00:04:37,560 --> 00:04:40,520
and you had to plug them in and connect them

86
00:04:40,520 --> 00:04:42,440
to the case and all of that.

87
00:04:42,440 --> 00:04:46,600
So I'm really interested in that type of engineering work,

88
00:04:46,600 --> 00:04:51,880
and how things work generally also been into engines,

89
00:04:51,880 --> 00:04:53,720
but that's for another discussion.

90
00:04:53,720 --> 00:04:58,360
But what then got me interested in programming itself was

91
00:04:58,360 --> 00:05:04,600
when my neighbor visited me, and he had just started in the 10th grade,

92
00:05:04,600 --> 00:05:08,360
and they had an HTML course in his school.

93
00:05:08,360 --> 00:05:12,760
So he taught me the basics of that, and that's, I never stopped from then,

94
00:05:12,760 --> 00:05:17,320
and that's 25 years ago, 26 years ago.

95
00:05:17,320 --> 00:05:21,400
So I always knew that I wanted to be something with computers.

96
00:05:21,400 --> 00:05:23,640
I didn't know what, exactly.

97
00:05:23,640 --> 00:05:26,840
But I ended up studying computer science,

98
00:05:26,840 --> 00:05:30,120
got a bachelor's degree, and then I've been working professionally

99
00:05:30,120 --> 00:05:35,640
with software for 14 years now, but I was really tinkering with it for,

100
00:05:35,640 --> 00:05:41,560
yeah, 25, 26 years doing hobby projects, and hand coding HTML,

101
00:05:41,560 --> 00:05:45,160
and CSS, and JavaScript, and even before,

102
00:05:45,160 --> 00:05:48,600
there was any CSS, and there was barely any JavaScript, and so on.

103
00:05:48,600 --> 00:05:54,040
And then you're asking me, "Miracle, how did JavaScript become my favorite language?"

104
00:05:54,040 --> 00:05:57,800
Well, it was just always the web platform that intrigued me,

105
00:05:57,800 --> 00:06:01,400
since my neighbor visited me and taught me HTML,

106
00:06:01,400 --> 00:06:05,080
and I could get something on the screen on my own,

107
00:06:05,080 --> 00:06:08,600
just by writing something in Notepad, and then opening it in a browser.

108
00:06:08,600 --> 00:06:12,840
That was really, really cool to me, and you could view the source of any webpage,

109
00:06:12,840 --> 00:06:16,520
copy some snippets, and tinker around like that,

110
00:06:16,520 --> 00:06:20,360
and make it look like things that people know,

111
00:06:20,360 --> 00:06:24,360
like giving in a Windows XP theme on your website, things like that.

112
00:06:24,360 --> 00:06:28,440
So, yeah, that was really what got me interested,

113
00:06:28,440 --> 00:06:31,320
and then I just kept going.

114
00:06:31,320 --> 00:06:39,400
When I was studying computer science, it was the first wave of mobile applications,

115
00:06:39,400 --> 00:06:43,640
but I still wanted to bet on the web,

116
00:06:43,640 --> 00:06:45,880
and today mobile applications are more common,

117
00:06:45,880 --> 00:06:48,040
but back then it was sort of a bubble at first.

118
00:06:48,040 --> 00:06:55,080
Everyone was doing mobile applications, but then they stopped for a while.

119
00:06:55,080 --> 00:06:58,760
Now it's more common again, but for many years,

120
00:06:58,760 --> 00:07:03,640
that wasn't the best idea, and the web apps were more interesting.

121
00:07:03,640 --> 00:07:05,560
And I still think web apps are more interesting,

122
00:07:05,560 --> 00:07:10,440
and they can do almost the same things as native mobile apps,

123
00:07:10,440 --> 00:07:11,640
from my perspective.

124
00:07:11,640 --> 00:07:22,360
Well, you have so many experience in JavaScript.

125
00:07:23,160 --> 00:07:29,800
How did the ecosystem like when you start and what is today?

126
00:07:29,800 --> 00:07:35,800
Yeah, well, when I started 15, 16 years old,

127
00:07:35,800 --> 00:07:40,040
I didn't have a code editor, I was writing a note pad.

128
00:07:40,040 --> 00:07:43,720
I even wrote pen and paper, PHP code, for example.

129
00:07:43,720 --> 00:07:50,360
And then I had to imagine how that worked without having a real server

130
00:07:50,360 --> 00:07:53,240
in real computer. I took some pearl courses as well,

131
00:07:53,240 --> 00:07:58,840
outside of school hours, and so going, coming from,

132
00:07:58,840 --> 00:08:02,920
that was the most basic form of programming or web development for me.

133
00:08:02,920 --> 00:08:05,080
And then when I got into professional development,

134
00:08:05,080 --> 00:08:13,640
let's see, I think it was around the time where you had to have backward compatibility with

135
00:08:13,640 --> 00:08:25,080
Internet Explorer 8, and sort of the first, a second round of application frameworks in JavaScript,

136
00:08:25,080 --> 00:08:32,360
were just coming along. It was AngularJS, was big view, no, not view that wasn't there yet.

137
00:08:32,360 --> 00:08:37,320
Ember was then the first version of React was released a few years later,

138
00:08:37,320 --> 00:08:47,960
or around that time. And responsive web design was pretty, pretty new. And I remember we were

139
00:08:47,960 --> 00:08:58,200
rewriting a big software system, and my CTO at the time thought it was a waste of time to

140
00:08:58,200 --> 00:09:03,240
make it work on tablets. Nobody wanted to use it on tablets. And my perspective was,

141
00:09:04,040 --> 00:09:08,200
well, if they don't want to use it on tablets, it's probably because it doesn't work on tablets. Maybe if

142
00:09:08,200 --> 00:09:17,000
you designed it responsibly for tablets, even mobile phones, even mobile first, then maybe people

143
00:09:17,000 --> 00:09:22,360
want to use it. The users want to use it because it's a pretty good experience, right? And of course,

144
00:09:22,360 --> 00:09:33,240
that turned out to be right, as I see things. Yeah, it's funny. I started nearly the same way,

145
00:09:33,240 --> 00:09:45,480
but I make all the wrong decision you can do. I think first it was a Dolby Flash, I think, then

146
00:09:45,480 --> 00:09:57,320
Silverlight that I do it is a CSS course, but yeah, you have done the JavaScript and a TypeScript.

147
00:09:58,920 --> 00:10:09,000
Why become so essential part of your development workflow? TypeScript in particular, or JavaScript,

148
00:10:09,000 --> 00:10:19,160
or TypeScript? Well, I didn't choose it in the beginning of my career. I had to pick a framework.

149
00:10:23,400 --> 00:10:29,960
Well, I actually initially, I didn't, I also didn't pick AngularJS. I picked something called

150
00:10:29,960 --> 00:10:38,360
Nugout. JS by people, some people at Microsoft, Steve Sanderson, a few other people. And with a small

151
00:10:38,360 --> 00:10:44,680
JavaScript framework, you didn't have to compile it. There was a template language,

152
00:10:44,680 --> 00:10:52,440
similar to what Angular, the modern Angular has today, but it worked at runtime. Of course,

153
00:10:52,440 --> 00:11:02,200
that also set some limitations for how complex the application can be. But they did have one good

154
00:11:02,200 --> 00:11:09,480
primitive in Nugout. JS. They had observables, and that was before Angular got obsessed with RxJS

155
00:11:09,480 --> 00:11:18,840
observables. But unfortunately, they also had two-way data binding, which turned out to be

156
00:11:19,800 --> 00:11:26,520
not so scalable for big applications. But we were really just getting started back then at what

157
00:11:26,520 --> 00:11:34,040
was possible. Single-page application was a pretty new concept to do mainstream. I mean, Gmail was

158
00:11:34,040 --> 00:11:40,680
one of the first success stories of that. That was some years earlier, but to do it in an enterprise

159
00:11:40,680 --> 00:11:47,160
setting was still relatively new, and not something that was a given, that you could do as single-page

160
00:11:47,160 --> 00:11:52,760
application in JavaScript. No, no, you could just use the server-side technologies like ASP.NET,

161
00:11:52,760 --> 00:11:57,480
then PHP, GlareVel, and Ruby, and Python, all of that.

162
00:11:57,480 --> 00:12:05,720
Oh, yeah, Ruby arrays. Oh, that's what I was all about. Ruby and Rails, Django, things like that.

163
00:12:05,720 --> 00:12:16,360
They go at all times. Yeah. Normally, I ask your MVP, I ask about the MVP title by the year.

164
00:12:16,360 --> 00:12:26,360
You have so many other titles. The addicts champion, you are a GitHub star, you are also an

165
00:12:26,360 --> 00:12:32,920
outro, a maintainer, and community organization. How important has Open Source been shaping the way

166
00:12:32,920 --> 00:12:42,920
you think about software engineering? Well, just a small correction. I'm not a GitHub star anymore.

167
00:12:42,920 --> 00:12:48,840
I was for four years as a zone, I'm an alum, so I'm just mentioned as a form of GitHub star.

168
00:12:48,840 --> 00:12:54,920
So I'm not directly involved in that community program anymore. I am an active Microsoft MVP,

169
00:12:54,920 --> 00:13:00,920
as you mentioned, and have been so for, I think, seven years straight at this point, I'm involved

170
00:13:00,920 --> 00:13:09,320
in the NX Champions program as well, around the NX tool chain, and now the Polygraph product,

171
00:13:09,320 --> 00:13:17,560
which is brand new from the NX team as well. But yeah, Open Source, well, I love Open Source. I love

172
00:13:17,560 --> 00:13:23,240
Learning in public. I love the idea of Open Source. I like building things with Open Source,

173
00:13:23,240 --> 00:13:31,640
and especially now with AI coding agents, where you can actually sit one person and get a lot of

174
00:13:31,640 --> 00:13:39,400
stuff done, because of the amplification that the AI coding agents gives you. So now I'm trying all

175
00:13:39,400 --> 00:13:45,400
sorts of things. I've been doing that for more than a year now, just things I couldn't do before,

176
00:13:45,400 --> 00:13:50,680
because it would take too much time for me to invest in my personal time just to learn something,

177
00:13:50,680 --> 00:13:56,520
and then be able to do it. Now you can either the AI already knows, or you can point it to some

178
00:13:56,520 --> 00:14:02,280
documentation and books and articles, things like that, and then it can learn in a matter of minutes or

179
00:14:02,280 --> 00:14:09,320
hours. And that's what's insane about AI coding agents, that it really gives you superpowers.

180
00:14:09,320 --> 00:14:17,640
It becomes superhuman. And yeah, circling back to Open Source, well, I have contributed to Open Source

181
00:14:17,640 --> 00:14:25,560
for, I think, 12 years or so. I've been part of a few Open Source teams. I still make

182
00:14:26,360 --> 00:14:32,920
contributions every year to various ecosystems like Angular, I maintain some Angular,

183
00:14:32,920 --> 00:14:39,080
testing and logging libraries as well as state management. And I do a lot of personal

184
00:14:39,080 --> 00:14:46,040
Open Source projects, just because I think it's interesting and because I'm suddenly capable of

185
00:14:46,040 --> 00:14:53,400
doing things I didn't, I hadn't learned yet before. For example, I just created a type checker

186
00:14:53,400 --> 00:14:59,000
for the Angular framework where it only does type checking. So it doesn't do the build or the

187
00:14:59,000 --> 00:15:05,240
compilation. It just does the type checking step, but it does it fast and then combine it with this

188
00:15:05,240 --> 00:15:11,800
NX tool chain. You can do it per project in a large code base and then enable NX

189
00:15:11,800 --> 00:15:17,080
cashing on top of that. And that gives that that's really good for an AI because that helps it the way

190
00:15:17,080 --> 00:15:23,320
of making a static analysis of the code really fast for particular slice of the code.

191
00:15:23,320 --> 00:15:34,840
>> Yeah, yeah. Before I start a record session, I look a little bit about my guest and I also use AI

192
00:15:34,840 --> 00:15:47,160
and normally I ask, "What is the term?" The guest, he was frequently, and for me or for the AI

193
00:15:47,160 --> 00:15:58,120
say, you use the term development experience quite a lot. >> Oh. >> Well, that's correct, definitely

194
00:15:58,120 --> 00:16:03,960
correct. I didn't know that I used it a lot, but it's definitely what I've been focusing on a lot

195
00:16:03,960 --> 00:16:10,360
professionally, especially. >> What do developer experience actually mean to you?

196
00:16:16,760 --> 00:16:26,120
>> I don't have a definition ready, but just on top of my mind, but to me it's removing friction in

197
00:16:26,120 --> 00:16:33,880
the tooling you use in a specific code base or within a team or an organization. So for example,

198
00:16:33,880 --> 00:16:41,560
I have been in a lot of so-called systems teams or platform teams where we have

199
00:16:42,120 --> 00:16:47,080
built software to enable other teams to build software on top of that software within a company,

200
00:16:47,080 --> 00:16:57,560
large organizations usually. So we would set up the tooling like CI pipelines and automate

201
00:16:57,560 --> 00:17:07,880
testing frameworks and NX and dot-net solutions and all that kind of stuff and then make reusable

202
00:17:07,880 --> 00:17:14,600
packages for setting up new projects, documentation, how to courses for writing tests and

203
00:17:14,600 --> 00:17:25,480
optimizing the CI pipelines again and picking a date time framework for dot-net and all those

204
00:17:25,480 --> 00:17:35,800
kind of things that makes the other teams support them in having to, yeah, they can spend more time

205
00:17:35,800 --> 00:17:45,080
writing product code and they might not have a big knowledge in this area of all these tooling

206
00:17:45,080 --> 00:17:52,120
and schematics and testing and all of that, but when they get these reusable software components,

207
00:17:52,120 --> 00:17:59,480
then it becomes easier for them and you have unbought them and then they can spend more time doing

208
00:17:59,480 --> 00:18:13,640
what is the priority of their team. Interesting. I think a little bit what for you, it's a poor

209
00:18:13,640 --> 00:18:19,640
developer experience, what is a good one and what separates it from an excellent one.

210
00:18:19,640 --> 00:18:27,320
Well, I'll give you a couple of examples of very poor development experience.

211
00:18:28,120 --> 00:18:34,600
So one you definitely have tried yourself, it's deploying to production via FTP.

212
00:18:34,600 --> 00:18:44,440
So you take, for example, a PHP files or multiple usually and you'll just upload it to a production

213
00:18:44,440 --> 00:18:51,080
server via FSP and then you check did it work or did I just break production? So a lot of setups used

214
00:18:51,080 --> 00:18:57,640
to be that many many years ago at this point and sometimes you would even sit and edit

215
00:18:57,640 --> 00:19:03,320
or I saw some people sitting and editing the code directly on the production server.

216
00:19:03,320 --> 00:19:09,080
So there was not even source control, it was just edit the file on the server and then you hope

217
00:19:09,080 --> 00:19:16,040
you have a backup and there's no version control. That's a very poor developer experience.

218
00:19:16,040 --> 00:19:23,400
The room for the margin for error is so big, there are so many things that can go wrong and

219
00:19:23,400 --> 00:19:31,320
will go wrong. And would you say makes a good one to your nearly perfect awesome, I don't know,

220
00:19:31,320 --> 00:19:38,360
to to to outstanding, I say, I use out, I use out, well, I'll just give you one more poor example.

221
00:19:38,360 --> 00:19:46,600
So I was at a web or web agency or e-commerce agency, we have many clients.

222
00:19:48,200 --> 00:19:57,240
And so when you would start work on a client's project, there was a shared file server

223
00:19:57,240 --> 00:20:04,520
in the internal network. So and there wasn't again, there was no source code, no version control,

224
00:20:04,520 --> 00:20:09,560
not that they didn't exist. This organization just hadn't adopted them. There was no

225
00:20:10,120 --> 00:20:20,520
Git, no subversion, nothing like that. So instead, they would make a zip archive of the source code

226
00:20:20,520 --> 00:20:27,720
and then put it in the shared file server. So when the next person came, they would take that

227
00:20:27,720 --> 00:20:32,840
zip file, copy it to their own machine, unzip it, work on the code,

228
00:20:32,840 --> 00:20:36,280
zip it back, put it back on the production server, override the existing file.

229
00:20:37,400 --> 00:20:40,440
But then sometimes, I don't know if you can guess what happened.

230
00:20:40,440 --> 00:20:50,600
No, no. You would have to start working on a project and you go into the file server

231
00:20:50,600 --> 00:20:54,360
and there was no file, there was no zip file, no source code,

232
00:20:54,360 --> 00:21:01,000
because instead of copying the file, the previous person had moved it to their own machine and

233
00:21:01,000 --> 00:21:10,840
not put it back. Oh, how often this, oh yeah, fuck yeah, this was so often then.

234
00:21:10,840 --> 00:21:16,040
That's that support developer experience.

235
00:21:16,040 --> 00:21:25,480
Well, yeah, I really forgotten this, oh my god, this was so often.

236
00:21:28,360 --> 00:21:32,040
And what would you say make good to, to ask me?

237
00:21:32,040 --> 00:21:38,520
So what's a good developer experience? Well, these days is it's a lot also about the

238
00:21:38,520 --> 00:21:44,920
agent tech experience. So, but we can talk more about that later maybe, but for the developer

239
00:21:44,920 --> 00:21:50,120
experience, to me, it's a lot about the development ruling. So having the right,

240
00:21:50,120 --> 00:21:57,880
I mean, shouldn't be specific to an editor, should be able, ideally, to use any editor,

241
00:21:57,880 --> 00:22:05,720
your editor of preference, but maybe the framework decisions have been made, for example,

242
00:22:05,720 --> 00:22:10,120
for the web application framework, but also for the testing framework, the testing runner,

243
00:22:10,120 --> 00:22:18,200
the built tool chain, the bundler, the development server, the storybook, for example,

244
00:22:18,200 --> 00:22:23,800
set up for your reusable front end components when you're building front end like me.

245
00:22:25,000 --> 00:22:31,560
And maybe even, so I'm a big fan of NX and one of the things you can do there is you can set up

246
00:22:31,560 --> 00:22:39,960
a project you can add tags. So you can add any metadata per project. And then based on that,

247
00:22:39,960 --> 00:22:45,160
you can make architectural boundaries, which is really important in a large code base. So you can

248
00:22:45,160 --> 00:22:50,040
say this type of project can only depend on that type of projects of the classical N tier

249
00:22:50,760 --> 00:22:55,160
architecture, for example, with database extraction layer at the bottom and business logic,

250
00:22:55,160 --> 00:22:59,880
and then maybe UI top. So you can make enforcement of that through

251
00:22:59,880 --> 00:23:07,080
lint rules added by NX when you add your own metadata per project. I think that's really

252
00:23:07,080 --> 00:23:13,800
nice for waking in a large code base. That's one example. And the other one is, so maybe you have a

253
00:23:13,800 --> 00:23:21,240
special naming convention for your large code base. But you can't, it's so complicated that you can

254
00:23:21,240 --> 00:23:25,640
even remember all the details yourself or anyone on the team. So then you make

255
00:23:25,640 --> 00:23:34,200
and what's called an NX generator, which can scaffold projects or front end components or

256
00:23:34,200 --> 00:23:40,600
services or whatever that follow that naming convention to the dot. And then of course, you add

257
00:23:40,600 --> 00:23:47,400
a lint rule on top of that so that no matter whether it was generated by the NX generator

258
00:23:47,400 --> 00:23:54,120
or by an AI agent or by a human handwriting it or copy and pasting it or maybe it got

259
00:23:54,120 --> 00:23:58,520
stale from an old branch, then the lint will catch it and say, oh, you're not following the

260
00:23:58,520 --> 00:24:04,120
naming convention. You should use this format instead. So having a lot of CI checks like that,

261
00:24:04,120 --> 00:24:09,960
that you can run locally and it goes into the CI pipelines. That's one example of a good

262
00:24:09,960 --> 00:24:15,480
developer experience to me. And then taking it to another extreme is what you mentioned in the

263
00:24:15,480 --> 00:24:20,760
beginning, continuous delivery and continuous deployments. I don't know how familiar you are

264
00:24:20,760 --> 00:24:27,160
with those terms, what you've done in that area yourself. I use the tools for it. Yeah.

265
00:24:27,160 --> 00:24:39,480
It's, yeah, I like it. Especially I'm more the tool guy. So I like to be guided from item

266
00:24:39,480 --> 00:24:47,880
well from DevOps, the git on it, so on. And I get my steps because I'm what a real corner.

267
00:24:47,880 --> 00:24:53,880
I'm more an architect. And so I speak to the people. They have more experience like you.

268
00:24:53,880 --> 00:24:59,640
But you've used GitOps as well. I heard you mentioned GitOps. What was that like?

269
00:25:01,800 --> 00:25:13,720
It's worse. I really fear I'm a deaf-optist guy. I hate it for the start, but I love all these

270
00:25:13,720 --> 00:25:23,960
kind of automation and versioning. And it's worse. I don't know. I think I use both to know together

271
00:25:23,960 --> 00:25:37,560
because I have my my my my boards. I have my my clear overview about my GitOps. It's so good. I think,

272
00:25:37,560 --> 00:25:48,520
yes, how was it? First, I feel very bad because as I started, deaf-optists don't have this

273
00:25:49,080 --> 00:25:56,760
integration. And I hate it. I don't use it. I say, no, no, no, no. But now I think it's, yeah,

274
00:25:56,760 --> 00:26:03,000
it's worked for me. Yeah, I think it's feels, I'm not perfect, but good.

275
00:26:03,000 --> 00:26:14,360
So yeah, so you've used, I don't know if I confused what you said, did you say GitHub or GitOps?

276
00:26:15,160 --> 00:26:23,640
The GitHub. Oh, I thought you said GitOps. Oh, because that's more bleeding edge, even more than

277
00:26:23,640 --> 00:26:29,080
continuous delivery, continuous deployment. I mean, they can be combined, but have you heard about

278
00:26:29,080 --> 00:26:37,400
GitOps? No, no. So similar to DevOps, but Git instead of DevOps, so GitOps. So that's a way of

279
00:26:38,440 --> 00:26:47,080
managing your environments and deployments and releases in a Git repo. Sometimes the same repo,

280
00:26:47,080 --> 00:26:53,160
and some infrastructure folder, sometimes in a separate repo. And then there are a lot of tool

281
00:26:53,160 --> 00:27:03,960
chains that can, yeah, that solves all the problems that come with that. Because I used it for a project,

282
00:27:03,960 --> 00:27:13,240
and we sort of build our own with some existing tool chains, but then we built some custom GitHub

283
00:27:13,240 --> 00:27:18,520
workflows and actions on top of that to make it work so that we could have a MOLSI

284
00:27:18,520 --> 00:27:27,720
repo system where we could have one of these GitOps environment reposts that could connect

285
00:27:28,280 --> 00:27:34,760
with all the other repo so that you could, for example, open a pull request and then an entire Kubernetes

286
00:27:34,760 --> 00:27:41,320
cluster with real databases and all of that was set up just for your one pull request

287
00:27:41,320 --> 00:27:48,200
with a preview or testing environment so that you could see it in a production-like environment.

288
00:27:48,200 --> 00:27:52,360
Of course, it wasn't to the scale of our production systems, but it was a real environment,

289
00:27:52,360 --> 00:27:57,400
was running on real Kubernetes cluster, was spinning up all the real containers and so on,

290
00:27:57,880 --> 00:28:06,920
just on slightly worse hardware, not production servers. But that was so incredible to see that

291
00:28:06,920 --> 00:28:11,240
and use that, but I also know that it took four months for the team to build that,

292
00:28:11,240 --> 00:28:17,320
and in those four months we didn't build any features. So, and of course, you always know the balance

293
00:28:17,320 --> 00:28:23,080
of make features or improve the development experience or the deployments, the workflows,

294
00:28:23,080 --> 00:28:33,000
or whatever. That's always the, what, which one do you choose? Yeah, there are some cool things

295
00:28:33,000 --> 00:28:41,480
we'll talk about. Let's take the NX stuff a little bit later. You say monoreps or large monoreps.

296
00:28:41,480 --> 00:28:47,960
I'm more working because my brain works, so I'm more than multi-independent

297
00:28:47,960 --> 00:28:58,520
respiratory guy. What, why should organization adapt monorep or what is the monorep and why should

298
00:28:58,520 --> 00:29:11,000
organization adapt this? So, and monorepo is using one Git repo or whatever version control system

299
00:29:11,000 --> 00:29:18,520
you're using and having all your systems in that shared repo, that shared Git repo.

300
00:29:18,520 --> 00:29:30,120
So, monorepo, well, you can have multiple systems and they can all be deployed from that single

301
00:29:30,120 --> 00:29:36,360
repo. So, even if you have a microservice architecture or micro-frontends, they can still share

302
00:29:36,360 --> 00:29:43,320
the same repo and be independently deployed. And that's one confusion that some people

303
00:29:43,320 --> 00:29:49,240
a misconception they get that if you have microservices or micro-frontends, they have to be in

304
00:29:49,240 --> 00:29:58,280
different repos. No, that's not the case. It's more matter of organizing the folders and maybe

305
00:29:58,280 --> 00:30:06,040
using some tooling like NX or Turbo repo, Rush or Learner base. There's a bunch of them.

306
00:30:06,920 --> 00:30:15,640
So, yeah, so that's a monorepo, having multiple projects or multiple systems in the same Git repo.

307
00:30:15,640 --> 00:30:21,080
And when you have that, then you have to either make some custom scripts or find some working,

308
00:30:21,080 --> 00:30:30,920
some tool change that can help you with that. And yeah, it's just a big, I love monorepos,

309
00:30:30,920 --> 00:30:37,400
but I also have seen in huge systems that it's with hundreds or thousands of developers.

310
00:30:37,400 --> 00:30:44,680
It's not easy to get them into one repo because they already have dozens or hundreds of repos

311
00:30:44,680 --> 00:30:49,880
in dozens or hundreds of teams and hundreds or thousands of developers. So, getting them into one

312
00:30:49,880 --> 00:30:55,880
repo is really hard, unless you did it from the beginning and you kept onto having just this one

313
00:30:55,880 --> 00:31:03,560
monorepo. I mean, Google, Microsoft has, Google has one monorepo for all their internal systems.

314
00:31:03,560 --> 00:31:10,440
They have some open source repos. Of course, they are in separate repos, like Angle has a few

315
00:31:10,440 --> 00:31:16,440
repos, for example, but they are actually synced, every commit is synced into the Google monorepo.

316
00:31:16,440 --> 00:31:22,520
So, they use their commit from their open source repo in their internal monorepo in Google, as an

317
00:31:22,520 --> 00:31:29,240
example, Microsoft has not one monorepo, but a few, for example, one for office, one for windows,

318
00:31:29,240 --> 00:31:39,160
and so on. Okay. Yeah, I think for my understanding, how did we, when we have one,

319
00:31:39,160 --> 00:31:44,440
it's called it all be, I think it's also hard, not thousands of the developers, but hundreds or

320
00:31:44,440 --> 00:31:56,520
10 of the developers, it's called be complicated. How can we handle this, that we get a result? And then,

321
00:31:56,520 --> 00:32:06,520
I think when I have all the monorepo, then one due to makes an epic failure, and nothing, nothing

322
00:32:06,520 --> 00:32:15,640
runs again, I use the, yeah, and you're touching on something important here. It's usually not the

323
00:32:15,640 --> 00:32:20,680
tooling, the developer experience, or the development tool, that's the problem. It's usually people,

324
00:32:20,680 --> 00:32:28,040
people having to interact with each other and manage their dependencies between the teams,

325
00:32:28,040 --> 00:32:35,000
and whether you're in multiple repos or in a monorepo in a shared code base, there will be problems.

326
00:32:35,880 --> 00:32:41,800
And, and going into separate repos doesn't solve the problems. It just manages them in another way,

327
00:32:41,800 --> 00:32:48,200
because now, you can't, another team can't contribute to your code, so they have to talk to you

328
00:32:48,200 --> 00:32:54,280
and make change requests. Can you change this? I depend on that. And so on. Okay, so how do we test that

329
00:32:54,280 --> 00:32:58,920
in your repo? We're in separate repos. Now we have to spin up an environment that apply both our

330
00:32:58,920 --> 00:33:07,080
code bases and see if it breaks. Whereas in a monorepo, you can usually run the multiple systems,

331
00:33:07,080 --> 00:33:19,400
even locally, or more easily added to a pre-u environment, because you have all the code available

332
00:33:19,400 --> 00:33:27,080
in just one repo. But as I said before, it's not, it's not easy to move many, many developers into one

333
00:33:27,080 --> 00:33:33,240
repo, especially not if they already have many repos. So something new that came in this area is

334
00:33:33,240 --> 00:33:39,560
actually, as I mentioned, from the NXT. NXT has always been a monorepo toolchain, but they have

335
00:33:39,560 --> 00:33:47,240
also seen with all these Fortune 500 companies and big enterprises that it's near, near to impossible

336
00:33:47,240 --> 00:33:54,680
to get many, many repos, many, many developers. You get them into a monorepo. It can be done,

337
00:33:54,680 --> 00:34:00,440
but even that process is just it's long and hard and you need experts and you need a bunch of

338
00:34:00,440 --> 00:34:07,480
tooling to make it work. So what they have done is that the next is they have released a new product

339
00:34:07,480 --> 00:34:22,760
called Polygraph. And that is related to AI in that it's also a meta harness. So it helps your AI

340
00:34:22,760 --> 00:34:30,200
coding agent set up or manage multiple repos that have dependencies between each other.

341
00:34:30,200 --> 00:34:35,720
So you can manage multiple Git repos in a single session and you can say I want to change this,

342
00:34:35,720 --> 00:34:39,960
then I want to change it both in the backend repo and the front end repo and this first service

343
00:34:39,960 --> 00:34:47,560
repo and so on, microservice repo. And it can do all of that. It can run it on your machine.

344
00:34:47,560 --> 00:34:54,600
I can see how the dependencies go. NX has this concept of a project graph where you can see how

345
00:34:54,600 --> 00:34:59,560
the projects are interconnected. That used to be in the same code base. Now you get something

346
00:34:59,560 --> 00:35:05,160
similar in a poly repo set up. So now that's why it's the polygraph because it's the graph for

347
00:35:05,160 --> 00:35:11,000
poly repos. So you can see how they're connected even though they're not sharing the same code base

348
00:35:11,000 --> 00:35:18,120
or the same same Git repo. And then it can make your AI coding aided understand that better and

349
00:35:18,120 --> 00:35:27,560
it has some session recording so that it's you can sort of backs up or logs the sessions you have

350
00:35:27,560 --> 00:35:32,360
with your AI coding agent and then you can share it with another developer on your team and say can

351
00:35:32,360 --> 00:35:38,360
you can you continue this session. Here's the whatever key and they could jump in in their AI

352
00:35:38,360 --> 00:35:44,520
coding agent, open up polygraph and say resume this session and now they're continuing your session

353
00:35:44,520 --> 00:35:50,120
from your machine on their own machine and they still have they still have this so maybe for this one

354
00:35:50,120 --> 00:35:54,840
session these two repos or these three repos I set up because they are relevant to the change

355
00:35:54,840 --> 00:36:02,680
you're making. So now it's like having the environment set up for for the AI. So you already did it

356
00:36:02,680 --> 00:36:06,760
just by configuring polygraph and now you're sharing it with your colleague. Here's the here's the

357
00:36:06,760 --> 00:36:12,280
harness for for this change and then you can use that to get it to open multiple pull requests

358
00:36:12,280 --> 00:36:19,160
in multiple repos on GitHub for example. And then then manage that dependency through the AI

359
00:36:19,160 --> 00:36:27,560
coding agent. What do you think about that? I have so so so many questions about monoreps but

360
00:36:28,760 --> 00:36:38,280
let me a little bit unfair and I'm a little bit out of this topic. I see some guys have an X and

361
00:36:38,280 --> 00:36:45,800
stand on their LinkedIn profile. I never never before heard before we have say we make make this

362
00:36:45,800 --> 00:36:57,240
podcast. I have googling or as Tetris BT a little bit about an X and I don't know really

363
00:36:58,200 --> 00:37:08,920
understand what an X is is an X and building system is it a frame where for monoreps or is it a

364
00:37:08,920 --> 00:37:17,080
developer platform? What is an X? Everything you just said. It has some it has multiple features it

365
00:37:17,080 --> 00:37:24,120
has grown over years and the product I mentioned before polygraph that's a separate product but also

366
00:37:24,120 --> 00:37:30,120
from the NX company. They used to be called novel technologies and they're still legally called that

367
00:37:30,120 --> 00:37:35,240
then they switched their name to NX and the company as well because NX was their primary product

368
00:37:35,240 --> 00:37:41,560
most of it was was and is open source and then there are some premium features on top of that

369
00:37:41,560 --> 00:37:47,560
they're called NX Cloud and things like that. So but polygraph is something separate it's a separate

370
00:37:47,560 --> 00:37:53,880
product it doesn't require NX there's basically not even an NX integration polygraph yet

371
00:37:53,880 --> 00:37:59,160
I'm sure it will come later on that's a natural fit for these two technologies but just to be

372
00:37:59,160 --> 00:38:04,120
clear that polygraph is separate you don't need NX to use polygraph if you work in multiple

373
00:38:04,120 --> 00:38:11,640
repos whether it's open source or in our source or just a big big company many developers many

374
00:38:11,640 --> 00:38:18,760
repos then and you use AI coding agents then polygraph is is a pretty sweet product and right now

375
00:38:19,320 --> 00:38:25,000
everything's free because it's it's early stages so you can you just submit a form and then you

376
00:38:25,000 --> 00:38:32,280
you get access to to use it and use all the features for free for now so and there's no you don't

377
00:38:32,280 --> 00:38:40,680
have to add anything to the repos to use it it's it's driven via their cloud servers of course if

378
00:38:40,680 --> 00:38:44,520
if you are in a company you might need to have them have them

379
00:38:46,360 --> 00:38:54,120
vetted as a vendor they have typed to stock to compliance and certifications and all of that so

380
00:38:54,120 --> 00:39:00,200
but you might have to go through that vetting process if you're in an enterprise but of course

381
00:39:00,200 --> 00:39:08,920
that's possible both with NX and polygraph then circling back to what is NX well it it used to be

382
00:39:08,920 --> 00:39:16,120
mostly about javascript code places whether that's notice bagans or angular react frontens or

383
00:39:16,120 --> 00:39:26,600
whatever and it was about picking a few technologies not just one of each but a few for example

384
00:39:26,600 --> 00:39:33,560
react and angular has official integrations in an NX and then testing wise there's just karma

385
00:39:33,560 --> 00:39:41,880
and vtest and vtest browser so and then so in javascript there's so many tools and they change

386
00:39:41,880 --> 00:39:47,320
all the time so it's hard to figure out how to set all of that up so basically that's the biggest

387
00:39:47,320 --> 00:39:52,280
or that used to be the the big benefit of NX that it can integrate all these tools together

388
00:39:52,280 --> 00:40:01,480
and when new versions arrive NX will have configuration or code migrations that run automatically

389
00:40:01,480 --> 00:40:07,320
no matter how many projects you have it will upgrade all the projects in your entire code base

390
00:40:07,320 --> 00:40:14,200
with the configurations for each of these tool chains like testing and linting and and building

391
00:40:14,200 --> 00:40:21,080
and and compilation all of that so that it was just again something that that's part of a good

392
00:40:21,080 --> 00:40:25,160
developer experience is not having to worry about how you set up all those different tools

393
00:40:25,160 --> 00:40:31,160
and and how they integrate together so that's something NX did for you and then on top on top of

394
00:40:31,160 --> 00:40:39,160
that it has these generators as I said where you can scaffold components or configurations or tests

395
00:40:39,160 --> 00:40:47,880
or whatever and you can make your own and it has what's called the executors which are

396
00:40:47,880 --> 00:40:55,880
rappers for different tools so there was an executor for eos lint there was one for just testing

397
00:40:55,880 --> 00:41:00,040
and so on so basically all your CLI commands had what's called an executor in NX

398
00:41:00,840 --> 00:41:06,920
which meant that NX could run them for you across all even across hundreds of projects it could run

399
00:41:06,920 --> 00:41:12,760
all of them so all the tests for example whether it's with locally on CI and you can filter the

400
00:41:12,760 --> 00:41:19,720
projects based on these metadata project tags and so on today though you don't need this special

401
00:41:19,720 --> 00:41:27,240
context of a concept of it and an executor anymore NX will also detect the tools you have the

402
00:41:27,240 --> 00:41:34,680
configurations you have so it's more of a Cyril config or close to Cyril config tool chain now

403
00:41:34,680 --> 00:41:40,040
whereas before you had to have all these different NX specific things like the executors

404
00:41:40,040 --> 00:41:46,520
but now it's inferred based on the configuration files and dependencies that are already in your

405
00:41:46,520 --> 00:41:53,480
project and then adding on top of that is not only about java script anymore there's now official

406
00:41:53,480 --> 00:42:02,840
support for .net and java, maven and gradle and things like that in NX itself and then on top of that

407
00:42:02,840 --> 00:42:09,960
there's open source projects for other supporting other programming languages like iphone and go

408
00:42:09,960 --> 00:42:21,160
things like that so it's at this point it's a what's it called a polyglot tool chain for task

409
00:42:21,160 --> 00:42:30,040
orchestration and integration of tools and then on top of that comes the one of the premium features

410
00:42:30,040 --> 00:42:37,960
which is caching so all the commands that you run locally on your CI server like build test

411
00:42:37,960 --> 00:42:45,880
lent format all of that is can be cached both the files they would produce and the terminal

412
00:42:45,880 --> 00:42:53,080
output they would produce so if you run tests unit test or n20 test for your big project in your

413
00:42:53,080 --> 00:43:03,560
code base and it takes several minutes as an example for n20 tests then if the files the test files

414
00:43:03,560 --> 00:43:09,320
and the source code files it touches doesn't change and you run the same command again you get the

415
00:43:09,320 --> 00:43:15,560
immediate cached output of that oh the test is still passing no wonder there was not any code change

416
00:43:15,720 --> 00:43:19,640
but at the same time maybe there was some code change but it was in a separate project

417
00:43:19,640 --> 00:43:23,800
that wasn't there was no dependencies between the projects in your code is even down there when

418
00:43:23,800 --> 00:43:30,280
sync code base nx was intelligent in that they could see there's no imports between the projects

419
00:43:30,280 --> 00:43:36,840
for example there's no dependencies between the projects so we know that this this task is

420
00:43:36,840 --> 00:43:43,080
will get the give the same outcome short of flakiness and test for example but

421
00:43:43,640 --> 00:43:49,400
but in ideal circumstance it should give the same output especially for unit test instead of n20

422
00:43:49,400 --> 00:43:57,160
test and for linked tasks add to on top of that distributed caching or remote caching so now you

423
00:43:57,160 --> 00:44:05,640
can share these cache task task between your team and the CI server or maybe just one way maybe

424
00:44:05,640 --> 00:44:10,920
only the CI server can write these cache entries and then you get to reuse them on your local machine

425
00:44:11,480 --> 00:44:19,080
so if and usually all the the projects have been tested for the latest commit on a branch or in

426
00:44:19,080 --> 00:44:24,680
the PR on the CI server because someone pushed it so that when you go and open the project on that

427
00:44:24,680 --> 00:44:31,080
branch you can get the cached output in milliseconds instead of minutes or hours for running,

428
00:44:31,080 --> 00:44:38,280
testing and linting and building and compilation on top of millions or hundreds of thousands of

429
00:44:38,280 --> 00:44:45,800
lines of codes and hundreds of projects so yeah that's that's some of the basic features of nx

430
00:44:45,800 --> 00:44:54,120
and then comes a a i things on top of that so that that was the crash course in nx and the most basic

431
00:44:54,120 --> 00:45:08,200
features for me for understanding how did nx fit into the the the get up I say get up

432
00:45:08,200 --> 00:45:23,080
world from your experience is it um well um in the get up well will which which part of get up I

433
00:45:23,080 --> 00:45:31,720
I think about something specific or open source or yeah open source um this is there is I don't know

434
00:45:32,440 --> 00:45:39,640
I understand it's it's and exist it's the basic it's completely free uh normal

435
00:45:39,640 --> 00:45:47,160
open source yeah open source normally open source companies tell you I don't know uh business

436
00:45:47,160 --> 00:45:55,880
extensions or they sell you consultants or they sell you yeah I don't know so obviously it's

437
00:45:55,880 --> 00:46:03,880
stuff they sell you some add it on slide like the caching uh yeah um what what did you think

438
00:46:03,880 --> 00:46:11,160
um and I think get up it's hyper-microsoft I don't know I think so uh

439
00:46:14,200 --> 00:46:28,280
uh let me uh think about my question uh um uh so well all all the features I just mentioned are

440
00:46:28,280 --> 00:46:36,440
free and open source in nx and then comes on top of that nx cloud and and all the features that are

441
00:46:36,440 --> 00:46:43,640
in nx cloud we I I talked about the caching there used to be free solutions for self hosting the

442
00:46:43,640 --> 00:46:51,480
cache remotely for example in in an amazon s3 bucket or asher blob storage or google cloud storage

443
00:46:51,480 --> 00:46:58,440
that's no longer supported out of the box but it can build your own integration there's an open

444
00:46:58,440 --> 00:47:05,640
API spec if you want to host your own cache server so it's doable but it's not plug in play out of

445
00:47:05,640 --> 00:47:12,680
the box anymore so if you want to remote caching uh you you'll have to pay for nx cloud basically

446
00:47:12,680 --> 00:47:21,160
um and then uh yeah just to mention one thing you how does it fit with open source will open source

447
00:47:21,160 --> 00:47:26,760
projects can get nx cloud for free so they get all the paid features for free if you're an open source

448
00:47:26,760 --> 00:47:34,360
project fill out a form they approve you say here you go here's your license key uh there's a pretty

449
00:47:34,360 --> 00:47:41,480
well-known uh family of projects in the javascript ecosystem called tan stack

450
00:47:41,800 --> 00:47:49,240
and that's uh at this point a huge code page based with many packages going into npm

451
00:47:49,240 --> 00:47:56,120
many developers many different contributors that that uh maintain each of the packages

452
00:47:56,120 --> 00:48:04,520
and they have because of that they have a lot of ci running in github um and then they use the

453
00:48:04,520 --> 00:48:09,080
nx cloud so they get all this caching for free which means they're developers they're open source

454
00:48:09,720 --> 00:48:16,040
developers uh have to spend less time waiting for ci because it's cached in the nx cloud

455
00:48:16,040 --> 00:48:21,960
and then of on top of that there are some features like you can go in and trace

456
00:48:21,960 --> 00:48:29,160
how how much did each step of the ci work flow take and how can you optimize and get some

457
00:48:29,160 --> 00:48:36,520
ai assistance into optimizing your ci pipelines and even if there isn't an error something that fails in

458
00:48:36,520 --> 00:48:45,320
ci you can use what they call ai autofix so the ai will make a suggestion on how to fix the failing

459
00:48:45,320 --> 00:48:53,240
ci task and open a pull request to fix that part of nx cloud also as an example when you have the paid

460
00:48:53,240 --> 00:48:58,680
nx cloud subscription or your open source project that get the free open source license

461
00:48:59,960 --> 00:49:15,400
so it's more um competition to to to github co pilot uh not github co pilot uh but github actions

462
00:49:15,400 --> 00:49:22,520
github as a ci runner uh it is a competitor because they have what they call nx agents and this was

463
00:49:22,520 --> 00:49:28,600
before ai coding agents became a popular thing so maybe the name is not so good now but it's not like

464
00:49:28,600 --> 00:49:35,320
agents hasn't been used a thousand times before for different things in software uh but basically nx

465
00:49:35,320 --> 00:49:42,280
agents is they have ci runners and uh to but to use them you still have to have your github actions

466
00:49:42,280 --> 00:49:47,800
work flow yet you have to start one runner in github and then everything else is delegated to their

467
00:49:47,800 --> 00:49:54,920
ci cloud uh in nx so you just have one job that you start and then it'll delegate tasks and say okay

468
00:49:54,920 --> 00:50:01,000
I need to build these projects I need to link these projects and then it'll connect to the nx cloud

469
00:50:01,000 --> 00:50:06,600
and they will run all those tasks in their ci system which is optimized for speed and caching

470
00:50:06,600 --> 00:50:13,400
and all of that and you will get the result back into your github action stream which means you have

471
00:50:13,400 --> 00:50:20,280
one job and that'll be delegated all the different tasks to to the cloud and setting up that pipeline is

472
00:50:20,280 --> 00:50:28,120
pretty easy you basically tell it I run I want to run run build a lint test and then it figures out

473
00:50:28,120 --> 00:50:36,840
how to delegate that to the cloud so so configuring a workflow in github to use nx cloud nx agents

474
00:50:36,840 --> 00:50:41,400
is pretty easy and there's even a generator for scaffolding that workflow

475
00:50:41,400 --> 00:50:46,680
even works for different providers like github and circle ci and few others

476
00:50:47,640 --> 00:51:01,400
okay uh bar this was so much information my brain takes uh the leads the leads in break um okay um

477
00:51:01,400 --> 00:51:11,800
I think well it's yeah yeah you you asked is it a competitor to co-pilot uh well the the closest

478
00:51:11,800 --> 00:51:19,080
thing there is yes the AI autofix that's also something you can get from claw or from co-pilot or

479
00:51:19,080 --> 00:51:24,760
you can set it up pretty easily or you can get it from i don't know co-crab it maybe so yeah there

480
00:51:24,760 --> 00:51:32,040
are there are lots of competitors in this scene of something broken ci uh AI give me a pull request

481
00:51:32,040 --> 00:51:38,680
to fix or make a commit to fix it right so in that sense yes they are competing co-pilot uh for

482
00:51:38,680 --> 00:51:45,800
that that thing but they're not in a local AI coding agent but the polygraph product I told you about

483
00:51:45,800 --> 00:51:53,560
is a meta harness for any AI coding agent so whether using github co-pilot or cloud code or

484
00:51:53,560 --> 00:52:03,400
codex or jemeni or whatever uh then this polygraph can sit on top of that and help your AI coding agent

485
00:52:03,400 --> 00:52:12,840
set up these different repos uh lock your sessions um and uh give them some agent skills to how to manage

486
00:52:12,840 --> 00:52:19,720
these different repos and how to open pull request for for multiple repos and so on and uh of course

487
00:52:19,720 --> 00:52:26,440
how to navigate between the code in multiple repos within one session usually you have to open up

488
00:52:26,440 --> 00:52:32,040
the coding agent in one repo and you cannot reach the code outside of that repo that becomes the sandbox

489
00:52:32,040 --> 00:52:38,200
that becomes what your agent is allowed to see and change but with polygraph now you can work in

490
00:52:38,200 --> 00:52:46,760
multiple repos with one AI coding agent session yeah awesome awesome i think i think a little bit

491
00:52:46,760 --> 00:52:57,480
about it normally i love the theory but uh let's make it more practical uh that's an organization they

492
00:52:57,480 --> 00:53:05,480
have a large uh anics mono repo they have 500 employees or five-front developers

493
00:53:05,480 --> 00:53:15,160
typescript applications front and back and service hundreds of libraries github

494
00:53:15,160 --> 00:53:22,920
github actions playwright Ezra strict architecture rules years of legends code and github code for

495
00:53:22,920 --> 00:53:33,000
full pilot and the leadership says to you we want agent to handle 30% or 50% of routine development

496
00:53:33,000 --> 00:53:40,360
work and in the next i don't know next three months what what will you say

497
00:53:40,360 --> 00:53:49,320
uh well i will say uh it's a good it's good that you have all these tools because that's easy for an

498
00:53:49,320 --> 00:53:57,480
AI coding agent to use they already know anx the tool chain they know how to read the architectural

499
00:53:57,480 --> 00:54:05,880
boundaries they know how to use the anx tasks and the caching um because that's pre-trained knowledge

500
00:54:05,880 --> 00:54:10,920
to the models they know all the popular open source and paid tools otherwise they wouldn't be

501
00:54:10,920 --> 00:54:17,000
very good if they had to learn a new tool every time you open up a session so good thing you already

502
00:54:17,000 --> 00:54:24,520
have anx and modern tooling about your legacy code base that's less of a worry because uh of course

503
00:54:24,520 --> 00:54:31,480
your coding agent can't be pre-trained on that uh to do that you would have to fine tune a model

504
00:54:31,480 --> 00:54:35,800
for your specific code base which doesn't really make a lot of sense in most cases

505
00:54:35,800 --> 00:54:42,680
maybe except if you're google or Microsoft with these giant jantic uh monitor repose for windows

506
00:54:42,680 --> 00:54:50,280
and office and everything internal in google um but instead what we can do today of course is

507
00:54:50,280 --> 00:54:58,680
develop our own agent skills for our own code bases so uh something about how does your team

508
00:54:58,680 --> 00:55:04,040
do this and that there's always something that's specific to your team or your code base that can

509
00:55:04,040 --> 00:55:10,760
now be codified into agent skills and agents.md instructions no matter whether you use and

510
00:55:10,760 --> 00:55:17,720
copilot or clock code or something like that so and then the if you say you want them to take

511
00:55:17,720 --> 00:55:28,760
to you to perform or execute 70% of routine tasks that's definitely doable you say routine tasks

512
00:55:28,760 --> 00:55:32,200
i mean what is there something specific you have in mind?

513
00:55:35,080 --> 00:55:41,560
at the end of the day it's a matter of do you want to pay for that? Using AI coding agents on a schedule

514
00:55:41,560 --> 00:55:48,680
is not cheap if you have to pay per token and you run automated tasks every day so for example

515
00:55:48,680 --> 00:55:56,280
if you have an agent that goes and takes maintenance tickets and say you're using github someone

516
00:55:56,280 --> 00:56:02,360
opens a maintenance ticket you need to upgrade your .net framework or your angular framework to new

517
00:56:02,360 --> 00:56:08,760
version and then you want an agent to take that ticket and do it for you that that's possible but

518
00:56:08,760 --> 00:56:15,400
you have to pay for each token spent and that's that's not cheap but if you compare it to having

519
00:56:15,400 --> 00:56:21,560
a developer that does all these maintenance tasks every day or every week or every month then of

520
00:56:21,560 --> 00:56:27,240
course there's there's a financial puzzle that that might make sense and add on top of that that

521
00:56:27,240 --> 00:56:32,600
maintenance is not really for most developers the most satisfying part of the job and that's

522
00:56:32,600 --> 00:56:42,440
part of why it gets done too rarely but also because it's not something that gets prioritized in a

523
00:56:42,440 --> 00:56:48,040
product roadmap there's not an entry in the product roadmap that says update to .net 10

524
00:56:48,040 --> 00:56:53,800
know that that's something the team usually have to take care of using their own policy but then

525
00:56:54,520 --> 00:56:59,080
comes to protocol and says no but we have to build this feature okay I guess we'll post

526
00:56:59,080 --> 00:57:02,920
to post-pone that .net 10 migration for another year

527
00:57:02,920 --> 00:57:14,920
more oh oh this was so many so many information let jump at the end of the podcast in the rapid

528
00:57:14,920 --> 00:57:27,000
fire round so I give a short sentence and you give a short answer so GitHub actions are another

529
00:57:27,000 --> 00:57:31,800
CI system they are the best CI system

530
00:57:38,840 --> 00:57:48,300
GitHub Action question. Playwright or suppress? Playwright.

531
00:57:48,300 --> 00:57:54,540
...co-pilot chat or autoparbij?

532
00:57:54,540 --> 00:58:08,440
Coupilot chat? Do you mean co-pilot agents? - Yeah, yep... I mean, I actually have...

533
00:58:09,000 --> 00:58:15,000
I have a quote on the co-pilot extension product page where I say that I will never

534
00:58:15,000 --> 00:58:21,000
code without co-pilot again because it works so well. It works shockingly well or something like that.

535
00:58:21,000 --> 00:58:26,040
That's a few years old and as I said, I was a very early user of co-pilot because I was a

536
00:58:26,040 --> 00:58:35,000
GitHub star. I got early access. I gave early feedback and so on. Now, I rarely write any code by hand.

537
00:58:36,280 --> 00:58:41,560
I'm... I instruct... and I've been doing that for... in open source for more than a year,

538
00:58:41,560 --> 00:58:47,000
professionally since November, December. I have barely written a line of code by hand.

539
00:58:47,000 --> 00:58:53,480
So the agents do all the work. Whether it's co-pilot or co-pilot, they're so good that...

540
00:58:53,480 --> 00:59:00,840
that's possible. It's more about how do you review and ensure the quality of the code produced by

541
00:59:01,880 --> 00:59:08,600
the agent, right? So sorry, what was the question? I lost the thread here.

542
00:59:08,600 --> 00:59:15,880
It's a rapid fire rinds, so next turn, it's Karlsbach or Trubork.

543
00:59:15,880 --> 00:59:23,240
Human review or automatic verification?

544
00:59:30,280 --> 00:59:36,040
Okay. Okay. The most underrated type script feature.

545
00:59:36,040 --> 00:59:40,840
Underrated type script feature.

546
00:59:40,840 --> 00:59:50,520
I don't know. I'm more a fan of JavaScript itself and it has all the features you need.

547
00:59:50,520 --> 00:59:52,600
You don't need type script at the end of the day.

548
00:59:52,600 --> 00:59:57,240
Yeah, so yeah, then you lost your war.

549
00:59:57,240 --> 01:00:05,400
That was... was... oh god. I... I... next time I have to do more research before I do the podcast.

550
01:00:05,400 --> 01:00:13,960
Yeah, but for me, it stands out in the conversion with... it's... how the... yeah, how...

551
01:00:14,840 --> 01:00:25,320
architecture, yeah, it's changed from... from the development. It's... so... I don't can...

552
01:00:25,320 --> 01:00:29,480
I don't can bring it in my brain because it's so interesting.

553
01:00:29,480 --> 01:00:37,080
Yeah, normally I ask... who is the negus guest I should invite? It works the secret question,

554
01:00:37,080 --> 01:00:41,240
but as I have you asked another question,

555
01:00:42,920 --> 01:00:51,640
I'm not the divana-pagai, but I meet one for the podcast. So if you like, you can become a host.

556
01:00:51,640 --> 01:00:58,920
You're really welcome. And I think this was so amazing. It was... yeah, it was really amazing.

557
01:00:58,920 --> 01:01:03,880
And for the guests, all the information about last are in the show notes.

558
01:01:03,880 --> 01:01:10,600
And yeah, thank you. Thank you so much. This was... whoa, it was overwhelming for me.

559
01:01:10,920 --> 01:01:19,080
Well, hopefully your listeners got some inspiration as well. They're free to reach out to me.

560
01:01:19,080 --> 01:01:26,200
Find me on LinkedIn, contact me there, for example, or find my email addresses and my GitHub profile.

561
01:01:26,200 --> 01:01:32,840
And if I were to suggest a guest for you, you should talk to my friend, Santo Shiyada,

562
01:01:32,840 --> 01:01:38,440
who is also an open source maintainer, and now he works at CodeRabbit. So there's a lot of

563
01:01:38,440 --> 01:01:42,760
interesting stuff there as well in terms of DevOps and AI and the combination of those two things.

564
01:01:42,760 --> 01:01:49,880
Yeah, then thank you last for staying here with me this hour and yeah, it was amazing.

565
01:01:49,880 --> 01:01:59,240
I learned a lot and I have a lot research to do. Thank you so much for staying with me.

566
01:01:59,240 --> 01:02:03,720
You're welcome.