S08E17 47mSeason 8

Episode Summary
The episode centred around exploring GitHub Copilot – an AI-powered assistant for developers – and its role in modern software development. Joydip Kanjilal established his extensive experience in .NET (spanning almost thirty years, from its beta stages) and highlighted the evolution of the framework, its increasing performance, and now its open-source nature. He contextualised Copilot as a tool building upon this foundation, aiming to boost developer productivity and simplify workflows, rather than autonomously creating entire applications. The core message was that Copilot is an assistant, designed to alleviate the tedious aspects of coding and allow developers to focus on more complex problem-solving.
Joydip emphasised that GitHub Copilot isn’t an AI itself, but is powered by AI, specifically large language models. He articulated that the true skill lies in providing the right context and prompts, explaining that Copilot excels at generating code based on clear instructions. A key point was the importance of rigorous code review, comparing Copilot’s output to utilising code snippets from Stack Overflow – both require careful vetting. He stressed the need for organisations to implement balanced access controls and comprehensive training for developers to maximise Copilot’s benefits and ensure security and code quality aren’t compromised.
The conversation delved into the practical implications of integrating Copilot into development teams. Joydip explained how it can be used for tasks like generating tests or accelerating the creation of data access layers. The analogy of Copilot as a “junior developer” or “intern” was frequently drawn, highlighting that it requires guidance and isn’t a replacement for skilled engineers. He cautioned against simply copying and pasting generated code, urging developers to adapt it to meet specific requirements and adhere to best practices. This also tied into the idea that developers are hired to solve problems, not merely to type code.
A significant topic was security. Joydip explained that Microsoft ensures Copilot doesn’t share sensitive business information and that it can even assist in identifying vulnerabilities within code. He reiterated the need for governance – carefully controlling what Copilot has access to within an organisation – alongside training, and continuous monitoring of its effectiveness. Furthermore, the potential to integrate Copilot with other AI models (such as those offered by OpenAI) provides flexibility and the ability to tailor the tool to specific project needs.
Episode Transcription
Artificial intelligence is nothing new. It enables machines to simulate human cognitive functions such as reasoning, learning, problem solving and all using algorithms and vast data data sets to recognise patterns. And then it makes predictions and performs, you know, language processing, image recognition, and all those stuff.
Hey everyone, and welcome back to The Modern .NET Show; the premier .NET podcast, focusing entirely on the knowledge, tools, and frameworks that all .NET developers should have in their toolbox. I’m your host Jamie Taylor, bringing you conversations with the brightest minds in the .NET ecosystem.
Today, we’re joined by Joydip Kanjilal to talk about GitHub Copilot, agentic workflows for developers, and the benefits (and drawbacks) of having an AI agent help you write code.
Note that I didn’t say, “write all the code for you,” because an AI agent is simply helping you to be more productive.
You want to you know, convert, I mean uh migrate a legacy application to a modern-day enterprise application, there will be a lot of redundant code that you will otherwise have to write. So that all that code can be automatically generated by Copilot, provided you have provided the right context.
Along the way, we talked about the importance of the context that you give to an AI agent, security best practises (spoiler: you wouldn’t give a new junior the keys to teh castle on day one, do the same with your AI agents), and the most important things to remember when using AI agents.
So let’s sit back, open up a terminal, type in dotnet new podcast and we’ll dive into the core of Modern .NET.
Jamie
Joydip
Jamie
Joydip
I started working on .NET from when it was in beta. When the first version of Visual Studio came out, people were hardly aware of what .NET was, what Visual Studio was, or what the C# language was — at least in this part of the world, in India.
But over a period of time, because of several benefits that .NET, the Visual Studio editor, and C# offered — and C# has some proximity to other languages like Java, as far as syntax is concerned, so it does not deviate much — using the Visual Studio editor was quite easy compared to other editors at the time. The popularity of .NET grew very quickly.
In those days, if you think of performance, .NET was way behind because it had only just evolved. Over a period of time, as new versions of .NET and Visual Studio emerged through the IDE — the integrated development environment — where we all write programs and build applications — it has matured a great deal.
Many enterprises prefer .NET for distributed applications over other languages, because .NET is very fast. It has been made lightweight to such an extent that the performance of .NET, if not the best, is at least second best. If you consider open source languages, there are certain ones where performance is better than .NET, definitely. But .NET is very close.
Of course, it has also been made open source. There is community participation, so you know what you are writing, you know the framework you are using, you know end-to-end how the framework works. This has been transformative since Microsoft made .NET open source.
The long story short: .NET has grown tremendously. The framework, the C# programming language, the Visual Studio IDE — they have all matured over the years to an extent where we can say it is a world-class framework and environment, used by enterprises. If not the first choice, it is very close to that as far as the popularity of .NET is concerned.
Over a period of time, I feel it might become the most used framework ever, because with every release Microsoft has been improving the performance of the framework. So that is really great. Sorry — we have deviated somewhat from the topic.
Jamie
Joydip
Jamie
There is near constant evolution of .NET these days. I think it’s always worth reiterating that, because there are folks who listen to this whose career runs parallel to .NET — they don’t actually work in .NET, they’re just interested in what’s going on. It’s always worth reiterating: here’s where we are before we start.
Jamie
Joydip
Jamie
In the same way that C# makes it easier for us to have IL run on our machine, our AI agents help us get past… the typing is not the hard part. I’ve been on a bit of a crusade, I suppose, over the last two or three years, trying to tell developers around the world — software developers, software engineers, coders, whatever word you want to use — that the typing is not the difficult bit.
There are some amazing software engineers I know who have never typed a single character on their machine, because they may have a permanent physical disability — perhaps they only have one arm, or they may be blind, or they may have accessibility challenges around dyslexia, for instance. I’ll see if I can dig it out for the show notes, but there was an episode of Hanselminutes where Scott Hanselman interviewed someone who did a lot of JavaScript-based development using an old-school Nokia T9 phone.
Because the typing isn’t the hard part. The hard part is converting the idea — “I want to digitise the system such that it does this” — into how to actually digitise it. That’s the hard part. Typing is the easy bit for the majority of people.
Our AI agents are going to help us with that. You’re going to talk to us about GitHub Copilot and how it helps, right?
Joydip
If you think of the old days when we used to write programs in C, reusability was still there, but from a different perspective — we used to use header files to store our library code, which could be reused across programs. Over a period of time, when object-oriented programming came along, it directly supported reusability. Languages like C++, Java, and C# all emerged. I’m not going into the pitfalls of OOP anyway — I just want to highlight the quest for better productivity, developer productivity, developer experience, and increased ROI.
That quest has drawn businesses across the globe, and the technology world has also come up with different thoughts, different technologies, and different architectures.
Artificial intelligence is nothing new. It enables machines to simulate human cognitive functions such as reasoning, learning, and problem solving, using algorithms and vast data sets to recognise patterns, make predictions, and perform language processing, image recognition, and so on. AI has been in use for a very long time — it is not as though it emerged just a few years ago. But it did not evolve to the extent that it is being used today.
A specific type of artificial intelligence is generative AI, which creates new content — including text, images, video, and audio — by learning from various patterns and data sets. From this generative AI, as it evolved over time, Microsoft came up with a tool to assist developers based on generative AI — and that is Copilot.
The intent is that it is just an assistant — it will assist you in writing your code. It is not building the entire application for you; that is not the intent. Think of the name: “Copilot” implies that the tool is an assistant. It will assist developers in writing code faster, in solving problems more quickly, and it will provide results instantly.
Why has it become popular? In one of my very recent projects — just at the end of last year — there was a need for a very fast data access layer. I asked my team to develop one using Entity Framework, and another not using Entity Framework directly, but using SQL queries or Dapper. My objective was to find out the performance difference. If it was significant, I would consider choosing the Dapper approach; otherwise, I would go with Entity Framework.
My developers took advantage of Copilot to generate the code, because for this type of task — where you might need to write some tedious code — it can boost developer productivity by generating the code for you. You do have to provide the right input, because based on that it will generate your code. Coming back to the same point: it is an assistant. It will assist you in writing code. Whatever it generates, you will not simply copy and paste it — you may need to make changes.
It will save a great deal of your time. The best thing is that Microsoft has integrated Copilot directly into Visual Studio, so while writing code, you can also generate code.
This saves a great deal of our time, especially when building an application where the KLOC — kilolines of code — is quite high. There are areas where you will have to write a great deal of routine code. If developers have to write all of that themselves, it is not the most judicious use of their talent. Developers should be given the opportunity to innovate and come up with solutions that require thinking. When it comes to writing code that can be generated by a tool like this, there is no point in asking them to write it — productivity will suffer.
The projects will be slow to deliver, the releases will be slow, and eventually the ROI gets affected. Businesses know this — many are taking advantage of .NET and .NET-related tools and technologies, and Copilot is being used massively these days.
Jamie
The actual typing is not the difficult bit. A lot of businesses have seen that and said: “If we invest in an agentic system like GitHub Copilot and slowly integrate it into our development teams, then if the production of lines of code is the goal, we can hit that goal. If the creation of the solution is the goal, agentic systems can still help us, because that takes away the difficulty of producing the lines of code.”
Is that where you’re going?
Joydip
Jamie
Joydip
Jamie
Joydip
It has a wide range of capabilities to optimise workflows and enhance productivity, but the major intent of using Copilot in an organisation is boosting productivity, simplifying automation, and providing contextual intelligence.
The third point is what helps a great deal, because the contextual intelligence has helped me make a lot of decisions. It can say, “This is not the way to get the best performance — you can go with this way instead.”
Let me give you an example. Say in a project I am in a dilemma about whether to use a particular framework. Suppose there are two frameworks, A and B, and I ask Copilot — because the context is very important, I have to provide the right context — “What is the best solution, A or B?” That sort of contextual guidance it can provide. It will definitely help with making decisions quickly, and I keep coming back to this point.
Apart from that, it helps boost productivity by creating content. We are discussing Copilot in Visual Studio, but Copilot can actually be used across the entire Microsoft ecosystem, such as Microsoft 365. You can use it on the web, you can use it in Excel — you can use it everywhere. In Excel, it will help you analyse data trends, generate formulas, and create visualisations. It can help you draft reports. It can help you in Microsoft Teams to track tasks and schedules and keep projects on track. It can help you in Outlook as well. There are many ways that it is helping.
But coming back to Visual Studio, the most important benefit from using Copilot is boosting productivity — cutting the development time short. As a developer, if I am supposed to deliver a project within a hundred hours, I can do an analysis and say: “If I am able to use Copilot, I can deliver it in maybe sixty hours.” That is what it means to boost productivity.
I am never saying that whatever code it generates, we will just be copying and pasting — that is not the objective. It is just an assistant. It generates the code and, if you are not happy with what it has generated, you can make changes. You can provide it with another context and say, “This is what needs to be changed.”
Your productivity gets boosted because you don’t have to spend very much time on mundane tasks. Suppose you’re having to build a modern-day enterprise application — there will be a lot of routine code that you would otherwise have to write. All that code can be automatically generated by Copilot, provided you have given it the right context.
As far as decision making is concerned within Visual Studio, it can definitely provide you with insights on which path to follow, whether it is a framework or a specific algorithm. This is an area where Microsoft is continually upgrading. That is why we say it is an AI-powered tool and not itself an AI.
In the very next release of Visual Studio and .NET, we will see that Copilot has matured even further. It speeds up the time to market and increases efficiency, because it can automate manual tasks, generate code for you, and — if you provide the right context — provide insights on a particular technical problem that you have asked it to guide you on. That is where Copilot in Visual Studio has been used, and that is the intent.
Jamie
Joydip
That is why, with whichever team I have been working in recent times, I always tell them to be very specific. You have a very short window — you can’t type so many things at once. Within that small window, you have to be specific and provide the exact context of what you need. Then what it generates will be fruitful.
Jamie
Joydip
Jamie
Joydip
If it has produced code which is invalid or incomplete, or produced tests that are invalid or incomplete, you have to first go back and see what context you provided. Did you provide the right context? Because based on that, it will generate. But even if you provide the right context, it may still generate code that does not adhere to the best practices you want to follow. In that case, you have to make the changes.
But think of it this way: you will not have to spend a great deal of time on it, because you are not writing the code from scratch. It is generating the code — maybe it has not adhered to two out of ten points on your checklist. That’s fine, because you can make the changes.
Correctness, completeness, and adherence to best practices all have to be kept in mind by developers who are using this, because they can never expect Copilot to build an application for them. That was never Microsoft’s intent. From its name, “Copilot” — it is an assistant.
Sponsor Message
Today's episode of The Modern .NET Show is brought to you by RJJ Software: strategic technology consulting for ambitious SMEs.
You know me as the host of this podcast, but here's what you might not know: I'm also a former Microsoft MVP who's helped businesses from Formula 1 teams to funded startups transform technology from a cost center into a competitive advantage. At RJJ Software, we specialize in three things that matter to growing businesses:
- AI that actually delivers ROI: not hype, just practical implementations that pay for themselves
- Developer Experience optimization: we've helped teams achieve 99% faster deployments and 3x productivity gains
- Strategic technology decisions: from architecture reviews to fractional CTO services
The difference? We don't just advise. We ensure successful implementation through knowledge transfer to your team.
If you're an SME leader wondering why your technology investments aren't delivering, or you're facing critical decisions about AI, modernization, or team productivity, let's talk.
Visit rjj-software.co.uk/podcast to book a strategic consultation.
Now, let's back to today's episode...
Jamie
It’s very limited in its capabilities — but what it can do is fantastic. I’ve told folks that it’s like imagining you have a junior developer or an intern with zero long-term memory. Between sessions, unless you explicitly tell it to write your notes down and make a note of something, there is no way it will remember things. Whereas you and I, because we have long-term memory and memory aids like READMEs or notes that we take, are able to have that continuity between sessions. AI agents can’t do that.
Joydip
Jamie
Joydip
The best thing is that Copilot will not share your sensitive business information outside of your organisation, because Microsoft never uses your prompts, inputs, or documents to train the models. Whatever you do, it remains within your organisational periphery — it is not shared with anyone. So this is one aspect of security.
From an organisation’s perspective, an organisation can safely use it. From a code security perspective, it provides a lot of features. In GitHub Copilot, you can review code — raise a pull request and ask GitHub Copilot to check for code vulnerabilities wherever they exist in the code. It can just point them out. It is your peer programmer — it is not intended to build the application entirely for you, but it is just an assistant.
When you want to detect and fix vulnerabilities in your code, Copilot can help you a great deal. You can just raise a pull request and ask it to do that, then make whatever minor changes you need. Again, it saves a great deal of time, and time is money. That is the biggest objective of Copilot — when it is assisting you, it is assisting you to save your time.
Jamie
I’m really glad you brought that up, because I’ve had great success with GitHub Copilot specifically for code reviews on my open source projects. I’ll raise a PR, all I’ve got to do is @Copilot in a comment in the PR, and then Copilot jumps in and performs a full review. It reads through the entire codebase, then reads through my PR, and gives me information like: “You’ve said this is a GUID, but actually it’s a string,” or “You’ve mixed this up,” or “You’ve said in the PR description that you’ve changed this, but you didn’t follow through — there’s a bit that you missed.”
That is exactly what you would expect from a human reviewing your code. They can do it alongside GitHub Copilot.
Joydip
Jamie
Joydip
Jamie
Joydip
You can get started for free, but then you can choose whichever plan suits your business. If you are an individual developer, you can choose your plan and leverage more features that Copilot Pro or Copilot Pro+ provides.
Jamie
Before you answer that — just quickly, for the folks who are listening who don’t know — you have an LLM, a large language model, which is the thing that does the actual thinking. “Thinking” is the wrong word, because it’s not really thinking, but you can think of it that way. Then there’s the tooling layer that comes in with GitHub Copilot, which is doing all of the spelunking into the code and performing actions on the code for you, from the LLM’s instructions.
So if I have a GitHub Copilot account, does that mean I get access to, say, Claude or the ChatGPT models? What do I get access to?
Joydip
Jamie
Joydip
Jamie
Joydip
Jamie
So is one of your top tips for folks interested in experimenting with GitHub Copilot to not give it full access to everything at the start? Is that something you would recommend?
Joydip
Jamie
Because it is the same — well, not exactly the same, but the same idea as, ten years ago, going to Stack Overflow and asking a question.
Joydip
Jamie
What’s to stop a user from posting malicious code? For those who are interested, I’ll track it down and put it in the notes — there was a Stack Overflow conversation about what if a user intentionally puts malicious code as an answer to a question on Stack Overflow, and Stack Overflow’s answer was: it’s not their problem. It’s yours. You should be vetting this code.
The same thing should apply to anyone accepting code contributions from anywhere, whether it’s an AI system helping you out whilst you’re writing the code, or someone who has submitted a PR to your repository. You need to be vetting that code, because when that PR goes through, or when you commit the code generated by the AI system, it’s going to have your name against it. It’s your responsibility. Standing up and saying “the AI wrote it” is not going to fly with anyone, ever.
Joydip
From an organisation’s perspective, an organisation should foster a balanced approach of strong data governance, targeted training, and iterative adoption strategies for Copilot. What this means is that, based on the importance of a project and the experience level of the developer, the organisation should have certain restrictions. It should not be providing access to all features of Copilot. Think of integrations, or perhaps if you want Copilot to access your operational data — some of that data may be encapsulated and may not be allowed for those developers to access.
Everything has to be backed up with proper training. When you are training your developers, you have to train them on making the best use of Copilot. In essence, that means making sure they are able to provide the correct context. If they don’t, it is a waste of time, because whatever it generates may not be what you intended. Every time you’re changing a prompt, you’re saying, “This is not right — do it this way.”
I have seen this happen — I told my developer: “Stop it, write the code yourself because you are wasting time,” because that poor fellow was unable to provide the proper context. Every time Copilot came up with a suggestion, the code listing was not what he intended, so it was wasting his time.
Training is a very important factor for success in an organisation. If an organisation really wants to make best use of Copilot: first, training should be on a regular basis; then, restricting access — governance and security; and then, periodically — let’s say quarterly — the organisation should be measuring the progress.
If I am the owner of an organisation, I will think: “My developers are using Copilot, but is it really worth it? Are they able to deliver on time? Is the code they are delivering using Copilot high quality — as far as performance, security, and scalability are concerned?” There are several things the organisation should be able to measure.
Let me repeat: the first and most important thing is training, followed by governance and security. Then the organisation should be able to measure success and productivity. Even when leaving an AI-powered tool in the hands of your developers, you should have a target. At the end of a certain cycle, you should be able to quantify whether it is really worth it and what is going wrong.
If something is going wrong — as in my case, I told my developer: “I can understand your pain point. I can see that what you are trying to generate is not generating, because your prompt is wrong. The context you are providing is not correct, so what it is returning is to some extent wayward, and it is wasting your time.”
He was also not that proficient in English, so whatever he was providing as input — the context — was not perfect, and it was wasting his time. That is why I feel training is very, very important.
Jamie
We’re rapidly running out of time, but I wonder if you’d be able to give the folks some resources for getting started? If it’s easier, you could just send them through and we’ll put them in the show notes. Where’s a good place to get started with GitHub Copilot? You mentioned earlier that you’re a prolific author — where can folks go to learn about what you’ve written?
Joydip
Jamie
Is there any way you want to send the listeners to learn more about you? Are you on socials? Do you want them to visit your website? What’s the way for folks to keep up with what you’re doing?
Joydip
Jamie
Joydip
Jamie
Joydip
Wrapping Up
Thank you for listening to this episode of The Modern .NET Show with me, Jamie Taylor. I’d like to thank this episode’s guest for graciously sharing their time, expertise, and knowledge.
Be sure to check out the show notes for a bunch of links to some of the stuff that we covered, and full transcription of the interview. The show notes, as always, can be found at the podcast's website, and there will be a link directly to them in your podcatcher.
And don’t forget to spread the word, leave a rating or review on your podcatcher of choice—head over to dotnetcore.show/review for ways to do that—reach out via our contact page, or join our discord server at dotnetcore.show/discord—all of which are linked in the show notes.
But above all, I hope you have a fantastic rest of your day, and I hope that I’ll see you again, next time for more .NET goodness.
I will see you again real soon. See you later folks.
Useful Links
- Joydip’s website
- Joydip’s blog
- Joydip’s GitHub
- Supporting the show:
- Getting in touch:
- Podcast editing services provided by Matthew Bliss
- Music created by Mono Memory Music, licensed to RJJ Software for use in The Modern .NET Show
- Editing and post-production services for this episode were provided by MB Podcast Services