All Episodes

June 23, 2025 49 mins
Mark as Played
Transcript

Episode Transcript

Available transcripts are automatically generated. Complete accuracy is not guaranteed.
Jonathan Hall (00:00):
The show is supported by you, our listener.

(00:01):
Stick around till a little bitlater to learn more about that.
This is Cup of Go for06/20/2025. Keep up to date with
the important happenings in theGo community in about

Shay Nehmad (00:20):
fifteen minutes per week. I'm Jonathan Hall. And I'm
Shay Nehmad.

Jonathan Hall (00:25):
Hi, Shayne. It's been a while.

Shay Nehmad (00:26):
Hey. Yeah. I'm very happy to have you back on this
show. It's so difficult to do iton my own. Yes.
My appreciation for you doing ityourself in the past has
increased.

Jonathan Hall (00:39):
I've only done it once, and that will be the last
time.

Shay Nehmad (00:43):
You know what? I think I could I I I have, like,
once a year. You have a once ayear ticket to be like, oh, I
can make it do it on your own.Yeah. We have a pretty cool
episode.
We combed through the proposals,and there wasn't anything super
critical. So, we have some moreconversation y conversations,

(01:03):
today and an interview with,Redawan. You might remember we
mentioned his, DI blog post awhile ago. Oh, yeah.

Jonathan Hall (01:11):
This blog post comes from Redawan Delaware. It
is called You Probably Don'tNeed a DI Framework. And I have
to say I was very happy to readthis not because of the content
per se or the opinion itexpresses, but because it
explained to me what a DIframework does in Go. I've been
wondering this for a long timeas I've never used one. And I I

(01:31):
do agree with the conclusionthat that aside.
Now I do agree with theconclusion that you don't need
one. I've never used one.Therefore, I don't and I do
dependency injection all thetime.

Shay Nehmad (01:40):
So we'll be talking to him at the interview part
interview portion of the show.But I wanna start with the 125 r
c one has been released. Woohoo. RC stands for release
candidate. We mentioned this,like, every six months or so
because every six months or so,there's a new major version.
What what does release candidatemean?

Jonathan Hall (02:00):
Well, it means that as far as we know, as far
as the Go team knows, this isready to be released, but
there's certainly a chance thatthey're missing something and
where they want it to be tested.So if they find a showstopper,
then RC2 will be released afterthey fix that showstopper. If no
showstoppers are fined andfound, then this will eventually
become Go 1.25.

Shay Nehmad (02:20):
And the cool thing here is how they they'll just,
like, use it, put it in theproduction load test and the
unit test. Like, nobody'ssuggesting put it in production
yet. Yeah. If you already haveGo installed, there's a very
easy way to install that thisspecific version with Go

(02:40):
directive. So it's Go install,and then you point it at, like,
the latest version of one twentyfive r c one, and then you go
do, like, a Go one twenty five rc one download, and you got it.
Now in the notes from Cherry andCarlos, they're like, to find
out what changed in Go onetwenty five, read the draft
release notes. Right? Mhmm.Which is usually where like, I

(03:02):
don't know, two years ago, ifyou asked me, where do you know
what's new in Go in the newversion, that's where I would
go. Right?
And it mentions things we talkedabout, like the container aware
GOMEX procs and the tea garbagecollector, things we actually
mentioned on the show in-depth,which is why I feel comfortable
skimming over them. And somethings we missed, like the

(03:25):
unhandled panics. Oh, yeah. Butthat's not a huge deal. The main
thing I'm pointing towards andhinting towards, ham ham Anton,
is that Anton didn't release hisversion of the Go release notes
yet.
The actually useful ones withthe examples.

Jonathan Hall (03:43):
The interactive one. Yeah.

Shay Nehmad (03:45):
Yeah. And so we, had Anton on the show, actually.

Anton (03:49):
My name is Anton. I do some open source stuff, and, I
write, interactive, maybe I cancall them guides or books and,
interactive articles on my blog.That's mostly what I do in my
free time. So that's it.

Shay Nehmad (04:05):
So I've been using this I don't know. Have you been
using these release notesinstead of the official ones?

Jonathan Hall (04:11):
I wouldn't say instead of, but in addition to
sometimes. Yes.

Shay Nehmad (04:14):
I know. I would say instead of. It's much easier for
me to read this than theofficial Go blog. And one twenty
five hasn't been released yet.So you'll you'll have to stick
just with one source of, newsabout the changes.
Actually, two because we alsotell you about it. Right? How
does, you know, running RC anyRC worked out for you in the

(04:37):
past?

Jonathan Hall (04:37):
I haven't done it a whole lot, but I've never I've
never found a bug by doing it.So

Shay Nehmad (04:42):
Yeah. That's the same for me. Like, I really
always hope to find the problemand be, like, the one hero
that's like Mhmm. Oh, here's thecrazy compiler bug. But it just
works for me.
I guess I don't do anything, tooout of the ordinary with Go yet.
So r c, one twenty five, r Cone. I guess this is a pretty

(05:02):
easy way to try to contribute tothe Go community. Just run it
and see if it works.

Jonathan Hall (05:08):
I'm curious if there's anything in 125 in
particular you're lookingforward to, Shay.

Shay Nehmad (05:12):
I'm actually looking looking forward to is
kinda weird to say about thegarbage collector. Okay. But I'm
I'm excited about theexperiment. Like, making the
language better just behind thescenes for me and just making
everything faster is the sort ofsilent, maintenance work that
I'm very excited about. I likethe new vet of analyzers that

(05:38):
will replace all the, host port,for, like, constructing
addresses because that's a codereview comment I always give
people.
They're like, hey. You need touse net dot join host port
because this will not work in Ip v six. Now it's built into
Vet. And obviously, all the, youknow, the there's a lot of small

(06:02):
changes that I'm pretty sure I Iwon't notice until I have to use
them. This version is not, like,groundbreaking, you know what I
mean, generics introduced oranything like that, at least not
that I'm, aware of.

Jonathan Hall (06:16):
I feel like the last maybe three or four
versions have had have hadbigger changes. You know,
introduction of SLOG and and newtesting things. And I I don't
remember what they all were, butI do feel like this is a fairly
low key upgrade. Having saidthat though, the one thing I am
excited about for this versionis the introduction of testing

(06:37):
sync test, which was already in01/2024 as an experiment. That
experimental flag is beingremoved.
It's going full fledged in01/2025 with just a couple minor
changes. So that's that's prettycool. That's something I will
use. I won't use it all thetime, but there's been at least
once or twice in the last sixmonths. I was like, I wish I
could use that, but I don'twanna enable experiments.
So it'll be a nice thing to havethat.

Shay Nehmad (06:57):
Yeah. And there's a ton of changes in, crypto Of
course. Including the FIPS mode,which we mentioned, which I'm
not excited about because I'mnot implementing any government
level, applications. I'm gladit's there,

Jonathan Hall (07:11):
but it won't affect me personally.

Shay Nehmad (07:13):
Yes. But I am excited that it is there because
it makes it, it makes proposingGo as a back end language in
enterprise context, especially bto b enterprise context, much,
much stronger. Like, you know,there's usually the argument of,
oh, let's use some annoying, youknow, dynamic language like
Python or TypeScript because wecould move fast. And here's

(07:35):
like, okay, but there's gonna belike a nine month long project
in two years from now making ourTypeScript app FIPS compliant so
we can sell to to thegovernment. Like, OpenAI is
selling to the government rightnow.
They just closed a huge deal. Ijust saw it on the news this
morning. And like, oh, if youuse go. We just get it built in.

(07:55):
Like, no problem.
So I don't know. I I am excitedabout the the concept of having
this argument when I debatewhether to use Go or not in
future endeavors. Just arming mewith a bit more ammunition to
fight the good fight. Cool. Sothat's one twenty five.
That's what I'm excited about. Iagree with you that it's less

(08:16):
groundbreaking e, and I thinkthat's good. Like, you can't you
you need some releases that arejust, like, improvements. You
can't always do the new things.

Jonathan Hall (08:24):
All right. As you said, we're gonna be a little
more discussion y today than weoften are. I found a post I
found it on Reddit, but it's aregular blog post, so we can
find it other places too, calledGo should be more opinionated.
And I thought this was a littlebit of an interesting take. One
of the perks of being a Godeveloper expert is the
incredible opportunities itprovides.

(08:45):
A few weeks ago, I, the authorof the post, had the opportunity
to meet Robert Gressamere andMark Dougherty, dev advocate for
the Go team. And at happy hourat Google IO, Mark asked me and
others from Korea for feedback,his response was that he didn't
have any specific feedback, buthe thought Go should be more
opinionated about theapplication layout, which at

(09:07):
first it said that the title isGhost should be more
opinionated. I'm like, maybethat's true. And then here it's
Ghost should more opinionatedabout the application layout.
And I'm like, maybe that's true,but I have very different ideas
about what that means versus thetitle.
Anyway, I thought it was aninteresting opinion. And I don't
I can't decide if I agree ornot. But the TLDR, it's not a

(09:27):
long post. You could read it inthe time I'm talking about it
really. But the TLDR is that theauthor believes that Go should
have stronger opinions about thestructure, the file layout of a
Go project.
And we've talked very brieflyabout this long ago. I don't
even remember what episode itwas in because we were talking
about some other blog postsprobably. I'm kind of curious,

(09:49):
though, Shai, what you thinkabout this. Like like, is it
nice that sort of the sky's thelimit with a in terms of your
your project layout or or issomething more structured called
for?

Shay Nehmad (10:02):
I don't think it's nice. I think it's actually
toil, like unnecessarily toil.Mhmm. And, you know, it's the
sort of thing that I don't wannawaste my time thinking about. If
objectively there isn't oneproject layout that's perfect
because not all projects are thesame.
Right. I'll say that. So to getthat out of the way, but, you
know, like if I want a projectwith a few libraries and the

(10:25):
libraries are a 100% internal tomy company, but I want them
maintained by different teamsand I want different release
cadences and I need to be ableto release them separately.
These are like my requirements.And then my wants are I want
this to be in a mono repo.
I want this I need like thesebuild steps to happen before it.
I don't know, protobufcompilation and REST API

(10:46):
verification and Go generate.Right? Like, here are a few
build steps I wanna configureahead of time. I I sorta know
how I would structure that appnow.
And on the other end, if you'redeveloping like a COBRA
application, right, COBRA hasits own project layout for
stuff. Right? Because it hascommands and things like that. I

(11:07):
don't wanna waste time thinkingabout this stuff. And also, want
it to be very simple.
Like, I don't want a ton ofdirectories that have a ton of
hidden meaning or whatever.Like, the simpler, the better. I
haven't thought about it toomuch because I've been working
in frameworks that solve it forme. Like with Python, I've been
using UV and you just do UV init and it starts the whole thing

(11:28):
for you and you don't have youdon't question. Like here's the
source directory, here's thetest directory and that's just
how you work.
And even more structured inNestJS, you have like, okay, so
every directory is a module andevery module has these files
next to it. And if you don'tname the directories exactly as
the framework expects, you know,it just doesn't work. Or Next.

(11:50):
Js front end application, that'seven worse. The the paths are
part of the URL, like you youcan't escape it.
On the one hand, it's annoyingbecause I have to, like,
remember what the frameworkexpects, but on the other hand,
I I don't spend a lot of time,like, thinking or arguing with
my team, is this laid outcorrectly or not? So when you're
talking about functional projectlayouts, things that make the

(12:11):
project work, the simpler, thebetter. You're talking about
thinking about how the layoutactually impacts, like, binary,
the delivery, like, want this tobe separate library or I want
this to be whatever. I thinkthat more examples could be
better. I've never, for example,been able to make go dot work
work on the first, like, Yeah.
Uh-huh. These things tend to bedifficult, and there is a bit

(12:35):
too much, freedom here. And Iwish that, like, Go was more
opinionated about it, But youknow, Go is it's a lot of
things, but one thing is forsure. It works in Google, right?
They sort of expect you tobehave like Google and invest a
ton of time into extra buildtooling to make stuff work.

Jonathan Hall (12:55):
Yeah. I agree with a lot of what you said. I'm
a little torn though. Like, isit the place for the language to
have that opinion or is that aplace for a framework? And then
of course that leads to thesecond question of, don't we
hate frameworks in Go?
So if we're going to eschewframeworks, don't we need an
alternative to answer these sortof questions for us? I don't
have a good answer. So Idefinitely appreciate the

(13:16):
opinionated structure. On theother hand, I can't imagine a
single structure to rule themall that would work for all
types of Go applications. So,yeah, I don't know.
I I sympathize with the author.I don't know if Go language is
the place for those opinions toexist, but but maybe it is. I
don't know.

Shay Nehmad (13:31):
You know, there's a a blog post about how to do
structured logging. Right?

Jonathan Hall (13:37):
Mhmm.

Shay Nehmad (13:38):
Structured logging with SLOG. It's in the standard
library. If you go to the Go devblog, you can find it. Right?
Yeah.
There is how to do, reproducibleGo tool chains. Right? Although
you could have done that with aseparate tool, a shell script
and your own thing. Right?

Jonathan Hall (13:55):
Maybe.

Shay Nehmad (13:57):
There is how to, do a lot of things, and the project
templates experimenting with,project templates, which is with
the go new command. Right? Andthey've written, like, two
templates to get you started.But it definitely feels like,
you know, if you want to dologging, this is how the Go team
tells you to do logging. But ifyou want a project template, oh,

(14:20):
here's the project and here's acommand and here's a few, like,
easy, templates to get youstarted that aren't really that
deep.
And in the comments to that blogpost, also someone says, like,
oh, if the template generatessomething and then you have to
fix like, you run Golang CI linton it with your config and then
you have to fix five things,it's much harder to go back and

(14:43):
fix the template. Like, if youwant to do a structural
improvement or some refactoringwhen you look at the generated
code, understanding what to fixin the template based on that is
way harder. It's sort of like Ithink people call it meta coding
or something like that. So thesetemplates are are they're great
in theory, but they're actuallyalso super hard to maintain. So

(15:05):
I don't know.
You know, there is benefit, butthere there is also cost.

Jonathan Hall (15:09):
Of course. Yeah.

Shay Nehmad (15:10):
So I don't know how how great it would be. Maybe an
area where AI could actually beuseful. Oh, yeah. You know? It
seems like the sort of thing.
Right? Look at 10 examples athow people have used the
template and then improve thetemplate. But I don't know.
Maybe I'm just being hopeful.

Jonathan Hall (15:26):
Well, speaking of being hopeful, I think you have
a topic to talk about that's alittle bit in the same vein as
hopeiness.

Shay Nehmad (15:34):
You wanna try a different, you wanna try a
different I know you're tired,but I know you have something
better in you. I don't. Soproject templates. Cool. One
final blog post I wanna share isfrom, kmcd.dev.
I I I just looked at that domainfor a second. I was like, oh,
it's like xkcd. HTTP Query andGo. It's a pretty short blog

(16:00):
post if you're in into, like,networking and Go. You should
just try and read it.
But the premise is veryinteresting. We have a GET and
POST, right, in HTTP. Yeah.What's GET used for? Like, if
you had to explain it in asentence?

Jonathan Hall (16:16):
It's to fetch a a document or an object.

Shay Nehmad (16:19):
Okay. And post.

Jonathan Hall (16:21):
Everything else. So

Shay Nehmad (16:25):
I think that the concept is you use GET for,
like, simple, queries to fetch adocument on the web. Mhmm. Use
POST to theoretically implysomething that would change.
That's why it's called GET, youget something, and POST, you
post something for the server touse. But GET isn't great for
complex data retrieval.
Anybody who's tried to like WangJangle a deeply nested structure

(16:49):
into the URL knows it, right?You try to shove like a
complicated nest of and orfilters and also the ordering of
the table.

Jonathan Hall (16:59):
Or even just a simple list of a thousand
different IDs you want to fetch.

Shay Nehmad (17:03):
Yeah, because there is a limit on the length of the
URL. Right? Right. It does havea practical length limit. I
think it's somewhere around2,000 or 8,000 characters,
something like that.

Jonathan Hall (17:16):
I think it depends a lot on the browser and
the the servers and caches andand proxies involved too. But,
2,000 Yeah.

Shay Nehmad (17:22):
That's why that's why I'm saying, like, most
modern servers, 8,000, but allyou need is, like, one old
version of NGINX runningsomewhere along the chain, and
you're like, oh, it's 2,000actually. I use, by the way, for
GET query parameters, to try tomake it nice, something called
QS to like a it's an n simpleNPM library that just, like,

(17:43):
allows you to create the nestedobject. So the URL looks kinda
funky, to be honest. It has alot of, like, square brackets
and it looks kinda funky. But interms of code, it's nice because
you, like, serialize anddeserialize the object, but then
it turns out to be really long.
Mhmm. And I am afraid of runninginto the length limit problem,
actually.

Jonathan Hall (18:02):
Mhmm.

Shay Nehmad (18:03):
KMCD here proposes a new method, query, which is
like, tries to bridge the gapbetween the use of get and post.
Mhmm. The input is in the body,not in the URI, but unlike post,
these are safe and idempotent.So you can do like a GET with
caching and automatic retries,which I wouldn't want to do with

(18:26):
a post request. Like, if I hadto implement a GET using a post
just because of length limits,then suddenly in my and you
wanna do like an automatic retryor cache the result, right?
With GET, these are things younormally can do, right? Right.
But with POST, you don't wannacache the result. Doesn't make
sense because you shouldn't haveresults. But, oh, this specific

(18:46):
post request is for getting databecause the filter was getting
too long.
Mhmm. So this is like a superreal problem. And Kevin goes
here into like implementation ofthis server side in Go, And
pretty funnily enough, it'slike, congratulations. We made
an API with an endpoint nobrowser can use because it uses,

(19:07):
like, the query, which itdoesn't And then, like, calls it
and creates this, like, clearseparation. I think this is a
really good idea.
And there is a draft with like,official draft by the IETF. So,
you know, it might actuallybecome a thing. You know, I I
wonder if we'll see moresupport. This is a real thing
that's happening and and itmight get more support in the

(19:29):
future. I wonder if even ifGoNetHGP library might support
it Mhmm.
In the future. Mhmm. If you'reinterested in that sort of
stuff, just read the blog post.Not that long. And, again, a
good chance to recommend KMCD'sentire thing.
Like, Kevin has a ton of cool,stuff, going on. He has a daily
word game. He has tons of stuffon, Proto buff, gRPC, we've

(19:53):
mentioned on the show in thepast. And he even has daily
prompts he's sharing, which arecool like thought experiments.
Although I I haven't seen one ina while, so maybe it's not that
daily.

Jonathan Hall (20:06):
I have to wonder why not just modify get to
accept a body? Why do we need anew verb?

Shay Nehmad (20:13):
I think with the current verb, it's so
overloaded, but most serverswon't let you pass a body with
GET. They'll let

Jonathan Hall (20:19):
you pass a No. But they don't they don't they
don't let you pass a queryeither. So, like, is it really
any different to change toexpand the GET semantics versus
adding a new verb? Maybe it'sjust clearer, but, like,
logically, it seems like a GETwith a body would solve the same
problem.

Shay Nehmad (20:34):
I think GET doesn't carry a like, GET will not carry
a payload. Even if it's the specwould change at this point, it's
like I think it's called theHiram's Law. Do you know what
I'm talking about?

Jonathan Hall (20:46):
Yeah. That

Shay Nehmad (20:47):
oh, the old consumers depend on this,
implicit interface. Even if theychange the interface, this is a
law already. This is like set instone. The servers will not
accept the payload. And ifsomeone tries to pass payloads
and get, know, they might getstopped by like enterprise,
firewalls that use this as arule to detect the malware
trying to leak stuff.

(21:08):
Like, this is already commonlaw, so people can't bypass it
even if they change the spec.It's much easier to expand the
spec than change it, I I feel.

Jonathan Hall (21:18):
That's probably a big part of

Shay Nehmad (21:21):
I I wouldn't like, if I were to implement I I we
used to work at a network microsegmentation company, like a
firewall company. If you ask meoff the top of my head, the top,
like, 10 rules, probablyslotting it at number seven is
don't have any payloads in HTTPthings that shouldn't have
payloads. Just based on, like,experience of how malware works.

(21:42):
Cool. Let's jump to a quick adbreak.
Like Jonathan mentioned at thetop of the show, this show is
supported by you. If you wannahelp us, cover the cost of the
show, which include hosting andediting in our time, please do
so on Patreon. If you wanna findthe links to the Patreon or the

(22:03):
Swag Store or our Slack channelor past episodes or anything
else, you can find us atkapago.dev on the web. That's
our site. You can also email usat news@kapago.dev.
That is news@kapago.dev. Ifwanna help support the show in
other ways, getting it to morepeople is the best way to do it.
Leaving a review on like ApplePodcasts or Spotify or writing a

(22:24):
blog about us on your site ormentioning us on LinkedIn or the
internal company Slack, thatwould be super cool. Just
getting it to more people. We'vehad a ton of, like, record
breaking statistics.
I know you like to nerd outabout this stuff, about the,
like, analytics of the show,Jonathan. Yeah. Have you seen
the most recent achievementwe've gotten? Was that a certain

(22:45):
number of countries maybe? Itwas a certain number of
downloads.
A single episode had 2,000downloads.

Jonathan Hall (22:51):
Oh, yeah. Wow. That was the episode from
February with, Carlos Becker.Yeah. The author of GoReleaser.
Yeah. So that's our bestdownloaded episode ever. That's
awesome.

Shay Nehmad (23:02):
I guess that's his fault maybe. I don't know.

Jonathan Hall (23:05):
Thank you, Carlos. Come back on, please.
Give us some more listeners.

Shay Nehmad (23:09):
And by the way, closely behind it, there's a
very recent episode. Like, theFebruary episode had some time
to cook. It's been, like, fivemonths. But the next one after
it is the Ian episode. Yeah.
And with, Kevin Hoffman, wherewe talked about empathy and the
joy of vlogging, which is from,like, May. So I don't know. The

(23:29):
show has been doing really, goodrecently, and it's mostly
because people, tell otherpeople about it. So please
continue doing that. One otherprogramming note, I'll be
traveling next week.
I'm going to visit family inWashington. So if you wanna do
the show together with Jonathan,reach out to Jonathan on our
Slack, and try to replace me.It's pretty easy, to be honest.

(23:50):
I don't know that much about Go,so it should be pretty simple.

Jonathan Hall (23:53):
Well, I think that's it for the ad break. I
don't think we've forgottenanything, but we do have a great
interview coming up.

Shay Nehmad (23:59):
Yeah. And, we're skipping the lightning round
today to get to listening to ourinterview with, Redawan.

Jonathan Hall (24:04):
There it is.

Shay Nehmad (24:05):
So stick around for that. Hey, Jonathan. Hi, Shay.
Would you say I'm dependable?

Jonathan Hall (24:14):
Well, you were a couple minutes late to this
call,

Shay Nehmad (24:16):
but you did show up. That's true. That's true.
But, generally, would you defineme as dependable? Generally.
Yes. But what if you needed to,like, bring a different cohost?
You have to, like, inject someother dependency. Yeah.

Jonathan Hall (24:31):
I suppose I'd need to come up some sort of
framework to handle that for me.

Shay Nehmad (24:34):
Yeah. That would be kind of difficult. I wish we had
someone on the call who was anexpert on such matters who could
help us. Oh, hey, Red One.

Jonathan Hall (24:41):
Hello. Welcome to the call. Welcome to the show.

Shay Nehmad (24:44):
They're they're all of my intros are bad, but that
was one of the worst.

Jonathan Hall (24:47):
Oh, they just get worse every time. So next week,
this will this will no longer bethe worst.

Shay Nehmad (24:54):
That's great. That's like the Simpsons thing.
It's the worst day of your life.No. It's the worst day of your
life so far.
Redo, how about you introduceyourself to the people?

Redowan Delowar (25:07):
Hey. I'm Redo Wang. I'm currently, working at
Vault, which is kind of like aEuropean sister concern of
DoorDash in The US. So yeah,I've been doing open source for
a long time and working here foraround like two years. And I
primarily work with Go.
So do a lot of Go, lots of likedistributor systems, database,

(25:30):
model data modeling, dataengineering and that that sort
of thing. So yeah, I'm excitedto be on the show. I am a long
time listener, if you could sayso, or a podcast that's been out
for two years. So yeah, from theget go, I guess.

Shay Nehmad (25:45):
I assume that actually most podcasts only have
one episode and then they quit,you know what mean? Yes. So on
on the statistics, two years ispretty is probably pretty good.

Redowan Delowar (25:56):
Yep. Yep.

Shay Nehmad (25:57):
I have to admit that I was, like, one of the
top, users of, Walt. So I'mhappy to see, like, someone
behind the scenes because it'spretty popular in Israel. And it
also has, a deal. It had a dealwith my workplace. So I would,
like, get free lunch from Waltevery day.
Not free, but you know what Imean? Like included.

Redowan Delowar (26:14):
Oh. Oh. Yeah. Yeah. Yeah.
Israel is one of the biggermarket of, like, Walt's. So yep.

Shay Nehmad (26:19):
Yeah. Love to order food. You see them. But usually,
the effect you see it's funny totalk about the back end because,
I dunno if people who have,like, DoorDash or Walt or all
these sorts of companies intheir cities know. The main
effect is very visible that youhave, like, guys on bikes
crossing red lights and, like,cutting you off trying to get a

(26:39):
little fast.
So now we'll see which laws arebeing broken on the back end to
get my food to me in, thirtyminutes or less.

Jonathan Hall (26:47):
Yep.

Shay Nehmad (26:48):
So the way we got to, talk in is your blog post
about, dependency injectionframeworks, which were you
mentioned, like, at the top ofthe episode. For listeners who,
like, missed that episode orjust, I think, in general, a
refresher would be helpful. Whatis that blog post about?

Redowan Delowar (27:06):
Okay. Yeah. So I kind of, like, recently wrote
a blog post, regarding how in Goyou actually probably don't need
a dependency injection frameworkand it actually got a lot of
traction mostly because Go is alittle different from many other
languages and what happens islike people coming to go from

(27:29):
other languages, they oftenbring their practices and their
habits and behaviors, which isgood, which is all good. But at
the same time, some of themactually don't fit very well.
And DI is one of my pet peeves.
And in work while working inlike larger code bases, what I
have seen is like peoplesometimes bring DI frameworks

(27:52):
like this sort of like DIframeworks that that helps at
the beginning because it kind oflike helps you wear up things
very fast, but at the same time,as the code base starts growing
larger, DI frameworks causes alot of frustration, at least for
me. Like, there has beenmultiple cases where there was a
bug and because the way the DIframework works in Go, you don't

(28:17):
get like a compile time error.And it just turns into a runtime
error. So if you are in like alarge distributed system and you
don't get compile time error,like the whole turnaround period
for like a simple bug can bepretty long. Like if you have
like 10 services that you needto deploy and one of them has
this bug that you could havecaught in compile time.

(28:40):
Now you have like twenty minutesof like a turnaround time
because the whole CI needs torun and all that shenanigan and
you have to start all overagain. So it's mostly it came
from place of a bit offrustration. It's like, okay,
why are we bringing in all theselike large DI frameworks? And I
tried to understand the wholething and I have used like

(29:03):
pretty much all of them in likelarger code bases. So when I
wrote that thing, it's like,okay, probably you might not
need that.
You could probably like get awaywithout one. So that was the
stance of the blog post. It'snot that, hey, you should not
use one at all or something likethat. You probably could have
like avoided one.

Jonathan Hall (29:22):
So what is it about Go that makes it different
that a DI framework might beappropriate in, I don't know,
some other language, but it'snot in Go? What's the
difference?

Redowan Delowar (29:32):
Yeah, so one of the first, like the simple the
simplest thing I would likeanswer is Go has a lot of first
class properties. Like you canactually pass around functions,
which you cannot do in manyother languages, which makes
your life pretty easy. Like ifyou need to initialize
something, just pass a functionand call that function inside
another function and it's fine.And in languages where you need

(29:57):
to create an object and calllike a methodology, you might
need some sort of like wearingthings where you have these like
heavy objects that you need toinitialize somewhere and then
you need to call some method onthat in order for the whole
thing to work. But in Go, inmost cases, you could just like
pass it, like pass the wholething, create your struct like
in Go we have this conventionwhere we usually create like a

(30:19):
construction function, which islike a new and then you return
the object that you want tocreate.
You could create functions likethat for all of your objects and
you can like just pass around.Like even if you if you're and
let's say like the the mainfunction where you start
everything up, if there is afunction that takes like 20
parameters, that's not aproblem. That is really not a

(30:41):
problem. And the biggest reasonwhy oftentimes people like use
DI frameworks is because, oh,this becomes too unwieldy. But
what I have seen at least islike it's not a big deal.
Like, okay, this function takesin 20 parameters, which is fine.
You just pass them aroundexplicitly. And if something is
missing, then you get like acompile time error. That was the

(31:04):
reason why I kind of like wrotethe whole thing. Yeah.

Shay Nehmad (31:06):
The places where I've seen people bring in the
iframeworks are like developersthat don't know really enough
about programming. They don'thave, like, tens of years of
experience behind them to haveseen the whole thing. They know
just enough to be dangerous,like four years experience area.
Yeah. So they'll be like, oh,someone taught me I got a code
review once that you shouldfunctions shouldn't have too

(31:29):
many parameters and it waslinked to clean code.
So functions shouldn't have morethan three parameters. So I'll
bring in a DI framework to dothe thing for me. And now my
code is air quotes clean. Right?

Redowan Delowar (31:41):
Yeah. Yeah.

Shay Nehmad (31:43):
But in or the other way around where they're like,
okay, I won't use a frameworkbecause I think it really over
complicates things because I gota code, code review comment once
that, like, you know, don'tbring in dependencies unless
they're absolutely necessary.Right? But then they don't
separate their like all theconstructors and all the
bootstrap of the application andall the startup into one like

(32:06):
file and one function that'scalled Bootstrap that has all
these things. And then, youknow, suddenly for some reason,
your configuration is beinginitialized with three
parameters inside your loggerand all these sorts of weird
things instead of initializingthem all in order and passing
them in a fun like in a biggraph creation sort of function
that doesn't have any businesslogic. It's just wiring up all

(32:26):
the things.
It's one of the there was adeveloper. I don't know if I
wanna name like, call out themout by name, but I might. Their
name is Gennady, one of the bestdevelopers I ever worked with.
They're behind, like, a hugegaming studio today. They taught
me exactly this.
Like, 50% of the problems isbecause people mix up graph

(32:47):
creation and business logic andyou always have to separate it.
It was like a huge design thing.He taught me and stuck with me
since. But I wonder what, again,in other languages, because this
is true in, I don't know, evenin Python, like having a 20
parameter function can happen,But maybe you don't have
pointers, maybe you can't testit by reference, maybe it's just

(33:08):
most of the code looksdifferently. Like, I'm I'm
wondering what makes otherlanguages more prone to using
this framework.

Redowan Delowar (33:16):
Yeah. I I wouldn't say, like, Python is
probably, like, the rightlanguage to, like, pick on this
because, like, in Python also,you prob you most likely, like,
don't need a d I framework. Inmost cases, you could, like, get
away with it because there isalso, these first class
functions and whatnot. All ofthis thing you actually don't
need. But what happens is likethere are languages like, for
example, in Java, there is avery common, it's just a custom

(33:40):
and not only custom and thereare very valid reasons behind
why they oftentimes use likedependency injection frameworks.
It's mostly sometimes it can belike lack of like first class
functions, like there is nothere isn't one. And at the same
time, it's it's also about a bitof like culture because if you

(34:02):
are dropped into a code basethat is like large enough and
there is a DI framework alreadyin place, it's extremely rare
where you would try to say that,oh, I'm just going to like wear
up everything by hand. It justdoesn't make any sense. Like, if
it is already there, just leaveit be. And also another language
is like also it's very similarin like Kotlin.

(34:25):
People bring in like dependencyinjection frameworks and there
are sometimes valid reasons,sometimes there isn't. And in
Go, I would say there is a talkby Uber. I think it came out
around like seven or eight yearsago where they kind of like show
that, okay, why they're usingsomething like UberEffects. And

(34:46):
UberEffects is like theirflagship DI framework and that
that uses something called DIGunderneath. And there is a very
valid reasoning behind them.
It's like what they kind of liketold in that talk is that they
have like hundreds of microservices, like 15 hundreds or
something, at least like six,seven years ago. I'm not even

(35:07):
sure like how many it is now.And they had like this sort of
like valid use case of like,okay, we have this and all of
the services need to look thesame. So and we have a lot of
junior engineers working in ourteam and we want to codify the
graph creation so that becauselike when you are hand rolling

(35:28):
your own graph creation, as youhave saved, it's like depending
on your experiences, what I havealso seen is like hand rolling
graph creation can get messy.When for example, it's like in
Go it's very common to use likeinit functions and when you have
like a bunch of those, it'sreally hard to understand, okay,

(35:49):
which file imports which one andhow all of this indeed is
actually coming into place.
So that makes things hard. Sowhat happens is like people
leave out all of these globalvariables in different places.
And as a solution, sometimessome people actually brings in
like, hey, if you had used a DIframework, this wouldn't have

(36:10):
happened. You wouldn't have likeall of these global variables
like laid around in likedifferent places. So yeah, but
at the same time it's like ifyou are if you know your if you
know that okay you are onlygoing to wear up all of this
global thingy in your main fileand otherwise you are not going
to use globals and you have thatdiscipline in that case, yeah,

(36:32):
you could probably get awaywithout one.

Shay Nehmad (36:34):
One thing that's interesting is that I can't
fathom why you would need like athousand or 4,000 microservices
for like a cab rentingapplication.

Redowan Delowar (36:44):
Okay. Okay. They they have their reasons.
They have their reasons.

Shay Nehmad (36:47):
I'm sure I'm sure they do. But at this point, it
might also be like, this is howwe do thing. Like, if it works
for them, great. I don't knowwhat's Uber, financials look
like. But and I'm happy for forit because it's cool tech.
Like, it's definitely cool. I'mjust like, okay. Yeah. And you
know what? I'm I use it.
It works. So I would know if ifit didn't work as well, then I

(37:08):
would be pissed, but I use theapp and the app works, so no no
complaints.

Redowan Delowar (37:13):
Yeah. It's basically a solution to a social
problem, not like a technicalproblem, like microservices.
Like when you have, like, 5,000engineers working on something,
you want them to be empowered.So in Uber, at least what I have
heard from some of my co workerswho have worked there previously
is like, you can just go, youcan just basically go ahead and

(37:35):
like start a new service andstart working and they have
their deployment pipeline andit's very empowered. But at the
same time, you know, like wheneveryone can create all of these
services and like deploy that,sure, you will have like all of
huge amount of like services.
So yeah, it's kind of like aculture. Like how do you make
4,000, 5,000 engineers work on asame idea? So it's like breaking

(37:59):
them down into like separateservices. So yeah, it's a
solution for completely socialproblem.

Jonathan Hall (38:08):
Well, thanks for the primer on DI and how it
interacts with Go. Let's stepback a little bit. Tell us a
little bit more about what elseyou do. I'm sure that DI isn't
the only thing you concernyourself with. What interesting
problems have you been solvinglately?
What do you work on these days?

Redowan Delowar (38:27):
Okay, yeah. So I primarily work as a backend
engineer and I work withdistributor systems. And that's
a very like an umbrella term. IfI drill down, currently I'm
working at in the database teamwhere we are building like a
service in front of that isgoing to be backed by Cassandra.

(38:49):
And that's going to solve someof the scalability, database
scalability problems that wehave had inside because WALT and
DoorDash both are like growingat an incredibly faster rate.
And we need better databasesolutions and whatnot. So yeah,
so internally we are rethinkingour backend architecture a lot

(39:16):
and Go kind of like is going toplay a pivotal role because at
least Vault used to be a Pythonshop, like mostly most of the
back end services were writtenin Python. And it's a fairly
recent thing where the idea is alot of them is going to be
rewritten from ground up in Goin for much there are valid

(39:42):
business cases where we kind oflike need to do that. So yeah, I
have been working at thedatabase team where we are
facilitating other teams so thatthey will be able to write Go at
a faster pace and they won'thave to think about databases
that much and scaling that much.It's gonna be all taken care of

(40:03):
by the platform.

Shay Nehmad (40:06):
I've seen in your blog, I'll put a link in the
show notes to the entire blog,not just the DI thing. Like, it
seems over time, recently you'vedone a lot of Go, and then you
scroll a little back, you did alittle bit of Python. Is that
why you're so happy right now?Like, is that why you're
smiling?

Redowan Delowar (40:21):
Yeah. Yeah. Yeah. Yeah. Yeah.
That's that's a that's a veryvalid thing. So I have mainly
done Python, TypeScript, alittle bit of Kotlin, and now
writing Go. And the whole thingis like internally, at least at
my current workplace, there is amajor shift towards Go and lots

(40:42):
of excitement internally like asmuch as I can like Reveal
without breaking any, withoutsaying anything that I'm not
supposed to be saying butthere's a lot of excitement
regarding Go all around. It'slike people are writing Go, we
are adopting Go at like a fasterpace, different services are
getting rewritten and yeah, it'sit's it Go is at this point a

(41:04):
natural language but at Vault,if you kind of like feel the
atmosphere, it feels like, okay,we are adopting something
completely new and there's a lotof excitement around the whole
thing.

Shay Nehmad (41:17):
It's cool that, like, people are excited about
it.

Redowan Delowar (41:21):
Yeah. Yeah.

Shay Nehmad (41:21):
It you know, it would be it's pretty rare. Like,
engineers tend to be, excitedabout new Well,

Redowan Delowar (41:29):
not everyone. Yes. Obviously. Like, not
everyone. Like, some peoplelike, hey.
You can't take away mydecorators. Like, Go doesn't
have a decorator. Hey, just calla function from another
function. It's like, no, butthat's not as nice as, something
like a decorator, I would say.Yeah.

Shay Nehmad (41:47):
Sounds like time for another blog post to educate
those fools, I guess.

Redowan Delowar (41:52):
Yeah. And, well, it also like depends on
your experiences. Like I havewritten quite a bit of Python
over the last, I would say,seven, eight years and even
before that I have written likeTypeScript and the whole point
of me coming over to Go becauseI like back end, I like
distributed systems and whatnot,and writing those languages has

(42:16):
their downsides if you want towork at that. Like where I want
to work, right, if I want tokeep writing like Python, it has
its downsides. And yeah, Go isnot perfect, but well, it's a
tiny language, it's staticallylinked, it has a lot of good
stuff.
And don't ask me because I havelike a huge growth shield inside

(42:38):
the company. So kind of like,probably not the right person to
say like, okay, which languageis better, Go or something else,
because you probably know theanswer. So, yeah.

Shay Nehmad (42:48):
And I'll just, say, you know, I'll I'll do this
shout out instead of you, but Iwent to the careers.world page
Mhmm. And seems like there areGo roles open. So if you're
saying there's a lot ofexcitement around Go and people
are looking, if you're inHelsinki or Stockholm or Estonia
or Finland, all these, countriesthat always show up on the

(43:11):
happiness index, you know what Imean, then it seems like there
are some Go, roles. Do they makeyou, like, do one day on the
bike or something just to learnhow the couriers work or did did
they not force you to do it? Iheard a rumor that everybody who
works there has to do, like, oneday of shipping food for real
customers.

Redowan Delowar (43:29):
Well, that's an option. Like, it's it's not,
like, mandatory. You don't haveto do it if you don't want to,
but, yeah, it's a fun option,like, many actually, like,
choose to do. So

Shay Nehmad (43:39):
yeah. Jonathan, do you think you'll be good as a
food courier? Like a bike riddenfood I used

Jonathan Hall (43:45):
to deliver newspapers on a bicycle, so I
suppose that a lot of thoseskills would transfer over.

Shay Nehmad (43:50):
Oh my god. You legitimately used to do, like,
newspaper delivery.

Jonathan Hall (43:56):
Yeah. Yeah, I did.

Shay Nehmad (43:58):
If we have listeners, like, born after
2,000 newspapers, were thesethings made of paper?

Jonathan Hall (44:05):
No, I'm

Shay Nehmad (44:05):
just kidding.

Redowan Delowar (44:06):
Oh, wow.

Shay Nehmad (44:07):
I'm just kidding, but not really. Well, awesome,
man. Just before we wrap uphere, if people wanna find you,
where did they do it?

Redowan Delowar (44:17):
Yeah, I had a Twitter account, but I kind of
like deactivated the wholething, but I am also, I'm blue
sky, which is which is the onlyone that I'm just like trying it
out and my handle is red nahi,my all of my handle is
everywhere is the same, like mygithub handle and my blog,

(44:40):
everything has like the samehandle. So yeah. And also, like,
I'm on LinkedIn, I guess, likeevery you have to be on
LinkedIn.

Shay Nehmad (44:46):
Mhmm. You have to play the Yeah.

Redowan Delowar (44:49):
Yeah. To play the game. Exactly. Exactly.

Shay Nehmad (44:50):
Yeah. Although we are, like, playing checkers
while Jonathan is playingLinkedIn chess. He's, like,
trolling everybody on LinkedIn.

Redowan Delowar (44:58):
Oh, wow. 40 chess.

Shay Nehmad (45:02):
Of course, all the links, for Redwon's blog, and
the about page and everythingare in the show notes, you can
find them. Jonathan, how aboutyou? Red pops up with the
stumper question. I don't knowwhy we call it the stumper
question. It's not a stumper

Jonathan Hall (45:16):
question anymore. Not a stumper question. I guess
we're stumped as to why it'scalled that. So when you were
learning Go, we didn't reallytalk about your history with
that, but I don't know howrecently you started learning
Go, but who influenced you themost?

Redowan Delowar (45:27):
Okay. Yeah. I would say in my case, I follow
the development of Tailscalevery closely, so all of the
people there like BradFitzpatrick and also Debbie
Troshaw and I would say likethey have a lot of influence on
my thought, how I work and whatI do. So yeah, I would give like

(45:51):
a huge shout out to like theTailscale folks, like they do
incredible work with Go and youcan learn some world class
engineering from their opensource like the whole Tailscale
thing you want like GitHub andeverything, just following the
issues and stuff. So yeah, Ihave learned over the years a
lot just reading the code andlike browsing stuff and also

(46:14):
like the blockquotes that DavidKroshaw, like recently he posted
one blog post about like how heuses agents like LLM agents in
order to develop with Go and whyGo is like a great language in
order if you want to likedevelop with this large language
model tools.

(46:36):
And it was like an incrediblepost. Like I have been through
it like two times and likeshared it internally. So yeah, I
would say like the yeah, theTailscale team would be my pick.

Jonathan Hall (46:47):
Awesome. That's awesome. Great

Shay Nehmad (46:50):
shout out to Tailscale as well. Yep. A lot of
Go companies being, highlighted.What's the name of the blog
post? I wanna put it in the, inthe show notes.

Redowan Delowar (46:59):
How I use agents, it's by David Kroshaw.

Shay Nehmad (47:03):
Oh, I I'll I'll find it. That that's enough.
Yeah. I'll send my agent to findit.

Redowan Delowar (47:08):
Yeah. Yeah. Yeah. You you can find it

Shay Nehmad (47:09):
because with agents.

Redowan Delowar (47:11):
Yes. Yes. Yes.

Shay Nehmad (47:12):
Oh, I see I see where you take your, blog's,
style from. The light mode,black text, no, styling thing. I
feel like whenever I see a bloglike this, I feel stupid for,
like, investing in the CSS of myside and, like, making it nice
and whatever. Okay. Everythinglooks so much more professional
when it's just like HTML, no no

Redowan Delowar (47:34):
In my case, it's like my front end skill is
shit. It's not very good. So I Inever invested much time there.
So I just, like, picked up, adefault Hugo team and just,
like, rolled with it. It doesthe work.
It does the job. So yeah.

Shay Nehmad (47:52):
Maybe it's it's the signal you want to convey. Like,
don't hire me for my front endskills. Yeah.

Redowan Delowar (47:57):
Yeah. Yeah. Most likely. Yeah. Yeah.
For for sure. For sure.

Shay Nehmad (48:01):
Well, I'll put the show the link in the show notes
as well. I actually haven't readit, so I'll definitely read it.
That's a good, that's a goodshout out. Thanks everyone for
joining, Cupago this time. Ihave one, like, final question,
and that one this one is astopper question, actually.
You've been a long time listenerof the show. Who's better host?

Redowan Delowar (48:25):
Oh shit, like that's a hard word, but I would
say like I can immediatelyidentify Jonathan's poise from a
mile.

Jonathan Hall (48:38):
Okay.

Redowan Delowar (48:38):
Take it, what are you?

Jonathan Hall (48:39):
So if I see someone running, it might be
you.

Redowan Delowar (48:42):
Yes, yeah, yeah.

Shay Nehmad (48:46):
I'm gonna cry in the corner then. Thanks for
coming. Thanks for coming on theshow.

Redowan Delowar (48:52):
Thank you. And you for all

Shay Nehmad (48:53):
the show for so long.

Jonathan Hall (48:54):
Yeah. Thanks a lot.

Shay Nehmad (48:56):
Do it for, this week, folks. Check us out next
week as well. I know theschedule's been kind of spotty
recently. And actually next weekit will probably be as well.
I'll talk to Jonathan about itafter the show, and we'll see
how we'll figure it out.
But we really appreciate you alllistening. That's it. Program
exited.

Jonathan Hall (49:19):
Program exited. Goodbye.
Advertise With Us

Popular Podcasts

Stuff You Should Know
The Joe Rogan Experience

The Joe Rogan Experience

The official podcast of comedian Joe Rogan.

Dateline NBC

Dateline NBC

Current and classic episodes, featuring compelling true-crime mysteries, powerful documentaries and in-depth investigations. Special Summer Offer: Exclusively on Apple Podcasts, try our Dateline Premium subscription completely free for one month! With Dateline Premium, you get every episode ad-free plus exclusive bonus content.

Music, radio and podcasts, all free. Listen online or download the iHeart App.

Connect

© 2025 iHeartMedia, Inc.