From Code to Cloud in 15 Minutes: Jason Taylor's Expert Insights And The Clean Architecture Template

From Code to Cloud in 15 Minutes: Jason Taylor's Expert Insights And The Clean Architecture Template

Released Friday, 4th April 2025
Good episode? Give it some love!
From Code to Cloud in 15 Minutes: Jason Taylor's Expert Insights And The Clean Architecture Template

From Code to Cloud in 15 Minutes: Jason Taylor's Expert Insights And The Clean Architecture Template

From Code to Cloud in 15 Minutes: Jason Taylor's Expert Insights And The Clean Architecture Template

From Code to Cloud in 15 Minutes: Jason Taylor's Expert Insights And The Clean Architecture Template

Friday, 4th April 2025
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:03

So I've been I've been focused

0:05

on the code to cloud journey

0:08

I like to call it for

0:10

the template and Two years ago

0:13

my goal was to provide a

0:15

solution that could take you from

0:17

code to cloud in 45 minutes

0:20

or less So I wanted it

0:22

to be file new project to

0:25

deployed solution on Asia because that's

0:27

where my main focus is Within

0:29

45 minutes Welcome friends to the

0:32

Modern.net show, the Premier.net podcast focusing

0:34

entirely on the Knowledge

0:36

Tools and Frameworks that

0:38

all.net developers should have in

0:40

their toolbox. We are the

0:43

go-to podcast for.net developers worldwide

0:45

and I am your host

0:47

Jamie Goprogman Taylor. In

0:49

this episode Jason Taylor, no

0:51

relation, joined us to talk

0:53

about his journey from classic

0:55

ASP to.net and Azure. He

0:57

also discusses clean architecture's maintainability

0:59

and his open source clean

1:01

architecture solution template for ASP.netcore

1:03

along with strategies for learning

1:05

new frameworks and dealing with

1:07

complexity. Right now the template

1:09

supports post-crescual sequel line and

1:12

sequel server, if you want

1:14

to support my sequel, it's

1:16

relatively easy to do because

1:18

there's already a bicep module or a

1:20

terraform module that you can go in

1:22

and use it. So I went from

1:24

45 minutes so now I can get

1:27

things up and running and like, I

1:29

don't know, two minutes of effort and

1:31

15 minutes of waiting around while I

1:33

met my coffee. Along the way we

1:35

talk about some of the complexities involved

1:38

with creating a template which supports multiple

1:40

different front-end technologies and dot-net aspire, which

1:42

was news to me when we recorded.

1:44

All the while maintaining the goal of

1:46

being the simplest approach for enterprise development

1:49

with clean architecture. Anyway,

1:51

without further ado, let's

1:53

sit back, open up

1:55

a terminal, type in.net

1:57

new podcast, I

2:00

will dive into the call of

2:03

modern.net. So Jason, thanks for joining

2:05

us on the show. It's an

2:07

incredible pleasure to have you on

2:09

the show. I know we're on

2:11

literally the other side of the

2:13

planet from each other. So this

2:15

is, it's a marvel of modern

2:17

technology is what I'll say it

2:19

is. Thanks Chairman. It's great to

2:21

meet with you again, not in

2:23

person, but over this podcast. And

2:26

yes, thanks for having me on

2:28

board. I'm really appreciable to come

2:30

and talk to you today. And

2:32

no worries, man, no worries, it's

2:34

great to have you on. For

2:36

folks who were listening in, Jason

2:38

and I first got connected in

2:40

real life over at MVP Summit

2:42

last year? Last year? Last year,

2:44

the year before? Yeah. Yeah. Which

2:47

will be even further in the

2:49

past because this will be going

2:51

out in 2025, so it's the

2:53

year before the year before. I

2:55

don't know, I'm really confused. Time

2:57

is confused. We'll take some time,

2:59

we'll take some notes, we'll figure

3:01

it out and get back to

3:03

you. Absolutely, absolutely, because we're recording

3:05

this in the present which will

3:07

be the past by the time

3:10

people are listening, but they're listening

3:12

in the present which is in

3:14

the future for us. Oh my

3:16

gosh, as you start, I'm lost

3:18

now. Is that what I've been

3:20

doing this for seven years? Jason,

3:22

I wonder, would you mind giving

3:24

us a sort of brief introduction

3:26

to yourself? Maybe like an elevator

3:28

picture about some of the highlights

3:31

of you and the work that

3:33

you do that kind of thing?

3:35

Yeah, for sure. Okay. Well, my

3:37

name is Jason Taylor. I'm from

3:39

Brisbane, Australia. And I'm a solutions

3:41

architect and software engineer. And I've

3:43

been in the industry now for,

3:45

I think, 24 years. When I

3:47

first started, I was working with

3:49

Classic AsP and BB Script, which

3:52

was a lot of fun. Prior

3:54

to that, I think I did

3:56

a little bit of Visual Basic

3:58

Five. Prior to that it might

4:00

have been basic on the Com

4:02

of 64. I've been programming for

4:04

a long time. time now. My

4:06

focus nowadays is.net and Azure so

4:08

I help customers to design, develop,

4:10

test and deploy custom solutions to

4:12

the cloud, primarily web-based solutions. And

4:15

yeah, I guess I'm known for

4:17

my work around clean architecture, the

4:19

talks that I've done, the workshops

4:21

that I've run, the template that

4:23

I've built that I've built, the

4:25

template that I've built, the template

4:27

that I've built. and that's what

4:29

we're here to talk about today

4:31

is there anything else you want

4:33

to know about my background I

4:36

would like to hear more about

4:38

I mean that's that's a really

4:40

cool intro for me because like

4:42

you said that you started sort

4:44

of on basic yeah on the

4:46

Commodore 64 that's very similar to

4:48

my origin story not on the

4:50

Commodore 64 but with basic so

4:52

on one of those cheap home

4:54

computers yeah that was so great

4:56

Do you know, I remember, I

4:59

used Basic probably right up until

5:01

2007, so VB.net at that stage.

5:03

It wasn't until around 2007 that

5:05

I moved over to C Sharp,

5:07

which is a long time ago

5:09

now. Was that 17 years? It

5:11

is, it is. It is. Time

5:13

moves fast, man. So fast. Yes.

5:15

So you, solutions architect and developer.

5:18

So you solutions architect and developer.

5:20

So like. That's right. We'll come

5:22

back to the conversation about clean

5:24

architects because I feel like it's

5:26

related, but like I've never understood

5:28

the direction like how you get

5:30

to solutions architect. Is it just

5:33

being really good at development and

5:35

just being really good at like

5:37

architecting applications? This isn't a job

5:39

interview by the way. Oh, that's

5:41

alright, I'm glad. I'm not prepared,

5:43

it's too late at night. So

5:45

it's a, for those listening, it's

5:48

8 20 p.m. at night, and

5:50

the kids are on school all

5:52

day, so it's been a day,

5:54

so it's been a big day,

5:56

so it's been a big day

5:58

for me. So how do you

6:00

get to be a great solutions

6:03

architect and and and and still

6:05

be a great developer? Well, I

6:07

think that's are linked together, it's

6:09

hard to be a great solution

6:11

to suffocate if you're not also

6:13

a great developer. I think it's

6:15

easy to... to kind of fall

6:18

back onto kind of the ivory

6:20

tower mentality where you look at

6:22

solution designs in a textbook and

6:24

stick close to that. But unless

6:26

you've actually cut the code and

6:28

tried the design and seen it

6:30

in the real world, I don't

6:33

think you can make great decisions

6:35

as a solution architect. So that's

6:37

why I like to think about

6:39

myself as both the solutions architect

6:41

and a software engineer. Yeah, that

6:43

makes sense, right? I like to

6:46

become a, I can't think of

6:48

the best way to put it,

6:50

I want to say physical architecture,

6:52

right? If I want to design

6:54

a bridge or a building, I

6:56

need to know enough about engineering

6:58

to know that what I'm suggesting

7:01

is feasible, right? Yeah, for sure.

7:03

For sure. Interesting, okay. Well, I

7:05

mean, that leads us nicely on

7:07

to one of the things that

7:09

you're particularly well known for, which

7:11

is the Clean Architecture get hub

7:13

repo. So I guess before we

7:16

talk about the repo itself, so

7:18

what is the clean architecture? Or

7:20

is it clean architecture? Is it

7:22

a clean architecture? Like is the

7:24

the? required. I haven't thought about

7:26

the the too much in clean

7:28

architecture. I tend to just refer

7:31

it to it as clean architecture.

7:33

It's pretty simple really. I like

7:35

to think of clean architecture as

7:37

an approach or a pattern in

7:39

which the code that you're building

7:41

is separated or organized into layers.

7:43

So it's promoting separation of concerns.

7:46

In addition to that, we apply

7:48

the dependency inversion principle to ensure

7:50

that core business logic remains independent

7:52

of external dependencies. So databases and

7:54

new I framework. And it's that

7:56

independence, it's that kind of encapsulation

7:59

of the core business logic, independent

8:01

of everything external, that makes the

8:03

system more maintainable, testable and especially

8:05

adaptable to future changes. And it's

8:07

worth remembering that clean architecture is

8:09

really an approach for an enterprise

8:11

application development. It's not an approach

8:14

for... are small to your application.

8:16

It's on an approach for a

8:18

POC or something that's thrown away.

8:20

It's for enterprise applications, something that's

8:22

going to be around for more

8:24

than a few years, something that's

8:26

probably going to be around for

8:29

20 years. And so we need

8:31

that independence of databases and UI

8:33

frameworks, especially your I frameworks, because

8:35

those things just changed so much.

8:37

the core business logic doesn't tend

8:39

to, requirements will change, new things

8:41

will come along, but the core

8:44

business logic can remain fairly static

8:46

over the period of 20 years.

8:48

That's kind of in a nutshell

8:50

what clean architecture is. So being

8:52

able to sort of like you

8:54

said separate those concerns of how

8:56

we are storing the information, put

8:59

that over there somewhere behind a

9:01

number of interfaces perhaps. but perhaps

9:03

the UI stuff over there behind

9:05

some kind of contract or interface

9:07

over there and be able to

9:09

sort of focus, hyper focus I

9:11

guess on What is the business

9:14

need? Like not making a shiny

9:16

user interface. That is cool. That

9:18

is a business need. But you

9:20

can get away with a not

9:22

so shiny user interface, right? And

9:24

do we really need to use

9:27

whatever kind of database technology? Maybe

9:29

we do, maybe we don't. We

9:31

can leave that decision for later.

9:33

But what we need to do

9:35

is really focus, hyper focus on

9:37

the business logic, right? Exactly. I

9:39

work really well with metaphors and

9:42

analogies right so like I should

9:44

if clean architecture was applied to

9:46

say a car I should within

9:48

certain limits be able to lift

9:50

the engine from one car and

9:52

put it down in another car

9:54

exactly because the business logic is

9:57

moving the car to and from

9:59

different locations that's it whereas the

10:01

user interface the way that the

10:03

user interacts with it the steering

10:05

wheel could be on the right

10:07

it could be on the left

10:09

all of the different controls it

10:12

could be a manual transmission automatic

10:14

transmission it doesn't really matter because

10:16

the engine which has the business

10:18

logic of providing local motion to

10:20

the wheels somehow. We're going to

10:22

be given some kind of fuel,

10:24

some kind of user input. We're

10:27

going to be told which gear

10:29

we're in and we're just going

10:31

to do something with that fuel

10:33

to move some wheels to get

10:35

us to move in a direction,

10:37

right? Yeah, I like your analogy,

10:39

but I can't help but think

10:42

that the engine is something that

10:44

we could replace. And maybe what

10:46

we're left is just the frame

10:48

of the car. and the seats

10:50

can change, the engine can change,

10:52

the wheels can change, the fuel

10:55

tank can change, all of those

10:57

things can change, but maybe somewhere

10:59

in that framework, is the little

11:01

computer that's running our software even,

11:03

that's going, that's probably going too

11:05

deep now. The atoms and the

11:07

molecules, that's where it is. I

11:10

think of... too deep, too deep,

11:12

back it up. Okay. When I

11:14

think of that, I think about

11:16

the engine, I think about, well,

11:18

yeah, that's like one of the

11:20

things with clean architecture. It's independent

11:22

of the database, right? So maybe,

11:25

you know, the engine is sequel

11:27

server. We're going to switch it

11:29

out and we're going to throw

11:31

PostQQUEL in there. The user doesn't

11:33

care. They can still drive the

11:35

car. Maybe it costs a little

11:37

bit less. I guess it depends

11:40

a little bit more. We can

11:42

change that. It's not too difficult

11:44

independent of the database. We can

11:46

switch that. It's fairly easy to

11:48

do. But the thing there is

11:50

that we can also test everything

11:52

independent of those things. We can

11:55

test our core business logic without

11:57

a database, without a web server,

11:59

without a user, and we can

12:01

test it to a very deep level. You

12:03

know, a lot of the time when we're

12:05

unit testing or writing any kind

12:08

of test, we're kind of aiming

12:10

for 80% right? But when you're

12:12

talking about your business logic,

12:14

the code that you've written,

12:16

the code that's most important

12:19

to the organization that you're

12:21

working for, really you want

12:23

closer to 100%. Because there's no

12:25

database code in there, there's no UI,

12:27

there's no frameworks, it's just business logic.

12:30

And clean architecture kind of makes it

12:32

easy to do that, which is something

12:34

that I really love. Yeah, because like

12:36

you don't want some kind of corner

12:39

case in the business logic or your

12:41

application of the business logic that says

12:43

like on a Tuesday, don't store whatever,

12:45

don't do this process. Yeah. Because it's

12:48

some kind of bug, right? You want

12:50

to be able to be able to

12:52

test for all possible. parts of that

12:54

whereas like maybe maybe with

12:56

the UI it doesn't really

12:58

matter too much if the

13:00

UI tests state that you know

13:03

this particular button is unreachable at

13:05

this moment in time because we're

13:08

going to fix that but like

13:10

because we are taking the rules

13:13

of the business and digitizing them

13:15

yes so that then the business

13:17

can continue to run and do

13:20

whatever it does using our

13:22

software We need to make sure

13:24

that that is, I hate the term,

13:26

but bulletproof. I like it, I like

13:29

it. That's it, for sure.

13:31

And you know, even those

13:33

UI elements, like a button,

13:35

not being enabled or being

13:37

disabled, let's, you know, as

13:39

you say, on a Tuesday,

13:41

that can be tested inside

13:43

of core as well, inside

13:45

of that business logic, because

13:47

we can return from our

13:50

business logic a view model.

13:52

that represents the data and the

13:54

state of the UI. So all

13:56

we need to really do is

13:58

test that view more. model. And

14:00

C, is that button disabled on the

14:02

view model? Because the view model is

14:05

just going to bind, sorry, that view

14:07

is just going to bind to that

14:09

view model. So if it says, you

14:12

know, dispatch, disabled, as a bullying property

14:14

on the view model, the UI is

14:16

fairly simple. It's just going to bind

14:18

to that. So we make a bit

14:21

of an assumption. We'll say, well look,

14:23

if disabled is true on the view

14:25

model, then it should be right on

14:28

the view model, then it should be

14:30

right on the right on the view.

14:32

And that's where we can focus our

14:34

tests, but it doesn't mean we're not

14:37

going to write UI tests, we're not

14:39

going to write integration tests. It's just

14:41

really nice to know that for all

14:43

of that business logic that we've worked

14:46

so hard to build, we can test

14:48

it to a very thorough level. Right,

14:50

yeah, because at the end of the

14:53

day, I guess, we have a finite

14:55

number of engineers and a finite number

14:57

of time for them to write the

14:59

tests. Yes. And so you want to

15:02

maybe... focus their abilities and availability on

15:04

the tests that are, and this is

15:06

not meant to say that UI isn't

15:09

important, but like focus their time and

15:11

ability on the parts of the system

15:13

that are important, which we've already discussed

15:15

is the business logic, right? That's it?

15:18

If Amazon's internal system. allowed you to

15:20

buy a book without paying for it

15:22

on a particular day of the week

15:25

because of a set of conditions. That

15:27

would be a failure of their business

15:29

logic unless they wanted you to have

15:31

the book for free. Yeah. And so

15:34

you would need to test for that

15:36

rather than testing that the UI looks

15:38

nice and loads really quickly and has

15:40

all of the photographs and has the

15:43

videos and stuff. Exactly. You need to

15:45

make sure that Amazon can continue to

15:47

make money. For sure. Yeah, that's it.

15:50

Love it. Love it. The thing with

15:52

clean architecture that you're pretty famous for

15:54

is one of the many things is

15:56

that there is this open source repo

15:59

that you have which has clean architecture.

16:01

for an ASP.net core application. So I

16:03

wonder, can we talk about that a

16:06

little bit? I mean, we've got a

16:08

link for the Show Note, so if

16:10

folks are listening in going, oh my

16:12

goodness, this sounds amazing, before they've even

16:15

talked about it, and I don't want

16:17

to see it. Check the Show Notes,

16:19

folks. Wonderful. Yeah, I'd love to talk

16:22

about it. So I first discovered clean

16:24

architecture probably about seven years ago. And

16:26

I was sitting for a little bit

16:28

of inspiration. And I'll try to provide

16:31

you with a link to the book.

16:33

I'll have to dig it up. But

16:35

anyway, I came across a section on

16:37

clean architecture and it was just a

16:39

small part of this book. It wasn't

16:42

the main focus, but something about it

16:44

kind of caught my attention. It

16:46

sounded like the solution I'd been

16:48

looking for without even knowing it.

16:50

And so, like most of us

16:52

do, when something clicks, I just

16:54

started researching it more deeply, looking

16:57

for... everything that I could find

16:59

about the topic and at the time

17:01

I also been working on a new

17:03

project it was Northwind traders and Northwind

17:05

traders of course there's nothing new but

17:07

I wanted to build it for ASP

17:09

net core and EF core because.net core

17:12

was new and I wanted something to

17:14

play around with so I built this

17:16

solution for the sole purpose of of

17:18

playing around and trying new things with

17:20

dot net. So I just learned about

17:23

clean architecture so naturally I decided to

17:25

update Northwind traders to follow this clean

17:27

architecture process. That man, the process couldn't

17:29

have been easier. The architecture just, it

17:32

just made so much sense. That was,

17:34

yeah, as I said, that was seven

17:36

years ago, and I've been using

17:38

clean architecture ever since. But probably

17:40

two years after that, I had a bit

17:43

of a problem. I was using it all

17:45

the time. I worked at a consultancy,

17:47

so in the consultancy, I got

17:49

to go file a new project

17:51

a lot, which is exciting, right?

17:53

Greenfield's projects. But the thing was

17:55

that... even though clean architecture

17:59

was really nice for structuring solutions,

18:01

creating a new project or a whole

18:03

set of new projects, all of the

18:05

boilerplate code that I needed was just

18:07

really time consuming. It was painful. So

18:09

that was when I decided to create

18:12

the Clean Architecture Solution template. So that

18:14

was in October of 2019, so about

18:16

five years ago now. Simply put, the

18:18

Clean Architecture Solution template provides the simplest

18:20

approach to enterprise application development with ASPNet

18:22

Core and Clean Architecture. I'd say.net project

18:24

template, so it's deployed to New Get,

18:26

and you can create a new solution

18:28

from the command line using.net new or

18:30

Visual Studio 2022. Well should I pause

18:33

there? I should give you a second.

18:35

I've been talking a long time. No,

18:37

no, that's fine. That's fine. One of

18:39

the many things I like about the.net

18:41

new template thing engine dot new three

18:43

is the once you've installed the templates

18:45

Visual Studio, Rider, Visual Studio with Code

18:47

with the C-sharp Devkit extension. They can

18:49

all see those templates. I love that.

18:51

And like you said, you can do

18:54

it from the command line, right? It

18:56

doesn't matter what tool you use. You

18:58

can just go file new and there's

19:00

your project templates. That's so cool. Do

19:02

you know I didn't realize that it

19:04

was supported in Rider as well? Because

19:06

I don't use Rider. I know it's

19:08

a great product. We'll use it at

19:10

some point. We'll use it at some

19:12

point. We'll use it at some point.

19:15

We'll use it at some point. We'll

19:17

use it at some point. We'll use

19:19

it at some point. We'll use it.

19:21

We'll use it. We'll use it at

19:23

some point. We'll use it. We'll use

19:25

it. We'll use it at some point.

19:27

We'll use it. We'll use it. We'll

19:29

use it. We'll use it. We'll use

19:31

it. We'll use it. We'll use it.

19:33

We'll All three, well, okay, so let

19:36

me just backtrack a second. Visual Studio

19:38

Code by itself won't see it, unless

19:40

you do.net new in the command line.

19:42

But if you use the C-sharp Devkit

19:44

extension, which requires a visual studio license,

19:46

and there's a whole thing about that,

19:48

there's a whole, yes. I've talked to

19:50

Leslie on the team about that for

19:52

the show. there's an episode about that,

19:54

about how you get access to that.

19:57

But like, if it is relevant. to

19:59

the way that you work, you can

20:01

use the sort of free license, the

20:03

community license to get access to that.

20:05

Some people like that, some people don't.

20:07

But if you have that, you can

20:09

then do the equivalent of file a

20:11

new project and it will display all

20:13

of your templates. You can do, like

20:15

you said, inside of Visual Studio, file

20:18

a new project and it will display

20:20

all these templates. With the little, and

20:22

the best bit is the little icons.

20:24

Yeah. I love that when you've got

20:26

a icon for your project. For your

20:28

project, it just shows up. It's so

20:30

cool. And yeah, the same thing with

20:32

Rider because they're all my understanding is

20:34

that behind the scenes it does the.net

20:36

new CLI command and just reads the

20:39

metadata from the Jason templates and stuff.

20:41

Wonderful. Which is really cool. Well, I

20:43

didn't realize that the C sharp extension

20:45

supported it as well. So I'm learning

20:47

all sorts of things tonight. So that's

20:49

great. I do have a nice icon

20:51

so you'll see that come up if

20:53

you check it out in Visual Studio

20:55

or Rider or maybe DS code. Well

20:57

maybe that's it maybe everyone needs to

21:00

install the template and tweet at me

21:02

or X at me or however you

21:04

say it now whatever the verb is

21:06

a screenshot of you doing file new

21:08

projects so we can see what it

21:10

looks like in all the different all

21:12

the different ideas so go ahead and

21:14

do that folks that would be cool

21:16

I would love to see it There's

21:18

also obviously.net scaffold as well so I'd

21:21

be interested if you've this is me

21:23

dropping this on you right now so

21:25

I don't know if you've ever actually

21:27

tried this I haven't it's on my

21:29

it's on my list I got the

21:31

I got the email in my box

21:33

the other day and I like that

21:35

sounds interesting I'm in the middle of

21:37

preparing for a talk so I had

21:39

to just add it to my list

21:42

so I haven't I haven't read the

21:44

post yet have you read it I

21:46

have, it looks really cool, like an

21:48

interactive version of the.net new command line,

21:50

which is really cool. That sounds really

21:52

nice. I'm going to jump on that

21:54

pretty quickly, I think. Well, you heard

21:56

it here, folks. Not necessarily first, but

21:58

you heard it here. All right. So

22:00

yeah, it's a.net project ten. So then

22:03

you said when we were discussing what

22:05

clean architecture was, you were saying that

22:07

because you can sort of... separate out

22:09

those concerns to do with database technologies,

22:11

UI and all the other different technologies

22:13

that you may be using for your

22:15

application. Does that mean, and I am,

22:17

I've seen the template folks, so I

22:19

know the answer to this one, but

22:21

I'm getting the answer for you all,

22:24

does that mean that your clean architecture

22:26

template has no UI or that it

22:28

just uses, you know, rendered HDML or

22:30

like, how does that work then? It has

22:32

a UI, so the idea behind

22:34

the template is to try and

22:37

provide something that can help people

22:39

get up and running quickly. And

22:41

so I provide three different options

22:44

at the moment. I provide

22:46

an angular front end with a

22:48

web API back end, a react

22:50

front end with a web API

22:52

back end, or just web-made PI

22:55

by itself. In the future, I'd

22:57

like to add a view, and I'd also

22:59

like to add... laser web assembly.

23:01

So there'll be five different options,

23:04

aside from web API by itself,

23:06

that you'll see in the template.

23:09

And with each of those

23:11

options, there's a really nice open

23:13

API integration, which is really one

23:15

of the primary reasons that I

23:18

like to include a front end

23:20

because for me, having

23:22

open API integration. kind of

23:24

between say angular and the

23:27

web API means that I'm

23:29

not just generating an open

23:31

API spec I'm also generating

23:33

a typescript client for your

23:35

angular or react front end that

23:37

has all of the DTOs that are

23:39

defined on the back end and it also

23:42

has some really nice clients for

23:44

interacting with the web API so

23:46

you don't have to write all

23:48

of this code by hand. It's

23:50

generated for you. And when your

23:52

web API, when you change that

23:54

on the back end, when you

23:56

introduce a new endpoint, it auto

23:59

generates for you. And that just comes

24:01

with so many benefits, so it's a

24:03

really nice feature. But yes, to answer

24:05

your question, I do have a UI,

24:07

angular, react, views coming, Blaisal Web Assembly

24:09

is coming, all with an ASPNet core

24:11

web API in the back end, using

24:13

minimal API. The following is a paid

24:15

advertisement. Welcome back,.net enthusiasts. This is another

24:17

episode of the modern.net show, and today

24:19

we have a unique collaboration with industry

24:21

expert Jamie Taylor. Known for his insights

24:23

on our show over the past seven

24:25

years, he now brings those expertise to

24:27

your doorstep as an external contractor at

24:29

RJJ software in both B2B and C2C

24:31

engagements. Jamie has been instrumental in helping

24:33

businesses across the UK harness their digital

24:35

potential through custom software development tailored to

24:37

their specific needs. For our US-based clients,

24:39

he's facilitated transformational change by integrating cutting-edge

24:41

AI technologies into their systems, all while

24:43

maintaining his stellar reputation as a thought

24:45

leader in the field of Donnet and

24:47

software consultancy. Whether your company is looking

24:49

to elevate its UK operations or reshape

24:51

its US strategy, Jamie can provide tailored

24:53

solutions that exceed expectations. Reach out through

24:55

RJJ software today. and let's unlock your

24:57

business's digital potential. The audio for this

24:59

advertisement was created with AI. For a

25:01

potentially silly question, does that mean then

25:03

that I need to have node installed

25:05

and set up on my computer because

25:07

I know that angular and react and

25:09

view all make use of node, right?

25:11

Yeah, at this stage you do, at

25:13

this stage you do, but I'll look

25:15

at that a little bit in the

25:17

future. Obviously, one solution is deaf containers.

25:20

I've got a basic implementation. poor you

25:22

there, but I've also got to dive

25:24

in a little bit deeper and have

25:26

a look at what.net aspire is doing

25:28

with that regard because I think a

25:30

lot of a lot of that integration

25:32

could be sorted out just with.

25:34

with .NET Aspire. But

25:36

yes, at this

25:38

stage, if you're using

25:40

Angular React, you'll

25:42

need Node installed. But

25:44

if you're going

25:46

with a Web API

25:48

only solution, then

25:50

no, you won't need

25:52

it. You just

25:54

dropped that on me

25:56

there. I didn't

25:58

even realize that .NET

26:00

Aspire was on

26:02

the potential agenda. That

26:04

is really cool.

26:06

Sorry. It's a recent

26:08

introduction actually. I

26:10

added it to the

26:12

template last week.

26:14

Yes. So last week,

26:16

I had support

26:18

for .NET Aspire. It's

26:20

just an option.

26:22

If you're using the

26:24

IDE, you check

26:26

a box. If you're

26:28

on the command

26:30

line, you just go

26:32

dash, dash, use-Aspire.

26:34

And it'll be included

26:36

in your project.

26:38

And it currently supports

26:40

two integrations. You

26:42

can use Postgres or

26:44

SQL Server. And

26:46

it will spin up

26:48

those containers for

26:50

you. And have it

26:53

all ready to

26:55

go. So that's

26:57

another dependency, of course. You need

26:59

Docker if you're going to use

27:01

certain configurations of Aspire and Postgres

27:03

and SQL Server. It depends. I

27:05

like how, like, coolly you dropped

27:07

that there. It's like, yeah, it

27:09

sort of supports .NET Aspire, which,

27:11

you know, it requires a fair

27:13

amount of setup to do that.

27:15

So I've done it. It's fine.

27:17

It's not a problem. Man. You've

27:21

got to think it does

27:23

require a fair amount of setup,

27:25

maybe not for a simple

27:27

project. For a simple project, it's

27:29

okay. But for a complex

27:31

project, yeah, jumping through hoops. For

27:33

a template that produces more

27:35

than 12 different combinations of projects,

27:37

it was significant effort. Yeah.

27:39

But that's the thing with my

27:41

template, right? It's the simplest

27:43

approach to enterprise application development with

27:45

ASP .NET Core and Clean Architecture.

27:47

Once you go .NET new,

27:49

once you go file a new

27:51

project, the template itself, it's

27:53

getting a little bit complex. It's

27:55

not hard to maintain because

27:58

I have some really good tests

28:00

sitting behind it. But yeah,

28:02

there is complexity in building the

28:04

template. in producing that simplest approach. That's now got me

28:06

thinking there should be some questions about how in the heck

28:08

you manage all of that. So maybe we'll come back to

28:10

that in a moment. Yeah, for sure. I just

28:12

want to say that I really like

28:14

the idea because like the open API

28:16

stuff and typescript like generating that contract

28:18

ahead of time and you said like

28:20

every time that I make a change

28:22

to maybe one of my DTOs of

28:25

your models when I hit build it

28:27

will. rebuild those for me as

28:29

well. So then my UI and or

28:31

my UI engineer perhaps has all of

28:33

that detail up to date every time

28:36

that I maybe commit. Maybe I'm just

28:38

doing a belt or no, but like

28:40

every time I do that, it's automatically

28:42

done for me. I really like that.

28:44

That's it. I just want to say

28:47

real quick, and this is available for

28:49

free folks. That's it. Yeah, it's for

28:51

great. That's it. It's a work of

28:53

love and I'm always excited when I

28:55

can use it in my own projects,

28:58

but I'm very excited when people

29:00

all around the world are using

29:02

it for their projects and telling

29:04

me how they found value because

29:06

then I think I'm making a

29:08

difference more than in just my

29:10

small little space. So then how

29:12

do you manage all of that complexity?

29:14

So like are there specific challenges involved

29:16

with supporting? angular and react and perhaps

29:18

blazer in the future and perhaps viewing

29:21

the future and all that kind of

29:23

stuff because I can imagine like they

29:25

all have their own release cadences or

29:27

cadence I don't know you say it

29:29

but like they all have their own

29:32

release cadences and so like when a

29:34

new version of angular comes out are

29:36

you just going hey you know I'm

29:38

gonna release an update and you can

29:40

get the latest version or are you

29:43

happy to sort of sit? with a

29:45

specific version for a while or is

29:47

it like it's up to the implementer

29:49

once you've done.net new yes that's on

29:51

you to keep everything up today well

29:53

that's the thing with the templates actually

29:56

we've got we've got we've got a

29:58

few questions to address there so with

30:00

the template I'm driven by the.net

30:02

release cycle and so a lot

30:04

of my motivation comes around.net comp

30:06

time when we're going to release

30:08

say.net nine I'll start I'll start

30:10

working on the template prior to

30:12

that so you'll see a new

30:14

a new branch appear and maybe

30:16

it's um you know.net nine preview

30:19

six or something like that and

30:21

that's why I attempt to start

30:23

bringing the latest version of.net in

30:25

and I try to release that

30:27

new version as close to.net conference

30:29

possible so that people who are

30:31

excited who want to start working

30:33

with the latest version can do

30:35

so with the template. I don't

30:37

have that motivation. for my front

30:39

end frameworks for Engle and React.

30:41

So a lot of time, that'll

30:43

be driven by the community. So

30:46

it might be someone raising an

30:48

issue and saying, hey, Engle's getting

30:50

a bit old, do you think

30:52

we can upgrade to Engle 18?

30:54

Or they might even better, they

30:56

might be a pull request, or

30:58

that I can quickly review and

31:00

get that upgraded. So, so.net is

31:02

my driving force. and I take

31:04

care of that every year, but

31:06

for the front ends it's the

31:08

community who tends to drive that.

31:10

That makes a lot of sense,

31:12

right? Because you're just one person.

31:15

Yes. And you don't have infinite

31:17

amount of time. You mentioned earlier

31:19

on that you've got little ones.

31:21

We all have our own responsibilities

31:23

during the day, you can't actually

31:25

be out at the back and

31:27

call of quick update this thing

31:29

and update that thing, this new

31:31

package has come out, right? That's

31:33

right. Obviously the joke is that

31:35

in the node world there's a

31:37

new version of something every couple

31:39

of seconds, which is, there's an

31:42

element of truth there. That's one

31:44

of the reasons that makes clean

31:46

architecture so powerful. Having that independence

31:48

of the UI means that we're

31:50

able to kind of... operate in

31:52

a world where a web framework

31:54

is created every minute. Interesting. And

31:56

then I suppose a side question

31:58

before you get to the others,

32:00

let's say Jamie you comes out.

32:02

If I take the clean architecture

32:04

template that you've got, create a

32:06

new application with it, so I

32:09

create an instance of the clean

32:11

architecture using that template, and then

32:13

I want to implement Jamie UI,

32:15

it's just a case of making

32:17

a few relatively small changes, and

32:19

dada, there's my UI, right? Maybe.

32:21

It depends on the UI, and

32:23

this is something that I was

32:25

thinking about probably an hour ago,

32:27

because... I've built a clean architecture

32:29

template for Blazer in the past.

32:31

It's called Rapid Blazer. I have

32:33

been thinking about what to do

32:35

as Rapid Blazer. Should I upgrade

32:38

it to.net 9? It's getting a

32:40

bit out of date. Should I

32:42

bring a Blazer front end to

32:44

the main clean architecture template? And

32:46

what do we do about all

32:48

the different hosting models for Blazer?

32:50

We've got server site, we've got

32:52

web assembly, we've got what is

32:54

the other one? The unified, the

32:56

unified, not unified, not unified. I

32:58

forget now, there's some other model

33:00

of Blazer which I can't quite

33:02

recall at this stage. Now with

33:05

Blazer Web Assembly, it's relatively simple

33:07

for me to bring that into

33:09

the Clean Architecture template because it's

33:11

going to be a Blazer front-ent

33:13

communicating with an ASPNet core back-end,

33:15

right, which is exactly what angular

33:17

reactant view would do. But for

33:19

Blazer server... Well it doesn't actually

33:21

require an API because it's happening

33:23

on the server side. So if

33:25

Jamie UIs like Blaze a server,

33:27

that's a bit trickier. And it's

33:29

not a bit trickier because it's

33:32

difficult to do a clean architecture.

33:34

No you could easily bring Jamie

33:36

UI in. It's tricky because I

33:38

would have to introduce new data

33:40

structures into the template. to support

33:42

that different style of UI, which

33:44

would then move the template away

33:46

from being the simplest approach. He

33:48

would have some complexity built in

33:50

there because it needs to support

33:52

anger, it needs to support view,

33:54

it needs to support react, and

33:56

it needs to support laser server.

33:58

So for you, you can easily

34:01

create a new solution with Jamie

34:03

UI. For me in the template,

34:05

it can be a little bit

34:07

trickier. I've got a little bit

34:09

more to think about. Okay, okay.

34:11

There's always a solution, but it

34:13

might cost a lot of complexity.

34:15

Sure. Perhaps I should have been

34:17

a little clearer with my question.

34:19

Let's say that Jamie Y is

34:21

a node-based UI JavaScripty frontendy thing.

34:23

And it just it behaves similarly

34:25

to angular and react and most

34:28

of the others it has similar

34:30

sort of APIs and stuff like

34:32

that. Then adding that in. should

34:34

from my perspective as a dev

34:36

who is using the template I

34:38

should just be able to go

34:40

hey you know NPM ad package

34:42

that's it so when I said

34:44

small I meant sort of like

34:46

in comparison to the size of

34:48

the the template right yeah I

34:50

should have been able I should

34:52

be able to make some small

34:55

in comparison to the size of

34:57

the template changes to be able

34:59

to implement my new UI and

35:01

it just sort of works that's

35:03

it yeah for sure for sure

35:05

and it depends on also the

35:07

capabilities of the You might need

35:09

to think about how your UI

35:11

is going to spin up in

35:13

the local development environment, how it's

35:15

going to proxy requests back to

35:17

the API, because the hosting model

35:19

that we have in development of

35:21

course is completely different to what

35:24

we have in production. So we

35:26

have a few moving parts that

35:28

we set up just to make

35:30

sure that our development time experience

35:32

is nice. And you'll also want

35:34

to... update the open API integration,

35:36

just change the configuration slightly so

35:38

that you can generate a nice

35:40

client for Jamie UI using any

35:42

number of methods. And that makes

35:44

sense, right? It's because we've separated

35:46

that concern, let's put Blazer to

35:48

one side for a moment. Yes.

35:51

Because of the different hosting models

35:53

and the complexity. Because you've separated

35:55

that concern that makes that way

35:57

easier to do. It's not like,

35:59

oh no, we have to re-archate

36:01

the entire app because the UI

36:03

and the API are so tightly

36:05

connected because I've worked on, I'm

36:07

sure we've all worked on projects

36:09

somewhere. Yes. A decision has been

36:11

made that the UI and the

36:13

API are so... tightly interconnected that

36:15

if you take one away the

36:18

other doesn't work. Yeah for sure

36:20

sometimes there's a decision made to

36:22

do exactly that to have that

36:24

very specific back end for front

36:26

end but in this case I've

36:28

tried to be a little bit

36:30

more generic. Sure just real quick

36:32

from my perspective there's nothing wrong

36:34

with having a specific back end

36:36

for front end because you may

36:38

never change that front end right?

36:40

we talk a lot about in

36:42

the software engineering space about but

36:44

what if you want to change

36:47

the technology you've used but also

36:49

what if you never change the

36:51

technology that you've used right what

36:53

if you settle on angular right

36:55

for it I'm just literally picking

36:57

one out the air I have

36:59

no preference for angular react over

37:01

you but let's say you pick

37:03

angular and you settle on that

37:05

then you know having a specific

37:07

back end for that front end

37:09

is totally fine because you've taken

37:11

the dependency on we will never

37:14

change from angular and that is

37:16

cool that is that works right

37:18

exactly I often find that some

37:20

projects go 100% the other way

37:22

and they're like well we need

37:24

to build interfaces for the interfaces

37:26

and separate everything out even though

37:28

we're never going to change it

37:30

but what if in the future

37:32

in five years time we decide

37:34

to change it and I'm like

37:36

well that's cool but can you

37:38

see a need to change it

37:41

Don't put that complexity in there.

37:43

Yeah. And can you, can you

37:45

afford to build that system? And

37:47

can you afford to maintain that

37:49

system? And will the people who

37:51

come after you understand why you've

37:53

done what you've done and why

37:55

you made those decisions? Nothing's free.

37:57

All of these things that we

37:59

built into our solutions. Even with

38:01

clean architecture, independent of UI, database,

38:03

frameworks, that takes time and effort

38:05

to build that in. And so

38:07

yeah, if you don't need that

38:10

flexibility, then maybe clean architecture is

38:12

not the right choice. It's a

38:14

very interesting point. We've just said,

38:16

hey, maybe you shouldn't end up

38:18

with it. I think everyone should

38:20

check out your clean architecture repo

38:22

for sure. But then I think

38:24

the importance is in being pragmatic,

38:26

right? And actually saying actually, does

38:28

this... thing that I'm looking at

38:30

helped me to solve the problem.

38:32

Like you said, does it add

38:34

the relevant amount of complexity? You

38:37

know, because like you said, nothing

38:39

is free. That's it. Yeah. It's

38:41

the same thing with design patterns.

38:43

Design patterns are there to solve

38:45

a problem. If you don't have

38:47

that problem and you apply the

38:49

design pattern, all you've added is

38:51

unnecessary complexity. It's the same

38:53

thing with clean architecture. If you

38:55

don't need to be independent of

38:58

the database frameworks, UI, if you

39:00

have an application that's only going

39:02

to be around for a few

39:04

years and doesn't require that level

39:06

of flexibility, then you might have

39:08

added complexity to your solution unnecessarily.

39:10

But we build enterprise applications. And

39:12

so that's why this is the

39:14

typical approach for me. Those applications,

39:17

whether or not, they say it's

39:19

just a... a proof of concept,

39:21

it's just a temporary thing. They're

39:23

going into production and they're still

39:25

going to be there in 20

39:27

years' time and you'll have to

39:29

support them. Too many proof of

39:31

concepts that have gone into production

39:33

are no better now. Yeah, I

39:36

think we all have. I have

39:38

a story from my past where

39:40

I built an MVP that had

39:42

no functionality in whatsoever. It was

39:44

a Windows Forms. MVP just showing

39:46

off what I thought the UY

39:48

could look like. And I showed

39:50

it to the boss and three

39:52

days later he'd sold it to

39:54

someone and I'm like, it doesn't

39:57

do anything boss, it's just the

39:59

UY. Wonderful. Lesser learned. So we've

40:01

talked a little bit about the

40:03

front end stuff. I know that

40:05

there was lots of dangling questions

40:07

that I had. I don't know

40:09

if you want to cover some

40:11

of those or whether you're happy

40:13

to move. I know that there'll

40:16

be people listening go, wait, you

40:18

asked a bunch of questions there

40:20

Jamie and I'm hooked and I

40:22

can't remember what you asked. Oh

40:24

my gosh. We might have to

40:26

have a conversation after the podcast

40:28

then maybe we can... will be

40:30

active in the in the comment

40:32

section and provide a little bit

40:35

of feedback that way. Totally. If

40:37

you're enjoying this show would you

40:39

mind sharing it with a friend

40:41

or colleague? Check out Podcatcher for

40:43

a link to the show notes

40:45

which has an embedded player within

40:47

it and a transcription all that

40:49

stuff and share that link with

40:51

them. I'd really appreciate it if

40:53

you could indeed share the show

40:56

but if you'd like a few

40:58

other ways to support it you

41:00

could. Leave a rating or review

41:02

on your podcast or choice. So

41:04

if you head over to dot

41:06

netco or dot show slash review

41:08

You'll find loads of ways to

41:10

do that. You could consider buying

41:12

the show of coffee The buy

41:15

me a coffee link is available

41:17

on each show's show notes page

41:19

on the website This is a

41:21

one-off financial support option. You could

41:23

become a patron This is a

41:25

monthly subscription based financial support option

41:27

and the link to that is

41:29

included on each episode show notes

41:31

page as well I'd love it

41:33

if you could share the show

41:36

with a friend or colleague or

41:38

leave a rating or review. The

41:40

other options are completely up to

41:42

you and are not required at

41:44

all to continue enjoying the show.

41:46

Anyway, let's get back to it.

41:48

Yeah, yeah, we can do that.

41:50

So let's talk about CICD then

41:52

because that's a big thing for

41:55

pretty much enterprise full stop. So

41:57

here's a thing right there are

41:59

a few things that I even

42:01

when I'm working on a personal

42:03

project I will not work on

42:05

it without get or some kind

42:07

of source control and some kind

42:09

of CICD pipeline I'll maybe do

42:11

a.net new and get a template

42:14

or I'll do like the bare

42:16

bones of functionality if I'm splitting

42:18

into a UI and an API

42:20

right I'll spin up an API

42:22

that just returns hello and a

42:24

UI that reads the hell out

42:26

right and then I'm like right

42:28

cool commit that to source control

42:30

build a CIC pipeline because then

42:32

that's done yeah so CICD and

42:35

all that kind of stuff super

42:37

important so does your clean architecture

42:39

repo support that stuff? Is that

42:41

baked in? Or because it's on

42:43

GitHub, am I going right? I

42:45

need to create a get up

42:47

folder and create some workflows and

42:49

stuff. Like how does all that

42:51

work? It's baked in. Yeah, it's

42:54

actually been a really big focus

42:56

for me over the past couple

42:58

of years. So I've been focused

43:00

on the code to cloud journey

43:02

I like to call it for

43:04

the template. And two years ago,

43:06

my goal was to provide a

43:08

solution that could take you from

43:10

code to cloud in 45 minutes

43:13

or less. So I wanted it

43:15

to be a whole new project

43:17

to deployed solution on Asia, because

43:19

that's where my main focus is

43:21

within 45 minutes. And so I

43:23

actually upgraded the template and there's

43:25

a bunch of scripts in there,

43:27

there's pipelines as code, this infrastructure

43:29

as code with Bicep. And I

43:31

did it. It was like 20

43:34

minutes from new project production, you

43:36

know, even just waiting around for.

43:38

infrastructure to be provisioned and projects

43:40

to be deployed. But I had

43:42

a bit of a problem because

43:44

it wasn't the simplest approach. It

43:46

was going to be difficult for

43:48

me to maintain because I built

43:50

all this stuff from scratch. And

43:53

so anything that was wrong with

43:55

the script that you know potentially

43:57

removed resources that it shouldn't have,

43:59

that was a bit of a

44:01

problem for me. So it wasn't

44:03

the simplest solution. So at that

44:05

stage I started looking around and

44:07

Fortunately for me, a team at

44:09

Microsoft was already working on the

44:12

Azure developer, CLI, or AZD for

44:14

short. So I started working with

44:16

that and I really was blown

44:18

away by how well it aligned

44:20

for that vision that I had

44:22

for the simplifying the code to

44:24

cloud journey. So this is a

44:26

tool that integrates with us as

44:28

developers, our developer workflow. And so

44:30

right from project scaffolding through the

44:33

infrastructure set up, through the deployment,

44:35

all with a few commands. And

44:37

these commands you can run them

44:39

from the command line. or you

44:41

can run them through a VS

44:43

code extension, if you like. And

44:45

so the Clean Architecture Solution template

44:47

is ACD compatible now. And what

44:49

that means is, is that it

44:52

comes with a set of CICD

44:54

pipelines, both GitHub actions and Azure

44:56

pipelines. It comes with a set

44:58

of infrastructure as code. At the

45:00

moment, it's supporting just by set.

45:02

but I'd like to add terraform

45:04

soon. And it also comes with,

45:06

not just the bare bones minimal

45:08

infrastructure as code, it also comes

45:11

with a bunch of extra modules.

45:13

And these modules actually come from

45:15

the Microsoft team at AZD. They

45:17

built this whole. Bicep's starter kit

45:19

and this terraform starter kit. So

45:21

if you want to go in

45:23

there right now the template sports

45:25

postcrescual SQL item sequel server if

45:27

you want to support my sequel

45:29

it's relatively easy to do because

45:32

there's already a Bicep module or

45:34

a terraform module that you can

45:36

go in and use it. So

45:38

I went from 45 minutes to

45:40

now I can get things up

45:42

and running in like I don't

45:44

know two minutes of effort and

45:46

15 minutes of waiting around while

45:48

I make my coffee. Wow. It's

45:51

cool. Really good stuff. Yeah, that

45:53

is genuinely amazing. And you know

45:55

what you said? You said, you

45:57

know, I don't start coding until

45:59

I have a local get repository.

46:01

maybe have a something on GitHub,

46:03

CICD, pipeline, you want to get

46:05

it deployed to Asia. I could

46:07

do all of that in two

46:09

commands. So if I run dot

46:11

net new CA dash solution,

46:14

that'll create my clean architecture

46:16

solution, and then I run

46:19

AZD, pipeline, config, and that's

46:21

going to do everything else.

46:24

So it will go

46:26

and create a local Git

46:28

repository. It will note

46:30

that we don't have a remote configured,

46:33

it will ask us if we'd like

46:35

to put one on GitHub. It's got

46:37

the GitHub CLLI kind of installed as

46:39

a dependency of ACD, so it'll go,

46:42

yeah, sure, we'll create that for you.

46:44

What do you want to call it?

46:46

We'll call it Modern.Nan. So you'll create

46:48

that for you, what do you want

46:50

to call it? We'll call it. This

46:52

is Modern.com. This is just all for

46:55

the command line. And so it will

46:57

go off the repository on GitHub. and

46:59

then it'll go over to Asia, and

47:01

it'll create a service principle

47:03

with federated credentials so that

47:06

GitHub actions can now communicate

47:08

securely with Asia to provision

47:11

your infrastructure, and then

47:13

eventually to deploy your solution.

47:15

And it's also going to add

47:17

a bunch of GitHub actions,

47:19

variables so that the pipeline

47:22

can run and know about

47:24

the environment and the resource

47:26

group and all of those

47:28

sort of things. So yeah,

47:30

it's really like two commands

47:32

and two minutes and no

47:34

shortcuts. Yeah, proper CICD pipeline,

47:36

proper infrastructure, just ready to

47:38

go. Focus on business value, right?

47:40

Not the boring stuff. And I'll

47:42

repeat again. This is entirely

47:44

free. Being able to

47:46

issue two commands and

47:49

just let it do its thing

47:51

and have everything set up

47:53

in a number of minutes

47:55

is, wow, that is the

47:58

dream. That is the dream. Yeah,

48:00

like even so I use Obsidian

48:02

to make loads of notes about

48:04

stuff. I do not use Obsidian

48:06

without get because I know that

48:08

I can undo things and get

48:10

the information back or I can

48:12

have a log of what I've

48:14

worked on. So even in my

48:16

plain text life working on notes

48:18

for things, I use Git. I

48:20

love that for sure. So like

48:22

being able to just go, here's

48:24

two commands. Perhaps even with a

48:26

double ampersand if you're on a

48:28

Unix-like or a semicolon, if you

48:30

run a window, like run them

48:32

both in one step and just

48:34

watch them go. That is just

48:36

wow. That's it. And it is

48:39

the dream, right? That was my

48:41

dream. I wanted to be able

48:43

to start work on a new

48:45

client's side. And if we're able

48:47

to hit the ground running, then

48:49

I want to take the first

48:51

15 minutes to get something deployed.

48:53

before the first planning meeting so

48:55

that we've got something that we

48:57

can see I can go grab

48:59

a coffee and we can sit

49:01

down and think about what's the

49:03

first feature we can build we've

49:05

got the basics done you know

49:07

good teams take a couple of

49:09

weeks to do this we've done

49:11

it in two minutes what feature

49:13

can we build yeah because then

49:15

it's no longer theoretical it's like

49:17

because a lot of software development

49:19

is very wooly it's very theoretically

49:21

you can't see it and you

49:23

can't touch it until you have

49:25

a user interface and so if

49:27

you're spending a couple of weeks

49:29

setting everything up getting CICD pipelines

49:31

going, making sure that there is

49:33

some kind of UI, that's maybe,

49:35

if you do sprints, that's maybe

49:37

two sprints worth of work, that

49:39

you can't present to the customer,

49:41

the client, the whomever, and say,

49:43

hey, here is the thing that

49:45

you can interact with. Whereas, like

49:48

you said, if you can go

49:50

into that first meeting with them

49:52

and say, okay, cool, this is

49:54

not what it's going to look

49:56

like, but this is just a

49:58

starting place. But this whole thing

50:00

works. Yeah, that's it. It's ready

50:02

to go. So is that the

50:04

end goal of the template then?

50:06

You've used the echo. of phrases

50:08

like code to cloud in two

50:10

minutes is that the well two

50:12

minutes plus or minus 15 for

50:14

Asia to do its thing but

50:16

like code to cloud in two

50:18

minutes of user effort yeah is

50:20

that the end goal hmm it's

50:22

a good point well there's more

50:24

to the template than that so

50:26

once you've got that up and

50:28

running We have a bunch of

50:30

tests that are built in to

50:32

help you with how you go

50:34

to structure and test your logic.

50:36

And we also have a couple

50:38

of item templates that are built

50:40

in as well, just to help

50:42

you create your, or at least

50:44

structure your application logic. So I'll

50:46

be interested to see if people

50:48

are using the item templates and

50:50

how they might think they could

50:52

be changed or if things could

50:54

be added to them in the

50:57

future. So no. The goal is

50:59

to get up and run in

51:01

quickly and then yeah it's kind

51:03

of set you on your way

51:05

so that you can start delivering

51:07

business value the better it is

51:09

right because you've said it a

51:11

bunch of times the user of

51:13

the application the consumer the client

51:15

whoever's paying you to build it

51:17

they probably don't care about Are

51:19

we using react? We're using postgress.

51:21

We're using x-white. They don't care

51:23

about that. They care that when

51:25

a user pushes the button, they

51:27

somehow get money. That's all they

51:29

care about, right? Yeah, and they've

51:31

hired us as specialists. And as

51:33

specialists, we have specific technologies that

51:35

I'm good at that I can

51:37

use. And I can add. others

51:39

but they will be within my

51:41

specialization or they will be so

51:43

simple to add that it just

51:45

makes sense that yes of course

51:47

we should add that support for

51:49

the community because they'll get so

51:51

much value and it doesn't greatly

51:53

increase the complexity of the template.

51:55

I think people should think about

51:57

kind of this template and maybe

51:59

Maybe if it's not aligned with

52:01

their specialization, then they could consider

52:03

creating their own template. I think

52:06

everyone should have a goal to

52:08

go from new project to the

52:10

cloud or to a deployed system

52:12

within 45 minutes. You can do

52:14

it unless that's great, but within

52:16

your specialization, within the technologies that

52:18

you have great experience with, so

52:20

that you can focus on the

52:22

fun stuff as well, not the

52:24

boring stuff. So maybe that should

52:26

be. a long phone code cutter, right? I

52:29

know a lot of people like

52:31

to do practicing, like, as if

52:33

they are a martial artist, right?

52:35

The cutter is like a repeatable

52:37

exercise to build up muscle memory

52:39

and make you faster and make

52:41

you better at certain things. So

52:43

maybe one of the code catters

52:45

could be, I've got no project,

52:47

I do the equivalent of file

52:49

new, and then I get to...

52:51

deployment as fast as possible if

52:53

that's deployed to the cloud, if

52:55

that's a binary somehow. Maybe not

52:57

fast as possible, but like in a

52:59

speedy manner. Like you said, so that

53:01

then you can then abstract that stuff

53:04

away and get to the good fun

53:06

stuff. What a great exercise. That is

53:08

really cool. And you can tackle that

53:10

from whatever level you're at. I mean,

53:12

yeah, you might be a white belt.

53:15

You might be, let's say your X

53:17

Copy deploying. Well, that's fine. You can

53:19

improve on that. you can build up through

53:21

the levels and keep running that carter

53:23

until you are a black belt until

53:25

you do you can do it in

53:27

two minutes to a level that aligns

53:30

with your specialization. That's really cool. Yeah

53:32

because like there's nothing wrong with, okay

53:34

so how do I put this, when

53:36

I've talked to people who are excited

53:38

about technology in the past, who want

53:41

to learn development, there's lots of different

53:43

types of people and as soon as

53:45

you start saying they're different types

53:47

of people you're dealing with absolutes which

53:49

only you know only the safe deal

53:51

with absolutes but when you get to

53:53

that point I've seen a small group

53:55

of people who are like maybe they're

53:57

taking a course right and the course

53:59

requires them to use Windows and they're

54:01

like I'm not going to do that

54:04

I'm going to use Linux and I'm

54:06

going to use Docker and I'm going

54:08

to and they reel off a huge

54:10

list of technologies and I'm like that

54:12

is awesome but how about you start

54:15

with the stuff that the course tutor

54:17

want you to use first and then

54:19

slowly start replacing those things when you

54:21

get a better understanding right? Because like

54:23

you said right if you're doing X

54:25

copy to deploy or right click publish

54:28

to deploy That's cool that takes care

54:30

of all of that complexity for now

54:32

you can focus on the other steps

54:34

required to get you to right click

54:36

deploy yes then when you're happy with

54:39

those steps you can go right how

54:41

do I change that x copy deploy

54:43

or right click deploy to be something

54:45

scriptable yeah what does that look like

54:47

I can learn that separately at a

54:50

time when that makes sense for me

54:52

to take that in because the last

54:54

thing anyone wants when they're learning and

54:56

developing or trying to build out their

54:58

understanding of something is to learn too

55:01

much at once. Exactly. Because if everything's

55:03

moving and something breaks, you don't know

55:05

what's moving that's broken it, right? And

55:07

then getting someone's help when there are

55:09

so many moving parts becomes super difficult

55:11

because then they've got to understand what

55:14

you're trying to do. So I like

55:16

your idea or focus on maybe build

55:18

the app first and use right click

55:20

publish for now. Yeah, when you're ready.

55:22

Move on to that and then you

55:25

can step up through the different colored

55:27

belts or through the different levels. I

55:29

really like that idea. Me too. It

55:31

almost seems like a program that developers

55:33

could follow throughout their entire career. Absolutely.

55:36

Okay, so how about this? Hey, you're

55:38

a.net Dev who uses React and Angela

55:40

and Postgress and sequel server, but you

55:42

want to learn rust. Well, okay, let's,

55:44

yeah, you may want to skip over

55:47

Hello World, but let's figure out what

55:49

a rust application looks like, and we'll

55:51

use some kind of automatic deploy thing.

55:53

That's not a problem. Because you don't

55:55

need to worry about the intricacy of

55:58

deploying rust, but let's build it first.

56:00

Yes. Now we'll learn how to deploy

56:02

it. Yeah, that's such a brilliant idea.

56:04

I love the Carter element of it

56:06

because you're also I'm going to be

56:08

thinking, when I create this project, what's

56:11

the quickest way for me to initialize

56:13

a local get repository? What's the quickest

56:15

way for me to put it in

56:17

Azure Devops or on GitHub actions? And

56:19

these are all small improvements that you

56:22

can make. And those are all those

56:24

tiny little things along the way, whether

56:26

it's... creating the repo or pushing changes

56:28

or provisioning infrastructure or packaging application. These

56:30

are all things that you'll need to

56:33

consider if you want to go from

56:35

code to cloud in two minutes plus

56:37

processing time as we mentioned before. I

56:39

like it. Maybe you could use it

56:41

as like a course that you can

56:44

do. Maybe one of the NDCs or

56:46

something. Yeah, that would be a good

56:48

idea. I thought about that. I think

56:50

it would be fun. I think... There's

56:52

so much value in building these templates

56:54

and thinking about all these little moving

56:57

parts that it should be a skill

56:59

that we can learn and build upon.

57:01

We shouldn't have to hunt all around

57:03

the net to find all these disparate

57:05

pieces of information so that we can

57:08

have this skill. It'd be good if

57:10

someone did a course. Maybe me. I

57:12

agree with you. I think even just

57:14

from an organizational point of view, having

57:16

a this is how we build applications

57:19

template as a starter. place right just

57:21

do file new cool this is my

57:23

Acme default template cool that's taking care

57:25

of all of that stuff for me

57:27

like you said I've hit the ground

57:30

running I'm building it now yeah that's

57:32

it love it and then you use

57:34

your lunch and learns or whatever to

57:36

teach people have to build those because

57:38

you've built it internally and then you're

57:40

always passing on that new knowledge to

57:43

people as they come into the company

57:45

and come into the team and then

57:47

you're spreading that knowledge far and wide

57:49

I love it Wonderful. So we've been

57:51

chatting about the clean architecture repository and

57:54

the template and how it can help

57:56

folks. I think this was something you'd

57:58

said when we were coming up with

58:00

our notes, our plan for the conversation

58:02

was that be an accelerator or a

58:05

magical force multiplier is what these kinds

58:07

of things do. And I think you're

58:09

absolutely right. Being able to just code

58:11

to cloud in two minutes plus processing

58:13

time is just, and that processing time

58:16

will eventually get shorter. Oh yes. But

58:18

without any input from us, from you,

58:20

from me, from a user of the

58:22

template at all, because the cloud stuff

58:24

will get faster. So like without even

58:26

putting any effort into that part of

58:29

it. that will eventually get faster. There

58:31

is no reason not to try this

58:33

out. That's it. That's it. Yeah. Once

58:35

we've run those couple of commands, we

58:38

walk away. We're already making a coffee

58:40

as your or AWS. We'll do all

58:42

the hard work. We'll get our coffee

58:44

ready and sit back down to a

58:47

deployed solution. I love it. And I think

58:49

that even if you're not interested in clean

58:51

architecture, you should check out the repo. There

58:53

will be a link in the in the

58:56

show notes. Check out the repo because then

58:58

you can understand how it's put together. And

59:00

maybe like Jason and I have alluded to,

59:02

you can use that as a learning step.

59:04

Start that journey of like how do I

59:07

do I do this with node? Or maybe

59:09

I use go. Like how do I get

59:11

to the clean architecture repo that Jason has

59:13

put together, but with go or with. rust

59:15

or with some other, or even I'm going

59:18

to do it with ASP.netcore as well, but

59:20

I'm just going to recreate it in my

59:22

own way. For sure. Like I feel like

59:24

reading through it will help you to figure

59:26

that out for yourself. Yeah, that's it. That's

59:29

it. And reach out to me if you

59:31

get stuck. I have a little bit of

59:33

experience now building.net project templatesates. So I'm happy

59:35

to point you in the right direction. Amazing,

59:37

well Jason it's been fantastic talking with you

59:39

today. I wish we could talk about this

59:42

loads more but it is now super late

59:44

your time and super early my time and

59:46

none of that matters because people are listening

59:48

to this in the future which will

59:50

be the present for them and they're

59:52

listening to us in the past which

59:55

is the present for us and time

59:57

just doesn't make sense anymore. But I

59:59

really appreciate you being on the show.

1:00:01

Thanks Jamie. It's been wonderful. I've learned

1:00:03

some things myself. I'm excited to try

1:00:05

out some new things. And yeah, no,

1:00:07

I appreciate you having with me and

1:00:09

I enjoyed the conversation. So one last

1:00:11

thing, if folks are interested in getting

1:00:13

in touch, you know, you said earlier

1:00:16

on getting in touch, if you get

1:00:18

stuck, I might be able to help

1:00:20

out, is that a LinkedIn thing, is

1:00:22

that an X thing, is that a

1:00:24

blue sky thing, like how do folks

1:00:26

reach out and say, hey Jason, I've

1:00:28

tried to do this thing, I'm a

1:00:30

little bit stuck, can I get five

1:00:32

minutes of your time? I've got a

1:00:34

little bit of a link tree there

1:00:36

and you can connect me any way

1:00:38

you like whether it's LinkedIn or X

1:00:40

or whatever new social media platform I

1:00:42

add to it in the future. So

1:00:45

yeah connect. Jason Taylor. Dev. Nice, I

1:00:47

get a link to that, put that

1:00:49

in the Show Notes. I've collected a

1:00:51

whole bunch of links whilst we've been

1:00:53

talking anyway, but those in the Show

1:00:55

Notes as well. Awesome. Thank you ever

1:00:57

so much Jason Jason, I really appreciate

1:00:59

it. Thanks Jerry. Thank you for listening

1:01:01

to this episode of the Modern.net show

1:01:03

with me, Jamie Taylor. I'd like to

1:01:05

thank this episode's guest for graciously sharing

1:01:07

their time, expertise and knowledge with us.

1:01:09

Be sure to check out the show

1:01:12

notes for a bunch of links to

1:01:14

some of the stuff that we covered

1:01:16

and a full transcription of the interview.

1:01:18

The show notes as always can be

1:01:20

found at the podcast's website and there'll

1:01:22

be a link directly to them in

1:01:24

your podcatcher. And don't forget to spread

1:01:26

the word. Leave a rating or review

1:01:28

on your podcast or of choice. Head

1:01:30

over to dot netco.show slash review for

1:01:32

ways to do that. Reach out via

1:01:34

our contact page at dot netco.show slash

1:01:36

contact or join our discord server at

1:01:39

dot netco.show slash discord all of which

1:01:41

are linked in the show notes. But

1:01:43

above all I hope you have a

1:01:45

fantastic rest of your day and I

1:01:47

hope that I'll see you again next

1:01:49

time for some more.net goodness. I'll see

1:01:51

you again real soon. See you later

1:01:53

folks.

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features