Embracing Human Factors and Rapid Development in Ruby on Rails Systems - RUBY 661

Embracing Human Factors and Rapid Development in Ruby on Rails Systems - RUBY 661

Released Thursday, 21st November 2024
Good episode? Give it some love!
Embracing Human Factors and Rapid Development in Ruby on Rails Systems - RUBY 661

Embracing Human Factors and Rapid Development in Ruby on Rails Systems - RUBY 661

Embracing Human Factors and Rapid Development in Ruby on Rails Systems - RUBY 661

Embracing Human Factors and Rapid Development in Ruby on Rails Systems - RUBY 661

Thursday, 21st November 2024
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:04

Hey folks, welcome back to

0:06

another Ruby Roaves this week

0:08

on our panel. We have

0:11

Ayush Nuatia. Hello. Hello? We

0:13

also have Valentino Stoll. And

0:15

now I'm Charles Max

0:17

Wood from Top Endeves. And

0:19

this week we have a

0:21

special guest and that's Emil

0:23

Kump. Hey everybody. So Emil,

0:26

I'm just gonna clear my

0:28

throat because wow. Okay, let

0:30

me try that again. So

0:32

Emil, I found you, I've

0:34

been corresponding with people, some

0:36

on the discord for Kamal,

0:39

which is the deployment technology

0:41

that DHH put out. I

0:43

think he made kind of

0:45

a deal about it at

0:47

Rails World last year and

0:50

then a whole bunch of

0:52

exciting stuff this year with

0:54

Kamal proxy and stuff like

0:56

that. I mean, I switched

0:58

over to... I switched over

1:00

from Kamal to Kamal to

1:03

with a whole bunch of

1:05

help from you and others

1:07

on there. And I have

1:09

to say, switching over was

1:11

a little rough. Having switched

1:14

over, it's a lot nicer.

1:16

Anyway, so beyond kind of

1:18

what I know about you

1:21

from that, what should people

1:23

know about you? First off,

1:25

I am a mountaineer and

1:27

in order to facilitate that

1:30

I live in a very

1:32

flat country so I do

1:34

a lot of running and

1:36

then I need to pay

1:38

for my travels so I

1:41

do also engineering and I've

1:43

made a career of

1:45

doing sort of critical

1:47

infrastructure or things that

1:49

have real world impact

1:51

and real world consequences

1:54

if something goes wrong, right?

1:56

So both in terms of

1:58

security and robust. and things

2:01

like that. And that's

2:03

everything from the FinTech

2:06

or the payment

2:08

industry to civil

2:10

engineering to online

2:12

voting. Wow. Yeah, it sounds

2:15

like kind of what our

2:17

topic is here, which

2:20

is building critical infrastructure.

2:23

So you've done some

2:25

stuff that I kind of

2:27

need to work. I guess. So

2:30

a banking obviously needs to

2:32

work, right? People get sort

2:34

of pissed if they don't

2:36

get their money. And then

2:39

for civil engineering, I worked

2:41

on tools that the engineers

2:43

would use to build the

2:46

airplanes, and run tests on

2:48

them, right? So both test

2:50

benches and design benches for

2:53

airplanes. And I mean, that

2:55

has a real world. consequence

2:57

because they fall out of

3:00

the sky right if you

3:02

mess it up yeah and

3:04

then yeah online voting that's

3:06

a whole thing and you

3:08

guys in the US just went

3:11

through one one of these

3:13

messy events and they're

3:15

messy everywhere right

3:17

oh yeah and recently I

3:20

moved to two compliance

3:22

and sort of making

3:24

trying to trying to make

3:27

trying to make that

3:29

easier and a better

3:31

experience to become compliant

3:33

and to obtain certifications.

3:36

Right, makes sense. So, let's

3:38

just dive in. I mean, I'm

3:41

not, I'm trying to think if

3:43

I've ever worked on anything

3:45

that was, you know, kind

3:47

of at the level of, hey, if

3:49

this breaks, then, you know,

3:52

really bad things happen. I

3:54

mean, if it breaks, I've... I've had

3:56

them come to me and be upset like

3:58

really bad thing happened, but right. It doesn't

4:00

affect society at large. What's

4:03

the difference between working

4:05

on those apps and working on

4:07

just kind of your, you know, you

4:09

mentioned not e-commerce or not, you

4:11

know, hey, I've got to manage

4:14

my social media or, you know, get

4:16

podcasts out on time. Yeah,

4:18

I mean, there's nothing, just

4:20

to be clear, there's absolutely

4:22

nothing wrong with that, right?

4:24

That's just, I... I started

4:26

out in that area as

4:28

many developers do, right, building

4:30

like some ad system when

4:32

I was very young and

4:34

then moved to some, you

4:37

know, sort of offer platform

4:39

and then I sort of

4:41

realized that it was, it

4:43

was just incontiquential

4:45

in a way, right? I looked at

4:47

people. I have people around me, my

4:49

father is a civil engineer, right? And

4:51

so I have people in my, sort

4:54

of my family, my near family, that

4:56

was building things in the real world.

4:58

And I was like, I want to

5:00

do that, but I do like this

5:03

computer stuff. So can we sort of

5:05

maybe find a way where I can

5:07

build things in the real world, just

5:09

using my computer? And so I slowly

5:11

started to shift over into something that

5:14

was... founded more

5:16

in civil engineering

5:18

and sort of

5:20

industry rather than commerce.

5:23

And then I started

5:25

in a FinTech company

5:27

where we were, where

5:30

I was part of

5:32

building out and continuing

5:34

to build on a

5:36

system where you can

5:39

basically, it's like

5:42

direct debits. bank

5:44

transfers but worldwide.

5:46

Okay. So and and there

5:48

it doesn't necessarily mean a

5:50

lot to you and me

5:52

and it's the same with there's

5:55

a bunch of them now

5:57

right like these same money

5:59

home. types of things. It doesn't

6:01

mean a lot to you and me,

6:04

but it does mean a ton to

6:06

those who is on the receiving end

6:08

of that, right? Because that's

6:11

like half a year's pay or

6:13

something that comes in, right? So

6:15

it does matter to those people.

6:17

So yeah, that was sort of

6:19

where I ended up and we

6:22

are moving a lot of money.

6:24

It seems it's one of those

6:26

where little like it's it's a

6:28

lot of tiny things that add

6:30

up right there's like millions and

6:33

millions of dollars being

6:35

moved around for that purpose and

6:37

you don't want to miss

6:39

handle those money right so you

6:41

are hooking into the banking

6:44

infrastructure into swift and into

6:46

the I-band network and the

6:49

whole sort of PC compliance

6:51

and everything with that, right? So

6:54

you need to make sure that

6:56

the software is robust, well

6:58

tested. Testing has been a

7:00

main thing of mine for

7:02

a long time because of

7:04

that. And also documented well,

7:06

right? So that's where I

7:08

sort of started out with

7:10

being required to document

7:12

what I was doing and how

7:15

it was supposed to work, rather

7:17

than just shipping fast and breaking

7:19

things. I was required to test.

7:22

and document, then test, then

7:24

stage it, then test

7:26

some more, then ship and

7:29

not break things. So that

7:31

was a different paradigm. So

7:33

that's sort of where I

7:36

first met that, right? And

7:38

that was a pretty great

7:40

experience. And so I was like,

7:42

oh, can I have more of this?

7:45

Can I maybe even get

7:47

even closer, right? Yeah, so

7:49

that's where all that started.

7:51

And then I was hooked on the

7:53

whole, can we test it? Can

7:56

we build something that runs Ruby

7:58

on rails, but make? the difference

8:00

to people's lives, like in

8:02

real world, right? And so this

8:04

was basically a payment situation

8:07

just built in Rubian

8:09

rails. And back then, many of

8:11

the banks didn't have a proper

8:14

API. So we ended up scraping

8:16

a lot. And that's, you know,

8:18

against terms of policy and terms

8:20

of service and all of that.

8:22

And they were really mad. And

8:25

we went through that whole shebang

8:27

of getting, you know, sort of...

8:29

scolded and far for that for

8:31

a while. Yeah, so it was a

8:34

bit the Wild West back then,

8:36

but it's definitely gotten

8:38

better and I think

8:40

there's a lot of,

8:43

again, sort of compliance work

8:45

and legal work that went

8:47

into the EU did a lot

8:49

to make sure that banks would

8:52

have... Not standardized APIs,

8:54

but a minimum level

8:56

of information that you

8:58

could retrieve with an

9:00

API, which made all of

9:02

that a lot easier, right? It

9:04

also means that I can technically

9:07

build my own banking app for

9:09

my own bank account because I

9:11

have API access to it. It

9:13

may not be obvious. It may

9:16

be put documented, but

9:18

it is there. And so I think

9:20

that's pretty cool. Yeah. I'm

9:22

curious Valentinor, Iyush, have experienced

9:25

doing this stuff. Nothing

9:27

that critical, no. The closest I

9:29

kind of came to anywhere near that

9:31

world was when I worked for transfer

9:33

wise, but I was an iOS developer,

9:35

so I didn't really have to do any

9:37

of the hard stuff. I just

9:39

made API calls, but I know

9:42

they were also doing quite a

9:44

lot of the scraping and stuff.

9:46

There's a lot of salinium going

9:49

on behind there to get into

9:51

different bank accounts. It's all a

9:53

bit scary when you think about

9:55

it. Yeah, yeah it really

9:58

is because like

10:00

your whole banking experience is

10:02

tied up on some scraper

10:04

working correctly and not messing

10:06

around with the the thousands

10:08

of dilemmters and the the

10:10

cent commas are different on

10:13

different regions right so you

10:15

don't want to mess around

10:17

with that and I did

10:19

transfer some money incorrectly the

10:21

the backbone banking system is

10:23

pretty robust as well so

10:25

we were able to basically

10:27

not move the money anyways

10:29

right but it far too

10:32

many money, the wrong place.

10:34

Whoops. Yeah, I will say

10:36

that. Oh, never mind. That

10:38

was a backbreaking day. I'll

10:40

bet. So I'm a little

10:42

curious as we get into

10:44

this. Like, you mentioned testing.

10:46

What does your testing setup

10:48

look like? Because I mean,

10:50

I'm sorry. When I write

10:53

my test is like. Okay,

10:55

it's good at like I'm

10:57

I'm reasonably confident right, but

10:59

I'm not like ironclad confident

11:01

like baking level confident that

11:03

my code works right Yeah,

11:05

yeah, that's a good question

11:07

I tend to not be

11:09

too dogmatic. I know there's

11:12

a lot of like do

11:14

this or do that paradigm

11:16

or do test first or

11:18

whatever and I I tend

11:20

to just play around with

11:22

it and make myself certain

11:24

first that this is going

11:26

to work whatever I'm sitting

11:28

with. And then when I

11:31

know that it, you know,

11:33

sort of I can see,

11:35

okay, it works, it does

11:37

what I needed to do,

11:39

then it is worth testing,

11:41

right? And then it's, I

11:43

try and test on the

11:45

lowest possible level first, which

11:47

means I will start with

11:49

something like unit tests. And

11:52

for that. I want to

11:54

permute everything right you want

11:56

to make. make sure that

11:58

every argument, so you basically

12:00

start with the least amount

12:02

of arguments for a method

12:04

and then you add an

12:06

argument slowly in I use

12:08

aspects, so it's in every

12:11

context block or in every

12:13

described block, right? So you're

12:15

certain that every version of

12:17

every argument is tested and

12:19

has been permitted. Yeah, so

12:21

that everything, like every variable

12:23

has been tested on its

12:25

own so you know how

12:27

it behaves both with and

12:29

without that particular variable and

12:32

you also know how it

12:34

behaves if the variable has

12:36

the wrong type right and

12:38

so because Ruby isn't quite

12:40

where we have type safety

12:42

yet and there's a lot

12:44

of work going on with

12:46

that but we aren't there

12:48

yet so I, you know,

12:51

you want to make sure

12:53

that we can handle strings,

12:55

numbers, not strings, truths, bullions,

12:57

whatever. There's like, I have

12:59

a little thing that basically

13:01

says, take this and just,

13:03

you know, cycle it through

13:05

all of the different types

13:07

it can be and just

13:09

put in garbage so that

13:12

I know it can not,

13:14

it doesn't break when a

13:16

number is presented rather than

13:18

a string or something stupid

13:20

like that, right? And then

13:22

you sort of, you slowly

13:24

move up. So you're confident

13:26

that this method works and

13:28

then you move up to

13:31

ever called it and then

13:33

you, what I do is

13:35

I, then I go through

13:37

and test that. But I

13:39

think, opposed to what is

13:41

DHH preaches or at least

13:43

sort of, he has this

13:45

idea that you would go

13:47

through the entire stack and

13:50

I believe that they had

13:52

their test to do that.

13:54

I tend to not I

13:56

tend to sort of stop

13:58

testing at each level, right?

14:00

So model tests are their

14:02

own thing. And then when

14:04

you test the controller, you

14:06

basically verify that the model

14:08

is being called with the

14:11

expected parameters because you know

14:13

you've already dealt with the

14:15

parameters on a lower level.

14:17

So it's not mocking per

14:19

se, it's just that I

14:21

only need to test that

14:23

the... model was created or

14:25

was called, I don't really

14:27

need to test that it

14:30

was the correct argument, right?

14:32

Because I'm certain about the

14:34

correctness of the arguments on

14:36

a lower level than that.

14:38

And then you saw slowly

14:40

move up, which means that

14:42

I find that that means

14:44

that the individual testing levels,

14:46

it gives you a little

14:48

bit more freedom to sort

14:51

of move a model around

14:53

because it's coupled somewhat on

14:55

a test level, but not.

14:57

tremendously, right? I only coupled

14:59

the controller to the model

15:01

in the sense that I

15:03

checked that the model was

15:05

called, not that it was

15:07

called with a particular set

15:10

of arguments. So it makes

15:12

it a little bit easier

15:14

to also restructure your tests

15:16

when your code change. But

15:18

yeah, it's just a lot

15:20

of work on lower level

15:22

things. I'm a big fan

15:24

of sobe, but it's not.

15:26

It's not quite there yet.

15:29

I think it works reasonably

15:31

well, but it's very hard

15:33

for developers to use and

15:35

so I think we need

15:37

to do there there needs

15:39

to be a lot of

15:41

work done in terms of

15:43

making it nice and sexy

15:45

to use so that we

15:47

can get people to use

15:50

it, right? I'd love to

15:52

dig in a little bit

15:54

more on the testability aspect

15:56

because one of the biggest

15:58

things I see miss is

16:00

maybe like skipping over like

16:02

the maybe some lower level

16:04

implementations and then like a

16:06

system update breaks something and

16:09

it just wasn't covered. right

16:11

like how do you go

16:13

about like you know waiting

16:15

whether or not that it's

16:17

worth it to like actually

16:19

run like a system command

16:21

or an external API call

16:23

or something like that? Yeah

16:25

so system commands I usually

16:27

check just that the signature

16:30

of the call is correct

16:32

and probably that it returned

16:34

the right thing right so

16:36

that if I hit the

16:38

OS I'm I'm basically testing

16:40

that I gave it these

16:42

parameters and I expected something

16:44

back like a string or

16:46

whatever it is, right? Because

16:49

it's so hard to know

16:51

what it was supposed to

16:53

be because sometimes the system

16:55

commands will change their their

16:57

signature but not necessarily the

16:59

signature. So that's that's very

17:01

hard. not go there. I

17:03

try really hard not to

17:05

go there because it is,

17:08

it's out of my control,

17:10

right? And on the other

17:12

end, when I call other

17:14

APIs, I definitely test that.

17:16

I use something like MECR

17:18

or something I capture all

17:20

the network traffic and I

17:22

make sure to do the

17:24

same kinds of sort of

17:26

making sure that if I

17:29

call it with... these arguments

17:31

that I have controlled over

17:33

I get this particular response

17:35

and if I do something

17:37

else then then it breaks

17:39

right or it gives me

17:41

the incorrect response and and

17:43

I also found that for

17:45

example with with banking that

17:48

one of the cool things

17:50

we did was that we

17:52

basically took all of the

17:54

historical records right that we

17:56

had for all the bank

17:58

accounts and we basically used

18:00

it as a testbed Because

18:02

then you can train on

18:04

that you can basically say

18:06

If I feed it all

18:09

of this information that we

18:11

know happened and it happened

18:13

correctly because it happened a

18:15

year ago or two or

18:17

whatever, it should result in

18:19

a particular set of like

18:21

it should result in a

18:23

particular value on the account,

18:25

right? So you can actually

18:28

use historical data as a

18:30

testbed. And that means that

18:32

you have a factual. way

18:34

to check if it's correct

18:36

or not. So yeah, I

18:38

tend to use that as

18:40

well. I also use that

18:42

when I did software for

18:44

the for the sort of

18:47

civil engineering and building flights

18:49

and testing that, right? We

18:51

also used a lot of

18:53

existing information to make sure

18:55

that we had input output.

18:57

So we understood that given

18:59

these inputs, this is the

19:01

output that we would expect,

19:03

right? We could basically take

19:05

old designs and try and

19:08

run them through and you

19:10

can see if does it

19:12

break it down that you

19:14

would expect does it run

19:16

the does it sort of

19:18

fit to the engineering standard

19:20

design standard that we were

19:22

implementing against they also have

19:24

test value that you can

19:27

use right or test data.

19:29

So it's also about going

19:31

out finding big test data

19:33

sets that you can use

19:35

to also make a statistical

19:37

sort of approach, right? I'm

19:39

not making any statistical claims,

19:41

but I am running a

19:43

lot of tests on a

19:45

lot of data that, you

19:48

know, you can be reasonably

19:50

certain that if there were

19:52

errors in your system, it

19:54

would have been caught by

19:56

this because it's so much

19:58

effective production data, right? Yeah,

20:00

I imagine that working with

20:02

like the public sector that

20:04

you would have a lot

20:07

of of access to that

20:09

data, right? I guess depending

20:11

where you live. Yeah, I

20:13

mean, I mean, interestingly enough,

20:15

none of this is for

20:17

the public sector, which is

20:19

a little bit weird. You

20:21

would think that it was,

20:23

but it actually isn't like

20:26

the regulation of the aerospace

20:28

is public sector, right? But

20:30

the actual building of airplanes

20:32

is a private commerce, right,

20:34

private industry. And likewise with

20:36

banking the... the regulation of

20:38

it is public but the

20:40

actual banks are private entities

20:42

and likewise with... Do you

20:44

find that difficult for like

20:47

the data access like is

20:49

that data proprietary then for

20:51

like doing large swaths of

20:53

tests or finding them? Yes

20:55

but most of the times

20:57

the companies are interested in

20:59

providing it right like if

21:01

you if you go on

21:03

to big airplane airplane or

21:06

an aerospace company and you

21:08

need to design a test

21:10

system for them or something

21:12

to help them build right?

21:14

They are interested in giving

21:16

you that kinds of data.

21:18

So it wasn't that it

21:20

was hard, it's just that

21:22

it is also quite narrow

21:24

in scope, like it's more

21:27

or less only for that

21:29

one, right? So in banking

21:31

it would be a lot

21:33

of records, but only for

21:35

one bank. So you would

21:37

only know how it looked.

21:39

in one type of account

21:41

system, right? And then you

21:43

would run over a test

21:46

on that. And now, two

21:48

seconds. Okay. All right. Okay.

21:50

Okay. There we go. Hello.

21:52

in terms of sort of

21:54

like what. Yeah, it doesn't

21:56

have a lot of breadth

21:58

you get it for like

22:00

one bank or one airplane

22:02

company or You get it

22:05

for one company who runs

22:07

elections, right? Public elections is

22:09

a bit different By definition,

22:11

you don't have any test

22:13

data because all of the

22:15

records are sort of you

22:17

don't know who voted so

22:19

you can't know How to

22:21

test that right so you

22:23

have to do a different

22:26

testing paradigm there Yeah,

22:30

that makes sense. I mean here in

22:32

the US we have a anonymous ballot

22:34

as well, right? Yeah. And I don't

22:36

know how they do it in other

22:38

states. I mean, I'm involved in the

22:41

process here in Utah. And yeah, you

22:43

send in your envelope and they with

22:45

your ballot in it and they validate

22:47

that your like your signature matches and

22:49

stuff off the envelope. But then they

22:52

pull your ballot out of the envelope

22:54

and put it in the pile to

22:56

be counted. And right,

22:58

they don't track who you voted

23:00

for in that case, or at

23:03

least they're not supposed to. Correct.

23:05

And that is also the case

23:07

for the digital solutions. Right. A

23:10

friend of a colleague of mine,

23:12

Stefan, who is a cryptographer, he

23:14

or previous colleague of mine, he

23:17

did a lot of work of

23:19

sort of gathering together, a lot

23:21

of the academic work so that

23:24

we could exactly do that in

23:26

a, in a, cryptography safe way

23:28

but online. And you could also

23:31

do it in a way that

23:33

it was, you know, you could

23:35

track it and you could ensure

23:38

that this was in fact the

23:40

case. Like you could give the

23:42

log data and the trace data

23:45

to mathematicians and they could verify

23:47

that mathematically it could only error

23:49

have worked if these rules were

23:52

followed, which was like, you know,

23:54

you anonymized and you did, you

23:56

did mixing and you did a

23:59

lot of these things, right? Right.

24:01

So you protect the identity of

24:03

the... voter, but you also ensure

24:05

that only people who are legally

24:08

permitted to vote, vote, and that

24:10

they're only cast one ballot and

24:12

things like that. Yeah, exactly. And

24:15

the test, the test, sort of

24:17

the build idea for that and

24:19

the testing regime for that is

24:22

significantly different, right? Because this is

24:24

in fact, the public space, to

24:26

your point earlier, Valentino, this is

24:29

a public domain, right? So you.

24:31

You are a bit more scrutinized,

24:33

you're also publicly scrutinized by everybody,

24:36

right? Because we all know how

24:38

it went with the dominion voting

24:40

machine case, right? That went real

24:43

fast, real downhill downhill. So, yeah.

24:45

Well, and you bring up the

24:47

dominion voting machine case, and whether

24:50

you believe that they worked or

24:52

didn't, there's... If there's

24:54

enough population that doesn't trust

24:56

it, then it causes problems,

24:58

right? Yeah. And that's the

25:00

same everywhere, right? And that's,

25:02

I found that sort of

25:04

on a completely different but

25:06

somehow related topic, I really

25:09

found that the aerospace or

25:11

the airplane industry was really

25:13

good because the, what's the

25:15

American one, the TSP. Transportation

25:17

Safety Board, is that Tuesday?

25:19

Yeah, TSB, right? Yeah, those

25:21

are the ones that do

25:23

crash audits, that sort of

25:25

like go through. Oh yeah,

25:27

the NTSB, yeah. Both them

25:29

and the European counterparts have

25:31

a really, really cool way

25:33

of going about it. They

25:35

don't ever go and say,

25:37

oh, it was that person's

25:39

fault. Right. If the person

25:41

hadn't slept enough. If the

25:43

person couldn't read the dials,

25:45

it is the fault of

25:48

their plan that that made

25:50

him not have enough hours

25:52

to sleep and it is

25:54

the fault of the dial

25:56

for not being visible enough.

25:58

Right? So it's not they

26:00

don't ever cast personal blame

26:02

or they very rarely cast

26:04

personal blame and I really

26:06

thought that was a super

26:08

cool way of going about

26:10

it. Also just from a

26:12

sort of like evaluating if

26:14

something works well, right? Just

26:16

like from a human perspective

26:18

and when you do leadership

26:20

in tech or if you

26:22

guide or lead others that

26:24

I found that really valuable

26:27

so that that whole way

26:29

of thinking about it. And

26:31

they also they collect a

26:33

ton of evidence right and

26:35

they have a very structured

26:37

way of collecting that before

26:39

they then conclude that it

26:41

works or didn't work or

26:43

that this was the fault.

26:45

But they also, I think

26:47

I learned a lot also

26:49

in terms of like having

26:51

redundancy. Like what happens if

26:53

this thing break? What happens

26:55

if your job runner doesn't

26:57

run? How are you alerted?

26:59

What happens if your email

27:01

doesn't send? How are you

27:04

alerted? How do you have

27:06

alternative options? Do you have

27:08

an alternative email provider that

27:10

you can switch to easily?

27:12

Do you have alternate job

27:14

runners that you can switch

27:16

to easily? Do you have

27:18

any of this, right? So

27:20

that redundancy ideology was pretty

27:22

cool. And for like large

27:24

scale systems, it pays off

27:26

to have extras of these.

27:28

Even though. you know you

27:30

use somebody like send grid

27:32

or use somebody like a

27:34

male chimp or something and

27:36

you know they say that

27:38

they scale and they do

27:40

right but then ever so

27:43

often it's down and it's

27:45

pretty nice to have a

27:47

backup even if it's a

27:49

tiny backup and even if

27:51

it's just you know up

27:53

and coming fairly cheap one

27:55

it will do the job

27:57

for like a day right

27:59

and you will actually still

28:01

send stuff out or you

28:03

will still process jobs or

28:05

you will still whatever it

28:07

is right and also running

28:09

like on the big scale

28:11

running something like Multicloud or

28:13

running something like an open

28:15

stack where you can actually

28:17

move to somewhere else pretty

28:19

fast. There was that case

28:22

with that the Australian case

28:24

where the where the bank

28:26

got taken down because someone

28:28

at Google decided to delete

28:30

their account right for like

28:32

160 million US worth of

28:34

service just got nuked. So

28:36

for those cases, it's pretty

28:38

nice to have a second

28:40

provider backup and some way

28:42

of getting there, right? That

28:44

is more a Devops problem.

28:46

It's not really a problem

28:48

that I've ever solved. It's

28:50

a problem that I have

28:52

sort of like assisted with

28:54

and talked about and verbalized

28:56

a lot in companies, but

28:58

it is to a high

29:01

degree a Devops solution that

29:03

needs to go in there

29:05

and not one that I

29:07

am. gonna build. So you're

29:09

talking a lot about like

29:11

people's lives and you know

29:13

their livelihood their money like

29:15

things that sustain life right

29:17

and so like obviously these

29:19

infrastructures are critical like what

29:21

tools you're using are critical

29:23

so I'm curious like what

29:25

about like Ruby and rails

29:27

you know specifically feature-wise like

29:29

do you see as being

29:31

like? part of that critical

29:33

process. I think the main

29:35

part for me is that

29:38

it can be built, you

29:40

can write it so that

29:42

it is absolutely readable and

29:44

understandable what's going on, so

29:46

you can reason about the

29:48

what's going to happen even

29:50

without necessarily understanding the language

29:52

fully or even without understanding

29:54

what This active record method

29:56

is going to do underneath

29:58

because stuff is named. well

30:00

and because it's ordered and

30:02

organized well, you can reason

30:04

about what's gonna happen and

30:06

you can have an expectation

30:08

that makes it a lot

30:10

easier to build complicated things.

30:12

Like you can go and

30:14

test it afterwards, right? But

30:17

just getting something that's complicated

30:19

up, like just getting it

30:21

up on its legs, it's

30:23

really nice to have something

30:25

that that is structured well

30:27

and that you can reason

30:29

about and that you talk

30:31

about the sort of... What's

30:33

the consequence of this method

30:35

or that method, right? Yeah.

30:37

There we go. So that's

30:39

a guest co-host. Yeah, exactly.

30:41

But I think and also

30:43

I find that it's I

30:45

mean, I've done a few

30:47

frameworks throughout my career, right?

30:49

I've always come back to

30:51

rails and ruby, and I've

30:53

also started there, so maybe

30:56

I'm biased, but I haven't

30:58

found any of the other

31:00

frameworks that provides the same

31:02

sort of consistent experience through

31:04

every part of the application,

31:06

whether or not you're doing

31:08

low-level active record stuff or

31:10

you're doing high-level system tests

31:12

or whatever you're doing. It's

31:14

consistently the same experience. Which

31:16

means that it's fairly easy

31:18

for a developer to switch

31:20

gears and do something else,

31:22

right? In the stack, I

31:24

mean. So like you can

31:26

have a person who is

31:28

sitting and doing the swift

31:30

transfer one week, right? And

31:32

then he can go and

31:35

he can look at the

31:37

web scraper the next, because

31:39

it's consistently the same experience.

31:41

and you can write it

31:43

in a way if you

31:45

have a good sort of,

31:47

if you have a good

31:49

style guide and you have

31:51

good code review, you can

31:53

get it to a point

31:55

where it's the same experience

31:57

every time. And you can

31:59

get abstraction levels and abstraction

32:01

layers that feels the same.

32:03

And that makes it easy

32:05

to build something that, where

32:07

you can also easily plug

32:09

out something and put something

32:12

else in, right? Like you

32:14

can switch out one database

32:16

provider for the other without

32:18

much. Or you can do

32:20

whatever, whatever it is that

32:22

you feel like you need

32:24

to change. can be quite

32:26

easy and quite straightforward if

32:28

you've set it up. To

32:30

be, and I'm not necessarily

32:32

talking about modularity in the

32:34

site work level of aggressiveness

32:36

that that Shopify has, right?

32:38

But you can definitely do

32:40

something along those lines with

32:42

just talking about it, organizing

32:44

the code. and just sort

32:46

of thinking about how is

32:48

this going to be tested.

32:51

I find that that's also

32:53

part of it, right? It's

32:55

like, how are we going

32:57

to test this? Because if

32:59

we are going to, if

33:01

we're going to test it

33:03

in this particular way or

33:05

that particular way, then that

33:07

informs the the API and

33:09

the sort of the interface

33:11

for it. a database you

33:13

tend to test the same

33:15

way, you know, if it's

33:17

file uploading or downloading, you

33:19

tend to test that the

33:21

same way, which makes it

33:23

easy to switch out one

33:25

component for the other if

33:27

your test paradigm is the

33:30

same, right, for that component.

33:32

So I feel that's that's

33:34

some of the reasons that

33:36

I've chosen this again and

33:38

again, right. And also like...

33:40

is a DJ set on

33:42

his keynote. This is a

33:44

one, like it can be

33:46

a one man army, right?

33:48

You can. can be pretty

33:50

fast and pretty dangerous with

33:52

it, which means you actually

33:54

need fairly low headcount to

33:56

get somewhere really fast. And

33:58

you can actually get something

34:00

that's really secure, solid, safe,

34:02

robust and easy on the

34:04

eyes and nice to use

34:07

with only a handful of

34:09

people, right? You can get

34:11

somewhere with just one person,

34:13

but you can definitely get

34:15

a long way with a

34:17

handful of people. You are

34:19

so speaking my language men.

34:21

This is why I'm here.

34:23

Yeah. So one thing that

34:25

I'm wondering about with all

34:27

of this is, you know,

34:29

it sounds like depending on

34:31

what the concerns are in

34:33

the app, right? So whether

34:35

it's banking or voting or,

34:37

right, you may have different

34:39

concerns about uptime or stability

34:41

or... you know, resumability, you

34:43

know, if Google deletes all

34:46

1800 year servers or, you

34:48

know, whatever, right? So how

34:50

do you begin to start

34:52

looking at your application and

34:54

saying, well, you know, for

34:56

example, in banking, right? We

34:58

have to make sure that

35:00

we don't have any of

35:02

these kinds of issues, bugs,

35:04

show up, right? you know,

35:06

make sure our accounting is

35:08

super robust. But then you're

35:10

talking about the voting and

35:12

it's, hey, we've got to

35:14

protect user data and make

35:16

sure that you're right. So

35:18

the areas of concern are

35:20

different. So how do you

35:22

start to address that? And

35:25

then from there, where do

35:27

you start to dive in

35:29

and make sure that you've

35:31

got a sound strategy for

35:33

making sure that you're meeting

35:35

those requirements? Yeah, that's a

35:37

good question. So for let's

35:39

just take voting because it's

35:41

up and hot and topic

35:43

these days, right? And so

35:45

it's just that there. Always.

35:47

So one of the things

35:49

there is that you definitely

35:51

want, so like, use them

35:53

previously, there's a few right

35:55

there. like the whole user

35:57

privacy and then there's the

35:59

vote secrecy and then there

36:01

is the use it needs

36:04

to be receipt free and

36:06

like there's a bunch of

36:08

these academic properties of vote

36:10

and an election right and

36:12

you go through each of

36:14

those and you you effect

36:16

you just sort of sit

36:18

down and you start at

36:20

one and then you try

36:22

and figure out how to

36:24

do that right this is

36:26

really the job of the

36:28

photographer? Like how do we

36:30

get this organized so that

36:32

we match all of these?

36:34

And then once we have

36:36

a viable protocol that will

36:38

do this, then the developers

36:41

come in and we look

36:43

at the protocol and we

36:45

go like, okay, this thing

36:47

is about encrypting the vote.

36:49

That needs to happen as

36:51

early as we can possibly

36:53

get it to happen, which

36:55

means it needs to have

36:57

an in the voters device,

36:59

right? So... We need to

37:01

generate, we need to pick

37:03

a curve, a cryptography curve,

37:05

and then we need to

37:07

basically generate key paths in

37:09

the device and we need

37:11

to encrypt it as early

37:13

as possible. And so you

37:15

go through sort of like

37:17

rigorously and slowly and just

37:20

sort of reason about when

37:22

will this part of the

37:24

process happen and where does

37:26

it need to happen? Sort

37:28

of more on a timeline.

37:30

Then we need to transmit

37:32

the vote. We transmit the

37:34

vote to the server and

37:36

then the server needs to

37:38

basically allow, if you need

37:40

to allow tracking or if

37:42

you need to allow receipts

37:44

or whatever is the property

37:46

you need to have, then

37:48

you need to figure out

37:50

a way to provide that

37:52

at this point. And then

37:54

you go on to something

37:56

like anonymization, which is effectively

37:59

where you take one. envelope

38:01

out of the other envelope

38:03

right to do the the

38:05

analogy That needs to happen

38:07

in a way that you

38:09

can prove that it happened.

38:11

So you need to have

38:13

a good trace here. You

38:15

need to have good locks

38:17

and traces that you can

38:19

publicly show. And then, you

38:21

know, so you sort of

38:23

move through the chain, sort

38:25

of like the event of

38:27

a thing, right? It's the

38:29

same. And so you sort

38:31

of... need to reason about

38:33

where is it going to

38:36

happen? That gives you some

38:38

ideas of should we need,

38:40

do we need a web

38:42

app, do we need a

38:44

mobile device, do we need,

38:46

do we need to run

38:48

cryptography, do we need to

38:50

run something advanced on the

38:52

user's device or is the

38:54

user's device just a portal?

38:56

And that gives you sort

38:58

of ideas on or some

39:00

inside into how this should

39:02

be organized, how this should

39:04

be tested, how this should

39:06

be planned out, right? But

39:08

most importantly for voting is

39:10

basically making sure that everything

39:12

is tracked. And we grabbed

39:15

part of the concept of

39:17

blockchain, which is has chain,

39:19

right? To basically hash everything

39:21

together. So you can't move

39:23

stuff in the middle without

39:25

everybody being able to know,

39:27

right? Things like that. Yes,

39:29

next week. Yeah, tomorrow public

39:31

escape, that's another thing. Say,

39:33

hey, God, you know. Then

39:35

we're at two. Did we

39:37

all this? Where's the rest

39:39

of sleep? No, it's him

39:41

at a toast. Yeah, they

39:43

are all. They're more of

39:45

man. Wow. And for, for

39:47

like, um... For

39:50

banking, right you want to you

39:52

want to make sure that see

39:55

the point is to get money

39:57

from A to B So you

39:59

want to reason about well first

40:01

off How am I going to

40:04

get the number that they intend

40:06

to send, right? Like, where does

40:08

that come from? Where does the

40:11

sort of outgoing amount of money

40:13

come from? This is the second

40:15

one. It's hard to be home

40:17

alone with kids. But so you

40:20

want to basically say, okay, so

40:22

where does the money come from?

40:24

And then you want to reason

40:27

about, well, How can I prove

40:29

that the money that came from

40:31

there that I got it right?

40:34

Like how can I make sure

40:36

that the intent was to send

40:38

it to me? How can I

40:40

make sure that the amount was

40:43

correct? Right? Because like, like we

40:45

talked about earlier with transfer wise,

40:47

for example, there is a lot

40:50

of web scraping. There is a

40:52

lot of this sort of craziness

40:54

going around. Less so now, more

40:56

so then, right? and you want

40:59

to make sure that you have

41:01

either done it a few times

41:03

that you're quite confident that you've

41:06

run it on big data sets

41:08

like you need to be certain

41:10

that you can pass these things

41:12

correctly and then you want to

41:15

sort of grab that information and

41:17

then we get into the whole

41:19

banking of how do they move

41:22

them there's like swift and that's

41:24

pretty taken care of the only

41:26

problem here was that it was

41:28

slow right So what we would

41:31

do is that we would basically

41:33

assume that if we could read

41:35

the intended money here, we could

41:38

effectively pay it out here immediately

41:40

and then just do the in-between

41:42

transfer later. So we would basically

41:44

have big stacks of money around

41:47

the world and we could immediately

41:49

pay out locally or take money

41:51

in locally and then we would

41:54

transfer later. So in that case

41:56

it was more question of... Can

41:58

you verify the amount here and

42:00

can you verify that it's the

42:03

sort of the correct amount and

42:05

the correct intendant? amount and can

42:07

you then make that payout over

42:10

here? Yeah, that's good. So, can

42:12

you do the payout here? Is

42:14

there sufficient funds? And then after

42:16

that, you sort of say, okay,

42:19

now we've, we've effectively solved the

42:21

user journey, right? We've taken money

42:23

in, we've paid money out. Where

42:26

effectively the user is happy or

42:28

both users are happy, right? Nobody

42:30

knows that we didn't actually move

42:32

the money. And then we can

42:35

take, you know, take it slow,

42:37

just do it properly, make sure

42:39

that we interact with the Swift

42:42

network, that's a bit slower. So

42:44

you need to have a buffer

42:46

in both ends to do it,

42:48

right? And the... ability to scrape

42:51

right so one of the critical

42:53

points here was that you have

42:55

to be able to always scrape

42:58

these websites in some capacity and

43:00

you have to actually write your

43:02

your code back then it was

43:04

you know scraping you have to

43:07

write it quite robustly and sort

43:09

of reason about what happens if

43:11

the layout changes because banks change

43:14

the layout surprisingly more than you

43:16

would think Because they don't care

43:18

about your ability to scrape it.

43:20

That's not their business, right? Which

43:23

is fair. It just means that

43:25

you have to be, you have

43:27

to think about the robustness of

43:30

a scraper like that, because what

43:32

happens if the item is not

43:34

classified, the same if the dumb

43:36

element doesn't have the same class

43:39

or the same ideas it used

43:41

to have, can we find it

43:43

by reasoning with words? Like can

43:46

we figure out, well, if it's

43:48

like, if it says some, can

43:50

we maybe then... figure out what's

43:52

over here next to it because

43:55

that might be the number I'm

43:57

looking for, right? So there's sort

43:59

of like reasoning like that, that

44:02

goes on. That's, yeah, and then

44:04

there's accounting, like a lot of

44:06

accounting, a lot of keeping tracks

44:08

just for legal and compliance reasons

44:11

on where is the money going,

44:13

who's it going to, KYC, all

44:15

of these, there's a bunch of

44:18

tooling after that, right? which is

44:20

sort of where I was introduced

44:22

to this whole compliance thing like

44:24

how do you make sure that

44:27

the people you're operating with I

44:29

in fact the people that they

44:31

say they are and I in

44:34

fact the right people that you're

44:36

supposed to be operating with right

44:38

and so that was also a

44:41

journey like how do you even

44:43

know that how do you make

44:45

tooling for them to identify themselves

44:47

at the latest possible time so

44:50

it's the least amount of sort

44:52

of burden or the least amount

44:54

of friction and make it as

44:57

easy as possible, right? There's a

44:59

bunch of providers out there that

45:01

can help you do that. You

45:03

can also do it yourself. It's

45:06

not super complicated, but you are

45:08

now dealing with people's private information,

45:10

because now you maybe have a

45:13

copy of their passport. How do

45:15

you deal with a copy of

45:17

a passport? You have to sort

45:19

of be like, okay, where do

45:22

I store this? How do I

45:24

make sure that none of the

45:26

developers can access this, right? Because

45:29

you don't want developers to just.

45:31

S.H. onto the box and just

45:33

be like, oh, let me just

45:35

download all the attachments. So you

45:38

need to be, you need to

45:40

make reasons, you know, sort of

45:42

need to think about how do

45:45

you then protect this data from

45:47

yourself in some way, right? Yeah,

45:49

so that it goes deep and

45:51

it goes far, right? You can

45:54

talk about this for a long

45:56

time and about all the reasonings

45:58

you have to make, but at

46:01

some point, you also have to

46:03

protect your systems from other developers

46:05

from Other, also high level people

46:07

in the organization, needs to be

46:10

kept on. because the higher up

46:12

you are the most the spear

46:14

fishing you are all wailing you

46:17

are effectively the subject of and

46:19

the greater the risk right so

46:21

you want people to not have

46:23

access maybe you even want the

46:26

CTO to not have access like

46:28

there's a bunch of considerations like

46:30

this in in the banking one

46:33

I was a senior developer, I

46:35

had access, then we had the,

46:37

one of the compliance officers, she

46:39

had access to the swift network,

46:42

and then, but the CTO and

46:44

the head of, sort of, the,

46:46

the, the, COO type person didn't

46:49

write because that that would, it

46:51

posed too much of a risk.

46:53

So there's also like these human

46:55

factors you have to think about

46:58

when you reason about this the

47:00

security of a system that that

47:02

actually impacts and it has something

47:05

to do for real world people.

47:07

That was a very long spiel.

47:09

Sorry. Yeah. It's fascinating when there's

47:11

so much on the line like

47:14

most of the apps I've worked

47:16

on like if it went down

47:18

it's like yeah fine. Okay. It's

47:21

not ideal but it's not the

47:23

end of the end of the

47:25

world. I kind of want to

47:27

pick up on something you mentioned

47:30

quite a while ago actually about

47:32

type checking and sort of like

47:34

that. I'm very much a fan

47:37

of the dynamic typing. I do

47:39

have a background in static programming

47:41

like because I started as a

47:43

mobile developer so I spend a

47:46

lot of time with objectives C

47:48

with Java and with Swift. So

47:50

I do have that background, but

47:53

ever since I kind of switched

47:55

to Ruby, I just love that

47:57

dynamic style and I just find

47:59

it easier to work with, but

48:02

I also get that when it's

48:04

critical infrastructure, the type checking. is

48:06

just almost essential. So I'm curious,

48:09

but why you went with Ruby

48:11

and Rails when the infrastructure is

48:13

so critical and type checking is

48:15

clearly something that's important to you?

48:18

And it's kind of bolted onto

48:20

the language. So what motivated you

48:22

to go with Ruby and Rails

48:25

instead of something that has it

48:27

natively? Yeah. So it is. to

48:29

high degree about the speed and

48:31

the very well-built testing frameworks that

48:34

is around it, right? So even

48:36

if it's not statically typed, you

48:38

can test a lot of things

48:41

and you can test it in

48:43

a lot of ways. Typing is

48:45

just one way of ensuring that

48:48

the data is correct. That doesn't

48:50

necessarily guarantee that the actual data

48:52

you are trying to read in.

48:54

is of the correct format or

48:57

whatever. It just means that once

48:59

you read it in, it will

49:01

fail because it's not the right

49:04

type. So it depends a little

49:06

on what you're trying to do.

49:08

You can also, because it's dynamic,

49:10

you can then sort of do

49:13

things like, okay, you gave, you

49:15

told me it was a CSV.

49:17

And it's obviously not a CSV.

49:20

And it obviously doesn't have a

49:22

string where you told me a

49:24

string was supposed to be. But

49:26

I can see how this can

49:29

look like a string. You have

49:31

these options of making things go

49:33

a little bit faster and a

49:36

little bit smoother because you can

49:38

sort of just fiddle a little

49:40

around with it. What tends to

49:42

happen in these systems as they

49:45

grow older and as they mature

49:47

is that parts of the core

49:49

of the system gets replaced with

49:52

something like Java or rust or

49:54

something like that. So that once

49:56

you have sort of you have

49:58

a really solid part, let's say

50:01

the transfer engine, right, that transfers

50:03

from one account to the other,

50:05

that hooks onto the Swift network.

50:08

Maybe you want to move that

50:10

into Java or something that's more

50:12

standing, more slow, but more type

50:14

robust than more, maybe even performance

50:17

optimized for IOA or whatever it

50:19

is that you need, right? But

50:21

then what tends to happen is

50:24

that you still want the speed

50:26

and ease of using Rubian rails

50:28

and having... Only a few developers

50:30

do a lot of features so

50:33

you can figure out what's good

50:35

or bad or what works or

50:37

doesn't or do a lot of

50:40

development around trying out this new

50:42

standard to verify with the engineers

50:44

that it will in fact test

50:46

correctly with this airplane or you

50:49

know sort of having that capability

50:51

to do feature spikes and to

50:53

do tests or like mini projects.

50:56

It seems to me that that

50:58

is to some degree lost when

51:00

you use a more, well, some

51:02

other language, right? But you are

51:05

right, like once you have it

51:07

down, once you have it locked

51:09

in, once you don't have any

51:12

changes there, what tends to happen

51:14

is it gets replaced with something

51:16

that's faster or better suited for

51:18

the purpose? Yeah, I've seen that

51:21

happened. The reasoning is that you

51:23

can go really fast with quite

51:25

few people and you can actually

51:28

get something that's meaningful that will

51:30

affect people's lives, that will better

51:32

somebody's life, you can get it

51:34

done pretty quickly, right? Like you

51:37

can get a design system for

51:39

to basically do, design some, we're

51:41

not talking like 3D sketches of

51:44

airplanes, that's not necessarily how you

51:46

design all of it. That's just

51:48

the building of it, but you

51:50

also need to reason about the

51:53

logic of who does what, what

51:55

are the processes. And you can

51:57

get something like that build. in

52:00

seven, eight months, right? That's, as

52:02

far as I know, that's, and

52:04

what I could see in the

52:06

market, right? And what happened was

52:09

that we basically went a lot

52:11

faster than everybody else, right? With

52:13

the same amount of errors. Like,

52:16

it seemed that there was no

52:18

real drawback to using Ruby in

52:20

that case, right? it was a

52:22

pure benefit to use the language

52:25

and the framework. Nice, you know,

52:27

there's really nothing that can compare

52:29

to the speed and development of

52:32

rails. It's, I think we kind

52:34

of take it for advantage, like

52:36

for granted, as rails developers, it's

52:39

when you go and look at

52:41

the outside world, is when you

52:43

realize that yeah, this is a

52:45

good tool. Yeah, yeah, it is

52:48

quite insane. Like, I had a

52:50

colleague who did a, you know,

52:52

sort of a... an AI-based feature

52:55

spike, you know, like, oh, can

52:57

we just time box this to

52:59

like three days? And in three

53:01

days we had a tool that

53:04

seems to be working, did integrate

53:06

with AI, had UI, had tests,

53:08

were behind a feature flag and

53:11

was effectively shippable, right? It was

53:13

not, you know, it was not

53:15

the best or the most robust

53:17

or whatever, but like in three

53:20

days a single person made a

53:22

full feature spike that could technically

53:24

be deployed and could work, right?

53:27

That's pretty amazing. I'm curious real

53:29

quick. Like, uh, I'm in my

53:31

experience working with like critical systems

53:33

like this, like once it's built,

53:36

there's like, it's hard to change,

53:38

right? Like, and mostly because like,

53:40

too, the requirements probably don't change

53:43

very frequently either. But like, how,

53:45

how do you like approach in

53:47

those cases like that change? Like,

53:49

is it like, like, build something

53:52

new and cut one off and

53:54

switch to the other or like

53:56

what whatever like what kind of

53:59

systematic approach do you take to

54:01

that? I think so for me

54:03

it's certainly about you have to

54:05

reason about the protocol in the

54:08

process somewhere other than the application.

54:10

So you have to diagram it

54:12

or put it into dance or

54:15

whatever you like to do but

54:17

we need to have a different

54:19

place to talk about it than

54:21

encode because we need to reason

54:24

about when somebody has a change

54:26

we need to be able to

54:28

reason about it before we spend

54:31

time in code and we need

54:33

to figure out if the the

54:35

sort of the signature of that

54:37

particular change let's say you want

54:40

to change one hashing algorithm with

54:42

another hashing algorithm right you need

54:44

to be able to reason if

54:47

that will break the system just

54:49

in principle before you start to

54:51

even try and implement it right

54:53

So I find that it really

54:56

benefits to have it in a

54:58

big diagram or have it written

55:00

out in long form in a

55:03

document or like somewhere that you

55:05

can reason with people who aren't

55:07

developers on whether or not it

55:09

will work or not before you

55:12

even try to implement. Because if

55:14

you can reason that it will

55:16

in fact work, it will plug

55:19

in, it will replace. If you

55:21

can reason about that before you

55:23

actually see the code, when you

55:25

come to the developers, it's a

55:28

much smoother experience to say, okay,

55:30

I need this piece replaced with

55:32

that piece. And yes, the hashing

55:35

algorithm is not the same, but

55:37

it is whatever based on the

55:39

same something, something, so it will

55:41

plug in, right? And then we

55:44

can either have both. if they

55:46

plug well we can replace one

55:48

with the other and do and

55:51

you can also then you need

55:53

to trends or migrate the data

55:55

right? But now that you're migrating

55:57

the data, it's really nice to

56:00

also have that conversation with beforehand

56:02

and with others who are not

56:04

developed. Well, we have existing data

56:07

and you want me to plug

56:09

this thing into this place in

56:11

this big diagram. What happens to

56:13

all the old data that went

56:16

through that point beforehand? Like, what

56:18

do we feel we need to

56:20

do about that? Do we want

56:23

to? revision it and say that

56:25

version less than something can never

56:27

be opened again or can never

56:29

be edited again but can only

56:32

be viewed. Like what's our reasoning

56:34

on that right? So having somewhere

56:36

else to talk about it then

56:39

in code really helps to figure

56:41

out if you should replace, plug

56:43

in or you know make it

56:46

as a different service that you

56:48

call sometimes, you know, whatever it

56:50

is. I find that having something

56:52

other than code really helps. I'm

56:55

still sure, man. Yep. And there,

56:57

okay. So it really needs somewhere

56:59

else to have that conversation, right?

57:02

Yeah, you know, it makes me

57:04

think about the old days of

57:06

Yahoo pipes, like where you could

57:08

visualize and like in real time

57:11

update the data flow of any

57:13

particular aggregate. thing you were trying

57:15

to collect. Are there any tools

57:18

like that that you use to

57:20

like maybe automate this process or

57:22

is it just a matter of

57:24

getting documented? That's a, I mean,

57:27

I've tried a bunch of them,

57:29

I haven't found one that I

57:31

really like, I haven't found one

57:34

that really does it for me.

57:36

I tend to try and make

57:38

them diagrams as code because then

57:40

they can at least get checked

57:43

into Git. and we can have

57:45

this version control on top of

57:47

it. But I haven't really found

57:50

anything that really does it for

57:52

me. I've done, I tend to

57:54

either do. whimsical or draw or

57:56

something like that. And then it

57:59

is just a lot of work

58:01

to keep it maintained and that's

58:03

a that sucks a bit but

58:06

you know it's it's hard to

58:08

it's hard to do without right

58:10

and without somewhere else to reason

58:12

and especially when you need to

58:15

talk to because it's not only

58:17

a technical problem right it is

58:19

also a business problem and it

58:22

is a regulatory problem if I'm

58:24

going to change this piece of

58:26

the testing bet for an airplane

58:28

or this piece of code for

58:31

the design software for an airplane.

58:33

I need to be able to

58:35

have a conversation with somebody who

58:38

is not a software engineer about

58:40

the consequences of that, right? Because

58:42

I need to talk to the

58:44

civil engineer, I need to talk

58:47

to the test manager, you know,

58:49

and I need to talk to

58:51

a lot of people about the

58:54

consequence of doing it and the

58:56

way to do it and are

58:58

there any consequences outside of my

59:00

system. that we need to have

59:03

a conversation about. It is just

59:05

sort of like trying to get

59:07

as many people joining that conversation

59:10

as possible. And for that, it

59:12

seems to work better if it's

59:14

not quite code, because then more

59:16

people can participate in that conversation,

59:19

right? Yeah, I think that makes

59:21

a lot of sense. I'm still

59:23

personally trying to find the silver

59:26

bullet. And that also works quite

59:28

well, actually. It's just, it works

59:30

pretty, it works pretty reasonable, and

59:32

it is definitely diagram as text,

59:35

right? So I've also used that

59:37

a ton, and it's decent enough.

59:39

I find that it has some

59:42

problems when you get up to

59:44

really large size stuff, like it's

59:46

hard to get enough in there

59:48

and still have it be. viewable

59:51

and understandable as a human. But

59:53

I mean a lot of like

59:55

building these systems and a lot

59:58

of participating in building them is

1:00:00

surprisingly not about code. It's about

1:00:02

talking to a bunch of people

1:00:04

who have nothing to do with

1:00:07

software development and figuring out if

1:00:09

you're going to break their lives,

1:00:11

right? Like are you going to

1:00:14

break something completely insane that you

1:00:16

had no idea that you ever

1:00:18

were ever going to touch? you

1:00:20

know, in the case of this,

1:00:23

well, I'm going to change this

1:00:25

thing in my design software. And

1:00:27

then suddenly somebody in the factory

1:00:30

somewhere is totally confused about how

1:00:32

to build an airplane because I

1:00:34

did something that, you know, so

1:00:37

it's really not that much of

1:00:39

a software challenge. I mean, it

1:00:41

is, but it is to high

1:00:43

degree a communication challenge and sort

1:00:46

of like, how do we even

1:00:48

communicate what this software does? to

1:00:50

people so that they can use

1:00:53

it and so we can reason

1:00:55

about the safety of it together,

1:00:57

right? Yeah, it makes sense in

1:00:59

the, I mean, I've worked on

1:01:02

things at this level of complexity

1:01:04

that you have to get right.

1:01:06

So I worked at Morgan Stanley

1:01:09

and I mean, we weren't doing

1:01:11

like banking level stuff, but we

1:01:13

were doing like investment level and

1:01:15

business information stuff, right? Yeah, the

1:01:18

world didn't end if we got

1:01:20

it wrong, but we kind of

1:01:22

needed it to get right. And

1:01:25

a lot of it was just

1:01:27

a matter of, like you said,

1:01:29

making sure that all the people

1:01:31

who understand all of the concerns

1:01:34

and all the things that it

1:01:36

touched are able to weigh in

1:01:38

and be part of the conversation.

1:01:41

And that way, yeah, you don't

1:01:43

do things without understanding the implications

1:01:45

of how it's going to ripple.

1:01:47

I'm working a contract now and...

1:01:50

You know, I'm still trying to

1:01:52

figure out the ins and outs

1:01:54

of the system and they're they're

1:01:57

managing funds and stuff like that

1:01:59

right and so Yeah, I'm definitely

1:02:01

feeling it here where I don't

1:02:03

want to make any changes that

1:02:06

ripple through the system and Right

1:02:08

and so this is where you

1:02:10

when you're talking about like testing

1:02:13

and documentation and things like that

1:02:15

where the documentation really isn't around

1:02:17

and there are a lot of

1:02:19

other things I wind up having

1:02:22

to ask a lot of questions

1:02:24

and I'm still not sure that

1:02:26

all my assumptions are correct. So

1:02:29

Yeah, a lot of this really

1:02:31

helps in the sense of oh,

1:02:33

okay If we're going to nail

1:02:35

down robust, you know, reliable things,

1:02:38

then yeah, you know, all of

1:02:40

these things are important. And I

1:02:42

think part of my issue with

1:02:45

some of it is just that

1:02:47

I like to just get in

1:02:49

and solve problems, right? I'm, my

1:02:51

mentality, I was talking to some

1:02:54

other friends the other day, and

1:02:56

my mentality is go, go, go,

1:02:58

go, go, go, go, go, go,

1:03:01

go, go. And so, yeah, having

1:03:03

to slow down, and you know,

1:03:05

dot all my, I joke and

1:03:07

say I dot all my T's

1:03:10

across all my eyes. It just,

1:03:12

it's, you know, it's, it's not

1:03:14

my natural state. And I think

1:03:17

a lot of developers, yeah, they

1:03:19

just, they just want to write

1:03:21

great code that solves problems. And

1:03:23

so the meetings are tedious, the

1:03:26

conversations are boring, you know, and,

1:03:28

you know, why can't I just

1:03:30

go in and just. make it

1:03:33

work and the reality is is,

1:03:35

you know, yeah, what we're talking

1:03:37

about here. And so I think,

1:03:39

I think it's not just we

1:03:42

have these specific concerns, whether the

1:03:44

regulatory or something else, I think

1:03:46

it's also that there's enough complexity

1:03:49

to it to where you really

1:03:51

do have to get in and

1:03:53

understand the nuance of what you're

1:03:55

doing. Yeah, and I think also

1:03:58

the breadth of what you're doing,

1:04:00

right, like I know this for

1:04:02

myself, right when I was younger

1:04:05

and, It started developing code radio

1:04:07

as well. like well there's only

1:04:09

one truth right like either it's

1:04:11

one plus one is two or

1:04:14

it's wrong right but that's just

1:04:16

not the case when you have

1:04:18

these really big connected systems right

1:04:21

where like well what happens if

1:04:23

I change this protocol well now

1:04:25

it's right because it's a different

1:04:27

protocol but now it's wrong because

1:04:30

it's a different protocol so it

1:04:32

can be both at the same

1:04:34

time right because it's because now

1:04:37

you know all the other people

1:04:39

who used it for one protocol

1:04:41

can't use the other and like

1:04:44

it just gets really messy. I

1:04:46

think at some point I realized

1:04:48

that I liked doing documentation and

1:04:50

that really helped to sort of

1:04:53

make me be confident that this

1:04:55

could be somewhere you can do

1:04:57

a career like you can do

1:05:00

a career and something that's not

1:05:02

obviously developer-ish territory right like because

1:05:04

I actually enjoyed doing like architecture

1:05:06

diagrams and reasoning outside of the

1:05:09

code and all of these things

1:05:11

I found was pretty interesting and

1:05:13

that makes it easier for to

1:05:16

be me right like it's more

1:05:18

fun to have that conversation with

1:05:20

everybody to figure out well if

1:05:22

we do this thing over there

1:05:25

in wherever we are operating in

1:05:27

Australia that's fine but now we've

1:05:29

done this change so what happens?

1:05:32

to our operations in Austria. Like,

1:05:34

is that the same tax system?

1:05:36

Can we do both? Like, it

1:05:38

can become really complicated when you

1:05:41

have, when you're operating under multiple

1:05:43

jurisdictions and multiple governance, right? Then

1:05:45

that can become complicated as well.

1:05:48

And, you know, you're doing currency

1:05:50

conversions or you're doing unit conversions

1:05:52

or you're doing all of these

1:05:54

things. Like, it's so hard that.

1:05:57

I know that even the space

1:05:59

agencies are getting it wrong and

1:06:01

sometimes there's stuff just won't work

1:06:04

when you get it into space,

1:06:06

right? Because somebody misconverted inches to

1:06:08

centimeters, right? And so it is

1:06:10

just, and that should like, if

1:06:13

you go to a, a freight

1:06:15

out of college developer and says

1:06:17

to him that I need a

1:06:20

unit conversion system, a unit conversion

1:06:22

method that can go from inches

1:06:24

to centimeters. That's pretty straightforward. That's

1:06:29

a pretty straightforward ask, right? And

1:06:31

you can do that method pretty

1:06:33

quickly. It's not really super hard.

1:06:35

What is really super hard is

1:06:38

getting people to use it, right?

1:06:40

So you need to build a

1:06:42

unit conversion method that is easy

1:06:44

to use, fun to use, at

1:06:46

hand when you need to use

1:06:49

it. so that you will in

1:06:51

fact use it because otherwise you're

1:06:53

going to do it in your

1:06:55

head and then it doesn't really

1:06:57

matter that you build a piece

1:07:00

of software right so like it

1:07:02

there's a lot of other components

1:07:04

to to this than just the

1:07:06

software like there's a lot of

1:07:08

things like you know there's a

1:07:11

lot of backup a lot of

1:07:13

everything but it is also about

1:07:15

making sure that the people who

1:07:17

use it use it use it

1:07:19

correctly and the way to do

1:07:22

that like we talked about before

1:07:24

like with the TSB and everything

1:07:26

it's not to blame the person

1:07:28

for not using the thing. It's

1:07:30

to blame the thing for not

1:07:33

being available when it was needed,

1:07:35

right? So you need to be

1:07:37

like, if I have a unit

1:07:39

conversion thing and it's hidden behind,

1:07:41

you know, a multiple three dot

1:07:44

options that you need to figure

1:07:46

out five levels in, that's the

1:07:48

wrong place to have it then,

1:07:50

right? You don't blame the person

1:07:52

for not using it, you blame

1:07:55

the system for not putting it

1:07:57

in his face when he needed

1:07:59

to convert the measurement. I like

1:08:01

I like that. Just from the

1:08:03

standpoint of. I mean. I guess

1:08:06

I guess. where my brain goes

1:08:08

is, is everybody has the responsibility

1:08:10

to understand the system and how

1:08:12

it works, right? And so everybody

1:08:14

has the responsibility then to, you

1:08:16

know, to be aware that this

1:08:19

method exists, but at the same

1:08:21

time, if I create it, then

1:08:23

it's also my responsibility to make

1:08:25

sure everybody knows it's there and

1:08:27

knows how to use it. And...

1:08:30

I also agree though that if

1:08:32

you make it easy or natural

1:08:34

to do the right thing, then

1:08:36

people will generally do the right

1:08:38

thing. Yeah. And so yeah, I

1:08:41

think I agree with you, but

1:08:43

I don't want to absolve anybody

1:08:45

of the responsibility of learning to

1:08:47

do the right thing either. No,

1:08:49

no. I mean, that's not what

1:08:52

I mean. You can you can

1:08:54

absolutely end up being blamed for

1:08:56

crashing a plane. Like it's not.

1:08:58

entirely out of the realms of

1:09:00

like the pilot can be blamed,

1:09:03

right? But it is also about

1:09:05

looking at did we actually provide

1:09:07

the correct tooling at the correct

1:09:09

time with the correct intensity and

1:09:11

all of this, right? And it's

1:09:14

the same here like, well, the

1:09:16

system didn't work. Did we provide

1:09:18

enough? Did we scale enough? Did

1:09:20

we have enough compute resources? Did

1:09:22

we have enough database storage? Was

1:09:25

it? just so slow that people

1:09:27

couldn't use it and it crashed

1:09:29

and somebody couldn't get their vote

1:09:31

in because if somebody couldn't get

1:09:33

their vote in then you know

1:09:36

we sort of we get into

1:09:38

the territory of oh somebody prevented

1:09:40

me from voting the situation right

1:09:42

so it like yeah they could

1:09:44

have done it again like they

1:09:47

could have just waited five minutes

1:09:49

till the peak was down and

1:09:51

voted again but that's like it's

1:09:53

also not really their fault right

1:09:55

so It's there's a lot of

1:09:58

there's a lot of sort of

1:10:00

like ancillary non-developer stuff to talk

1:10:02

about when when designing I'm pretty

1:10:04

sure there is on all systems

1:10:06

right? But the fun thing here

1:10:09

is just that this happens to

1:10:11

include other engineers, which is very

1:10:13

fun. And it happens to include

1:10:15

things like cryptographers and people who

1:10:17

actually like politicians or whatever it

1:10:20

is. It's just I like the

1:10:22

types of people that I get

1:10:24

to talk and interact with in

1:10:26

this rather than I get to

1:10:28

talk. less with marketing and social

1:10:31

media and more with like people

1:10:33

who build spaceships and airplanes and

1:10:35

I find that that that's basically

1:10:37

what drew me here right? Is

1:10:39

this idea that I get to

1:10:42

talk to other people who also

1:10:44

have this engineering spirit and this

1:10:46

idea to build something in the

1:10:48

same mindset that I do? Awesome.

1:10:50

All right well I think we're

1:10:53

going to go to PICS because

1:10:55

we've... We've been talking for an

1:10:57

hour and 15 minutes. This is

1:10:59

cool though. If people want to

1:11:01

connect with you or if they

1:11:04

have questions about what you're doing,

1:11:06

you know, maybe you want to

1:11:08

pick your brain about some of

1:11:10

this stuff. How do they find

1:11:12

you on the internet? I think

1:11:14

go to LinkedIn. Let's, I've more

1:11:17

or less tried to absolve myself

1:11:19

of all social media. So LinkedIn

1:11:21

is probably your best bet. It's

1:11:23

my name. It's right there on

1:11:25

the screeny thing. There it is.

1:11:28

And then also go go on

1:11:30

Discord. You can ping me there,

1:11:32

PM me, like you did. I'm

1:11:34

both on the Kamal, the Rails,

1:11:36

and the Ruby servers. So you

1:11:39

can just go find me there.

1:11:41

It's E-K-A-M-P-P, such as my initial

1:11:43

letter and my last name. Nice.

1:11:45

I didn't know that there were

1:11:47

Ruby and Rails. I'll have to

1:11:50

go find those. I

1:11:52

can I can send you invite links

1:11:54

that that would be perfect cool all

1:11:57

right there is one for like rails

1:11:59

develop that's the rails one and then

1:12:01

there is one for Ruby which is

1:12:03

more like application support and like oh

1:12:05

I don't understand what this method does

1:12:08

or I need to change this whereas

1:12:10

the rails one is more for like

1:12:12

I need approvals or reviews of PRs

1:12:14

for the actual core right so that's

1:12:17

more about supporting of that so it's

1:12:19

less interesting if you're trying to solve

1:12:21

a business problem but it is kind

1:12:23

of cool if you want to just

1:12:26

peek at what the others are doing.

1:12:29

Nice. Okay. Well, let's go

1:12:31

ahead and do some picks.

1:12:33

Valentino. Do you want to

1:12:35

start us with picks? Sure.

1:12:38

I've got nothing but AI

1:12:40

picks today. There's been a

1:12:42

lot of activity in the

1:12:44

Ruby world. Andrew Kane has

1:12:47

released yet another AI gem.

1:12:49

Bless his heart. It's called

1:12:51

Informers. And it basically lets

1:12:53

you run inference in Ruby.

1:12:56

on onyx models. So lots

1:12:58

of hugging face models are

1:13:00

onyx supported and you can

1:13:02

now just run inference with

1:13:05

those. And he also has

1:13:07

Transformers RB if you are

1:13:09

interested in running inference on

1:13:11

non-onics models. So now we

1:13:14

have like a complete picture.

1:13:16

Hopefully there are some... Some

1:13:19

missing pieces still for larger

1:13:21

models, but it has a

1:13:23

ton of pipelines already built

1:13:25

in. So I would suggest

1:13:27

checking that out. The next

1:13:29

pick, somebody built this awesome

1:13:31

chat app where they've aggregated

1:13:33

all of the rails and

1:13:35

Ruby like articles and blogs

1:13:37

and guides and everything like

1:13:39

that. So you can basically

1:13:41

rag the entire rails community

1:13:43

ecosystem. in a chat gPT

1:13:45

style interface and it's it's

1:13:47

remarkable and it does like

1:13:49

citations and everything like that

1:13:51

so you can see the

1:13:53

original article that referenced whatever

1:13:55

it was you're interested in.

1:13:57

It's really awesome. It's called

1:13:59

Ship on Rail's and it's

1:14:01

built with this really cool

1:14:03

tool called Nasea which provides

1:14:05

basically like a rails app

1:14:07

ready to go so that

1:14:10

you can ingest your own

1:14:12

documents to rag against and

1:14:14

do a very similar thing.

1:14:16

It's really cool so I'd

1:14:18

recommend checking all those out.

1:14:20

Nice. How about you Ayush?

1:14:22

Not sure what to take

1:14:24

for PICS this this week.

1:14:26

I haven't really thought of

1:14:28

anything. It's a cheap one,

1:14:30

but I'm going to go

1:14:32

with Blue Sky because I'm

1:14:34

quite enjoying Blue Sky in

1:14:36

the last week because I've

1:14:38

finally signed up for it

1:14:40

and a lot of Ruby

1:14:42

folks have signed up recently.

1:14:44

It's quite a lot of

1:14:46

activity on there. I'm quite

1:14:48

quite enjoying it on the

1:14:50

social network. Hopefully it can

1:14:52

stay. The way it is,

1:14:54

I'm active on both Blue

1:14:56

Sky and Masterdown for now,

1:14:58

but yeah, we'll see what

1:15:00

happens because Blue Sky is

1:15:02

still a VC-funded, privately held

1:15:04

company, so we'll have to

1:15:06

see how long things remain

1:15:08

good, but for now I'm

1:15:10

quite, quite happy with it.

1:15:12

What else can I pick?

1:15:14

I haven't really watched anything

1:15:16

or anything new recently, because

1:15:18

I think I had picked

1:15:20

a TV show shrinking shrinking,

1:15:22

which I did. the last

1:15:24

time so I don't want

1:15:26

to pick that again. I'll

1:15:28

go with a music pick

1:15:30

because I always go with

1:15:32

a music pick when I'm

1:15:34

struggling. What's in front of

1:15:36

me? The new Tias for

1:15:39

Fears album. Check this one

1:15:41

out. It's really good. It's

1:15:43

a live album with a

1:15:45

few new songs from 80s

1:15:47

pop band Tias for Fears.

1:15:49

So yeah, I'll think I'll

1:15:51

go with those. Anyway.

1:15:54

Let's see. I'm going to throw

1:15:57

in some picks. So I played.

1:15:59

I played a new game. I

1:16:01

actually played a couple of new

1:16:04

games this week. Because the game

1:16:06

convention that I usually teach games

1:16:09

at is going to be on

1:16:11

Saturday. And so I need to

1:16:13

be able to teach these games.

1:16:16

So I'm going to pick one

1:16:18

of those. It's called MLEEM. MELEM.

1:16:21

MELEM. And essentially what it is,

1:16:23

is it's, it's cat astronauts. And

1:16:25

the way that it works, it's

1:16:28

a relatively simple game. It was

1:16:30

almost too simple for me to

1:16:33

be honest. But if you're kind

1:16:35

of a casual board gamer, right,

1:16:37

it's definitely approachable. Let me pull

1:16:40

it up on board game geek

1:16:42

But yeah, so what the way

1:16:44

that it works is you have

1:16:47

Astronaut cats that are Going going

1:16:49

into space and they're basically occupying

1:16:52

planets and moons and so you

1:16:54

pick one of your Your cats

1:16:56

it on the rocket and somebody's

1:16:59

the captain and somebody's the captain

1:17:01

and somebody's the captain and they

1:17:04

roll the captain and somebody's the

1:17:06

captain and they roll the captain

1:17:08

and they roll the captain and

1:17:11

they roll the captain and they

1:17:13

roll the captain and they roll

1:17:16

the captain and they roll the

1:17:18

captain and they roll the captain

1:17:20

and they roll the captain and

1:17:23

they roll the captain and then

1:17:25

And if the dice match what's

1:17:28

on the space on the board

1:17:30

that you're on, then you can

1:17:32

choose which dice to use in

1:17:35

order to move up the board,

1:17:37

right? And so if you have

1:17:40

boosters, boosters move you up for

1:17:42

free. The other ones, you have

1:17:44

to give up the dice in

1:17:47

order to move. And so if

1:17:49

you ever get to the point

1:17:52

where you roll the dice and

1:17:54

you... You can't use any of

1:17:56

the numbers, then you can't use

1:17:59

the ship. And at

1:18:01

any point, people can get

1:18:03

off the ships onto moons

1:18:05

or planets. And you get points

1:18:08

for having the most cats

1:18:10

on planets. You get points

1:18:12

for every moon you occupy.

1:18:14

If you go away to

1:18:16

deep space, then you get

1:18:18

bonuses for that. And

1:18:21

then the different cats have

1:18:23

different abilities, right?

1:18:25

One of the cats lets you start

1:18:28

further up the board. One of the

1:18:30

cats lets you, you know, lets you

1:18:32

get off the ship after it crashes,

1:18:34

right? So you can go to the

1:18:36

planet, it's next to, or whatever, when

1:18:39

it crashes. One of them gives

1:18:41

you a bonus, doubles your points

1:18:43

for the planet, it's on, one

1:18:45

of them doubles the points for

1:18:47

the moon, it's gone, it's on.

1:18:49

Anyway, you get the idea. One

1:18:51

of them doubles the points if

1:18:54

you're in deep space. We got

1:18:56

close a couple times. But then I

1:18:58

was talking to some other people who had

1:19:00

played it a couple of other times and

1:19:02

one of the times they played they made

1:19:04

it to you space like three or four

1:19:06

times. So anyway, so if you're the

1:19:09

captain you're rolling and then you just

1:19:11

rotate who the captain is. If the

1:19:13

captain gets off the ship then the next

1:19:16

person then line just finishes out

1:19:18

that round. Anyway, that's basically the

1:19:20

game. Board Game Geek has it as a

1:19:22

one point 68 weight. It says ages

1:19:25

eight plus. And yeah, I have

1:19:27

an eight year old. She

1:19:29

could definitely play it. It

1:19:31

says 30 to 60 minutes.

1:19:33

That's probably about accurate place

1:19:36

two to five players. I

1:19:38

played it with four players

1:19:41

and that felt pretty good.

1:19:43

So it's MLEM, L-E-M space

1:19:46

agency. And yeah, anyway, check

1:19:48

it out. And then I'll just

1:19:50

put a link in the

1:19:52

comments here. And

1:19:59

then Let's see. I'm not sure

1:20:01

if I really have any other picks.

1:20:04

I know I've kind of been

1:20:06

doing other things and getting

1:20:08

involved in other things, but

1:20:10

I guess the big thing that

1:20:13

I went through this lately is

1:20:15

I went up to a retreat

1:20:17

up in Sundance, which is actually

1:20:20

like 45 minutes from here.

1:20:22

You heard of the Sundance

1:20:24

film festival, they do

1:20:26

actually do that in

1:20:28

Park City. not in

1:20:30

Sunnets, but from here it's

1:20:32

about two-thirds of the way to

1:20:35

Park City. And anyway, it's

1:20:37

up Provo Canyon and these

1:20:39

guys were running essentially

1:20:42

a mastermind for three

1:20:44

days for Christian

1:20:46

entrepreneurs. And so we did

1:20:48

a lot of faith-based stuff, we

1:20:51

did a lot of

1:20:53

business-based stuff. And it was

1:20:55

amazing because they just kind

1:20:57

of... Help me get clarity on

1:21:00

what I want to do and who

1:21:02

I want to be and what kind

1:21:04

of difference I want to make

1:21:06

So Just keep an eye out because

1:21:09

I have stuff in the works But

1:21:11

it was terrific and I

1:21:13

really want to just put forward

1:21:15

I guess that just connecting

1:21:17

with other people who are doing

1:21:20

what you're doing or who are

1:21:22

learning what you're learning or who

1:21:24

are? maybe a little ahead of

1:21:26

you on on the path you

1:21:28

want to go down. So helpful,

1:21:31

so, so helpful. You know, kind

1:21:33

of like we were talking

1:21:35

about with like the discord

1:21:37

servers, right? So much help,

1:21:39

helpful stuff there. So

1:21:42

anyway, those are my picks. Emil,

1:21:44

what are your picks? And so

1:21:46

recently, I'm going to pick a

1:21:48

book. I recently read a book

1:21:51

called how big things gets done.

1:21:53

And it's by a, by a Danish

1:21:55

guy called Pet Flubia. So what he

1:21:57

did was that he went, I don't

1:21:59

know. I don't know if you

1:22:01

guys know it, but he went

1:22:04

through statistical data on overruns on

1:22:06

big projects, like how far behind

1:22:08

is an IT project in general?

1:22:10

How much of an overrun on

1:22:13

cost do you get? How much

1:22:15

of an overrun on time do

1:22:17

you get? And he goes through

1:22:20

sort of like these different industries

1:22:22

and different factors that play into

1:22:24

why big things fail and why

1:22:26

some big things get done? What

1:22:29

are the ways to make sure

1:22:31

that big things get stuck? And

1:22:33

what are the pitfalls and everything?

1:22:35

And he goes through everything from

1:22:38

the Sydney House, Sydney Opera House

1:22:40

to like big government IT projects

1:22:42

that fail. It's just super cool

1:22:44

because it's various sort of data

1:22:47

driven and he has spent his

1:22:49

career collecting data on why big

1:22:51

projects fail, why all kinds of

1:22:53

projects fail. So it's a really

1:22:56

interesting sort of. window into do

1:22:58

this if you really want to

1:23:00

mess it up. So by inversion,

1:23:03

if you don't want to mess

1:23:05

it up, don't do all of

1:23:07

this. Do the other thing, right?

1:23:09

That's kind of an interesting statistics

1:23:12

to have. And so yeah, how

1:23:14

big things gets done. I found

1:23:16

that was really cool. Awesome. All

1:23:18

right, well, thanks for coming Emil.

1:23:21

We're going to go ahead and

1:23:23

wrap it here. Thank you for

1:23:25

having me. It was a pleasure.

1:23:27

And until next time, Max out.

Rate

Join Podchaser to...

  • Rate podcasts and episodes
  • Follow podcasts and creators
  • Create podcast and episode lists
  • & much more

Episode Tags

Do you host or manage this podcast?
Claim and edit this page to your liking.
,

Unlock more with Podchaser Pro

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