Vadym Kostiuk (00:02) Hello, hello Marcin. Thanks for joining us on our podcast, Closure in Product. We'll do it again.
Artem Barmin (00:10) Hello.
Marcin (00:12) Hello, hello to everyone.
Vadym Kostiuk (00:15) Yeah, it's nice to see you ⁓ on our recording. And to begin, I suggest maybe just a few questions about yourself and your ⁓ journey as an engineer, as a closure engineer in particular. So if you could please, can you tell us a bit about your background? Like you mentioned that learning closure, that you were learning closure while at dentists and you were new to closure when you joined them.
So can you please share your experience on this matter? How was it for you ⁓ in dentists? And yeah, is it generally a good experience for you?
Marcin (00:58) Yeah, so ⁓ it's actually a quite long journey. So I have started in Dentons six years ago as a junior web developer and Clojure was introduced to me by two excellent developers. One was, ⁓ let's say the lead developer, the architect of the referral network that I am leading now. Second one was... ⁓
senior closure engineer, like this guy was from with closure from the very beginning of being of the language. And I had a React background. So ⁓ while working with React, I was introduced to the concept of pure functions in general, you know, pure functional programming. ⁓
And when I joined, those guys showed me a Clojure script. And at the beginning, I was involved in writing Clojure script. So it was very, very interesting concept where I saw that things from React that I have considered like the top level ⁓ code with memoization, pure functions, it was already there.
And this feeling ⁓ that I could write this highly optimized code right away was just amazing. it was my first encounter to Lisp. So it was very, very different from what I was doing previously. So yeah, the syntax wasn't this scary.
Artem Barmin (02:19) Thank you.
Mm-hmm.
Marcin (02:48) I was already familiar with concepts of LIPS as I started with programming when I was studying chemistry in the University of Łódź in Poland. One guy that I was living with inside the room was into IT and programming and he encountered some of the LIPS.
Artem Barmin (03:17) Thank
Marcin (03:18) And he showed
Artem Barmin (03:19) you.
Marcin (03:19) me that and there was like this crazy book of Lisp or something like that. So yeah, it was quite long ago. But yeah, that's how I started. since then, always, wherever I ⁓ am, I'm trying to like put this functional approach to problems and things that I've encountered in Clojure.
Yeah, that's how it started.
Artem Barmin (03:50) Interesting. Have you started from closure or closure script?
Marcin (03:55) I started with Clojure script and then I was guided by my co-workers into Clojure. So it was a very good, you know, hints how I should proceed to learn the language itself, starting from the concepts that I'm not familiar with.
Artem Barmin (04:04) Mm-hmm.
Marcin (04:22) to the language and all this JVM ecosystem, interrupt with Java, working with databases. That was something new. I had some of, a little bit of full stack experience when I was working with React and my, let's say, ⁓ unfinished little projects.
and where I was learning new concepts. yeah, that's how I ended in the closure ecosystem.
Artem Barmin (05:02) Mm-hmm.
Vadym Kostiuk (05:04) That's interesting, actually. Thank you. And I had a question about Dentis and Clojure. So it's one of the biggest law firms in the world. And it's interesting to hear how actually Clojure ended up there. ⁓ Considering the size of Dentis, it's a niche language, pretty much. So ⁓ maybe you heard anything from your coworkers or from the one who maybe introduced Clojure to Dentis.
how it started.
Marcin (05:37) Yeah, so it's quite interesting story because ⁓ Dentons itself, it's a very large firm and long ago, before I have started, there was a need for the firm to grow and therefore the concept of next law and referral network arised and ⁓ it was basically a venture.
of the, let's say, CEO senior project management where the firm needed to create an environment for lawyers to work closely together. It was quite separated from the rest of the firm and therefore there was an opportunity to pick something different ⁓ than, you know, usually corporate
languages like Java or C sharp or even, you know, TypeScript. So there was a place for closure as it was very expressive. This language is, you know, in general, very expressive. It allows a small team to achieve really great goals, in my opinion. And with very small team,
Artem Barmin (06:37) huh.
Marcin (07:05) the initial team that has started the project that I'm currently maintaining, they were familiar to Clojure. So they, with very small capacity, they were able to achieve really big things. So that's how it ended up here. And yeah, it's, I know that this language isn't,
Artem Barmin (07:16) Mm-hmm.
Marcin (07:34) picked in firms of this size, there is from time to time a place for foreclosure might be found in really big firms. yeah, that's how it ended in Dentons.
Artem Barmin (07:50) Do you know the story, how it started? Was there a discussion? ⁓ Should we choose Clojure? Should we go with the Java? Do you know the history of this decision?
Marcin (08:04) yes. It was quite simple, you know. So when I'm chatting with other developers or people in the firm and I'm saying things about Clojure, you know, I need to how to spell it, you know, what is this language? But after you mentioned that we have Java underneath, you know, we can do everything that Java offers, but quicker. And that's something that is very catchy.
Artem Barmin (08:28) Uh-huh.
Marcin (08:33) So, yeah, that's how it was picked basically. yeah, that's the story.
Artem Barmin (08:34) Uh-huh.
I'm
I see, I see, very interesting. And can you tell a bit about the place of the closure right now in Dentos? So is it used in one project or it's kind of more broadly used in a company for other projects or subsystems?
Marcin (08:58) ⁓ Sorry, Artem, can you repeat? I'm
having...
Artem Barmin (09:06) Sorry, are you here? Yeah, yeah. OK, yeah, yeah, yeah. So the question is basically, what is the place of closure right now in Dantest? Is it used for one ⁓ subsystem, or it's more widely used for different modules, different microservices? I don't know.
Marcin (09:08) Can you repeat once again? I'm having issues with connection.
Yeah, so right now it's, let's say, sitting in its own spot. So there is a delegated environment for the Clojure ecosystem that is running in Nexlo. So basically everything that was associated with Nexlo was intended to run on Clojure. And right now,
Artem Barmin (09:57) Mm-hmm.
Marcin (10:00) ⁓ It's own spot, sitting right there. And some of the services are integrated. We are opening some gateways for the APIs. So that's mainly it. So like...
Artem Barmin (10:16) Okay.
Marcin (10:27) I won't get into details, but right now it's quite enclosed with some connection endpoints available to the rest of the firm.
Artem Barmin (10:41) Mm-hmm. I see, I see. So you don't know any other closure team inside the dentists?
Marcin (10:49) No, I'm quite alone with this technology in a firm. But when I'm showing some of the concepts of the language, everybody gets like the light bulb above their heads and they seem to find it really interesting.
Artem Barmin (10:56) Mm-hmm.
Hmm.
Martin, you are lagging ⁓
Marcin (11:26) Okay, sorry.
Artem Barmin (11:28) Yeah, we're here. We're here. Vadim, ⁓ you're on mute.
Marcin (11:32) Okay.
Vadym Kostiuk (11:41) Yeah, I was just saying, don't worry about it. We will just cut it off, be the final recording. So, ⁓ and it saves locally again. Should be fine.
Artem Barmin (11:44) Mm-hmm.
Yeah, that's not a
problem. That's not a problem until we have at least audio connection.
Vadym Kostiuk (11:54) Marson, are you as us?
Marcin (12:01) Yeah, I'm having some connectivity issues. The video is lagging.
Vadym Kostiuk (12:14) Can you hear us?
Can you hear us at all?
Marson?
There's no pause here.
Artem Barmin (13:05) Well, yes.
Vadym Kostiuk (13:08) I don't understand. ⁓
Artem Barmin (13:25) Well, no, I can't it, but I can't see it, you're so clear-faced.
There were no connectivity problems I don't remember that.
Vadym Kostiuk (13:47) No, not our country, not in speakers.
Artem Barmin (13:49) Yeah,
that's how it was done.
You're torturing yourself.
Vadym Kostiuk (14:04) I thought about it. Can Marsin join the meeting that is already being recorded?
Artem Barmin (14:12) He's not.
HZ.
Vadym Kostiuk (14:17) Let's check it
Artem Barmin (14:18) No idea.
Vadym Kostiuk (14:52) I'll write it
Artem Barmin (14:53) Mm-hmm.
Marsin, Marsin. Such big company. I'm not hero.
Vadym Kostiuk (15:07) Mm-hmm.
Thank I you good luck!
Artem Barmin (15:14) you
Vadym Kostiuk (15:16) It's an maybe there Wi-Fi, it's really beautiful.
Definitely not for podcasting.
Artem Barmin (15:25) U-huh. The video Everything is in squares.
Vadym Kostiuk (15:33) I'm not really worried about because it will be okay. If the was okay.
Artem Barmin (15:37) No, it's just as indicator,
know, even the video lags.
Vadym Kostiuk (15:55) Did write you a link? ⁓
Artem Barmin (15:59) in
It easier for to because browser will open time.
Vadym Kostiuk (16:07) No Not just
these days.
work tool.
into a hundred wire.
Marcin (16:27) Okay, I'm back, hopefully.
Artem Barmin (16:29) ⁓ Good, good.
Vadym Kostiuk (16:35) Can you hear us well?
Marcin (16:43) I can hear you, but the reverse side just crushed my browser. had to restart everything.
Vadym Kostiuk (16:44) Marcin?
Artem Barmin (16:50) Yeah. Ho, ho, ho.
Vadym Kostiuk (16:54) That's the first time I see that.
Artem Barmin (16:56) Yeah.
Marcin (16:56) Yeah, I've never had such
issues.
Artem Barmin (16:59) Maybe it's recorded too much.
Marcin (17:01) Yeah, I've never had such issues on other. ⁓
Vadym Kostiuk (17:10) Yeah, that's interesting. ⁓ Yeah, just once again, can you hear us well? If yes, we can just continue with the questions.
Marcin (17:19) Yeah, I can hear you really well.
Artem Barmin (17:23) Okay, good. So let's continue. So we were talking about the history, how the closure ended up in dentists. And to continue this question, it's really interesting about internal status of closure inside the dentists. So was it officially sanctioned when you started...
Marcin (17:27) I can hear you but you are frozen to me.
Artem Barmin (17:53) knew not you, but when project was started, ⁓ it was kind of under...
Marcin (17:57) Sorry, Artem, I
can't understand.
It's the sound is also lagging.
Artem Barmin (18:08) Okay.
Poo Poo Poo Poo
Vadym Kostiuk (18:16) ⁓
I'm just trying to understand if it's because of the speed connection or because of the reverse side interacting with your browser and with your machine. Is it possible for you to check the speed of the internet? Just use it.
like speed test, tool or anything.
Marcin (18:44) Yeah, it's like around eight megabytes per second, 16 megabytes.
Vadym Kostiuk (18:56) Yeah, probably it is the case.
Marcin (19:00) Can you give me five minutes? I will try to do something maybe.
Vadym Kostiuk (19:00) slow.
Artem Barmin (19:07) Of course, of course.
Vadym Kostiuk (19:08) Yeah, sure, sure.
Artem Barmin (19:55) And here, Vadim, you also hung up.
I'm a
Hello, hello?
Vadym Kostiuk (20:13) I just protested and thought that everyone has a speed.
Artem Barmin (20:17) Oh, you tested it, and I thought something was
Yeah, good. Gigabit.
minus.
The Mafia.
in often. Yes? Well, that's it.
Vadym Kostiuk (20:38) By the very safe here. I
was that there a tyrant here, I don't know what years. A dictator. He was thrown away and the Albanian mafia And now it's very safe Some people leave on road, open windows and just go somewhere.
Artem Barmin (20:45) Bye.
No.
Yeah. Hmm.
Pretty cool.
Yes
Vadym Kostiuk (21:10) They the in the shops. They the keys. Or someone can the bag on the entrance, in front of the shop entrance, then take and take it away.
Artem Barmin (21:13) Hmm ⁓
serious
No
It is that there is mafia, heroines are taking...
Well, then, globally.
Vadym Kostiuk (21:43) I
don't know any that doesn't have crime. I think even Switzerland has
Artem Barmin (21:47) Mm-hmm.
Okay, let's try one more time.
Marcin (21:51) Okay, hopefully it will be better right now.
Vadym Kostiuk (21:57) Yeah, we can hear you loud and clear, so it should be better.
Marcin (21:59) Okay, so
it's also much better for me.
Artem Barmin (22:02) Cool, cool. Okay, so we were talking about the place of closure in the dentist right now and to follow up this topic with a question, I'm curious about the status of a closure inside the company. So was it ⁓ originally sanctioned by, I don't know, a CTO of a company?
to put this language into the stack or it was kind of under a radar and only afterwards when everyone say so that it works okay and very good, it was sanctioned. So was the status changed over the time? That's interesting.
Marcin (22:46) ⁓ Well, I'm afraid that I wasn't at the very beginning and this knowledge was a little bit hidden from me. ⁓ But from what I know, it was accepted by the global team. ⁓ So it was conscious decision.
Artem Barmin (22:53) you
Mm-hmm.
Marcin (23:11) and we had security checks, everything had to be in place. So yeah, was, from what I know, a very well-made decision at the very beginning.
Artem Barmin (23:12) Mm-hmm.
Very interesting to see the results of security checks of the closure. What kind of checks, what vulnerabilities. That's pretty interesting.
Vadym Kostiuk (23:42) You said for the very beginning, ⁓ so everyone was happy, but like looking back in the conversations with your colleagues, again, with those maybe who introduced Clojure to the dentist, maybe they shared any unexpected benefits or perhaps like drawbacks of using Clojure ⁓ in, you know, in some time. So looking back how it's ended up, ⁓ is it more positive or?
Marcin (24:06) Mm-hmm.
Vadym Kostiuk (24:11) negative experience and if so it would be interesting to hear the details.
Marcin (24:17) ⁓ So I think that in the process, while we needed to integrate a bit more into the corporate ecosystem, we started to find obstacles. So like from our end, was ⁓ quite simple. It was just some coding with APIs.
Artem Barmin (24:36) Mm-hmm.
Marcin (24:47) But there were issues with understanding from the other developer teams which were running mostly C sharp things or TypeScript node servers. When they heard that we are running something in Java and in AWS, not in Azure, they started scratching their heads. Why? Why it's like that?
In the process from a very happy lone island somewhere in the firm when there were need for integrations ⁓ some cracks started to arise. So yeah, that's a general overview how it looks.
Artem Barmin (25:33) And what kind of cracks? I'm curious because from my understanding, if you are only exposing the APIs, you can provide the documentation, maybe Swagger docs or just Google docs, I don't know. And that should be enough.
Marcin (25:48) Yeah, mainly because of how to say that, ⁓ not usual technologies that we use. So it wasn't mostly like coding or something like that, but from the project management perspective. yeah, we have like, you know, we have Metabase and why are you not using Power BI, for example?
Artem Barmin (26:06) Mm-hmm
Mm-hmm. Mm-hmm. Mm-hmm.
Marcin (26:15) those types of things and we were supposed to run closure stack ⁓ but we already have something in place so it adds complexity to the general firm ecosystem.
Artem Barmin (26:21) Uh-huh.
Mm-hmm.
So have you provided some training about the Metabase? As I understand this is kind of a data analytics tool, not a developer's tool, yeah?
Marcin (26:44) Yeah, so if somebody would like to see the data that we are working on, I need to give everybody a short tour around Metabase. So from developer perspective, it's excellent, but it stills little amounts of everybody's time because people are already familiar with some technologies, know, Power BI's.
Artem Barmin (26:51) Mm-hmm.
Hmm, uh-huh, I see.
Uh-huh.
Mm-hmm.
Uh-huh.
Marcin (27:14) other tech stacks running like dotnets in in such a big corporate environment and suddenly you're being you know people that are in in business for 20 years or something like that are being introduced to very fresh new technologies and that they are not familiar with and it's always something new and
Artem Barmin (27:18) Mm-hmm.
Marcin (27:43) a call or one or two is needed for explanations what, where and why.
Artem Barmin (27:46) Let's go.
I see, I see, very interesting. So it's kind of very isolated lake of closure inside the sea of the dentist technologies.
Marcin (28:00) Yeah, we can call it like that.
Artem Barmin (28:02) Yeah, very interesting. ⁓ Now, let's move more into the team and collaboration part of the podcast. So can you tell about the current role, what you are doing in Dantos? Do ⁓ you have day-to-day hand coding sessions, something like this, or are you more managing the people?
Marcin (28:28) So let's say it's a bit complex because in the last year I have changed my official title. So right now I'm global data developer in Dantons. I'm working mostly right now with PySpark and Databricks, doing operations on very large data sets. ⁓
Artem Barmin (28:39) Mm-hmm.
I'm going.
Mm-hmm.
Marcin (28:57) Yeah, that's what I'd mostly do right now. But in the same time, I'm also sharing lead developer role for the Nextdoor referral network, which is the closure app that is running side by side with whole Danton ecosystem. ⁓ So in the referral network, since
Artem Barmin (29:18) Mm-hmm.
Marcin (29:27) ⁓ Previously, it was very hard coding, let's say, let's call it. So a lot of coding, lot of also, I think, architecture. ⁓ So AWS stuff, DevOps, that's what I was doing quite a lot. And with the closure part itself, it was...
Artem Barmin (29:32) No, no, no.
Marcin (29:55) ⁓ a lot of pull requests, reviews, lot of changes done by myself to the, let's call, ⁓ critical parts of the application. So that's how I was operating. And in the very beginning, it was mostly front-end related tasks. And after that, I had to really quickly jump into
Artem Barmin (30:09) Mm-hmm.
Marcin (30:24) ⁓ the backend stuff with with Clojure. So yeah, it was it was quite a lot of coding and I think in the last two years it has mainly changed to reviewing pull requests, marking the direction for the others, ⁓ so reviewing pull requests.
Artem Barmin (30:27) Mm-hmm.
Marcin (30:52) let's structuring ideas for the new features, how they can be implemented. So yeah, that's, that's mostly it. And from the coding perspective, right now it's, I'm coding in, let's say in, different languages, but I'm still doing a lot of, a lot of pull requests, reviews in closure. So it's,
Artem Barmin (31:13) Mm-hmm.
Hmm.
Marcin (31:22) Yeah, and also cooperation with business. That's mostly Tassel.ly developer.
Artem Barmin (31:25) You heard him.
You mentioned that the size of a Clojure team originally was pretty lean. What is the current size of a Clojure team?
Marcin (31:41) So currently it's me as lead developer ⁓ one closure developer that is doing the hard work, let's call it. So yeah, this guy is also really cool. He joined us, let's say, mid developer fresh after let's say junior. And I think that
Artem Barmin (31:46) Mm.
Mm-hmm.
⁓
Marcin (32:10) project currently for him is a really nice sandbox for evolving his skills. that's how I'm viewing it. And in addition to that, have testers, automation and manual testers. We have also right now three DevOps guys. So yeah, that's how the team is structured right now.
Artem Barmin (32:38) Mm-hmm.
Mm-hmm. Three DevOps and one developer. Very interesting report.
Marcin (32:45) Yeah,
that's mostly because of the maturity of the referral network itself. We have delivered very cool features that required a lot of and a lot of closure coding for the past years. And right now, since the also objectives of the Dantons have ⁓ shifted, we basically
Artem Barmin (32:51) We're done.
yeah.
I hear you.
Marcin (33:14) Well, it's not so easy. Actually, there's quite a lot of coding because, but for example, we are migrating to Rated from Composure API. So yeah, that's something new. We have to rebuild basically all our API. A lot definitely horrendous amount of work. So yeah, that's how it looks.
Artem Barmin (33:26) I think that's
I'm sorry.
and why you decided to migrate from composure.
Marcin (33:47) Well, I think actually I will start with the issue that in general the closure community has like the old but gold projects are dying out. So when I'm seeing that project isn't maintained for two years or that last patch was introduced,
Artem Barmin (34:04) Mm-hmm. Mm-hmm.
Mm-hmm.
Marcin (34:15) year ago or that the team that is maintaining the library is shifting towards another project. I think that's a yellow light or in some cases a red light that we should make our make up our minds on what we need to do because some of the old projects have
Artem Barmin (34:30) Thank you.
Hmm.
Marcin (34:45) all dependencies and we know how it's with all dependencies when they are not maintained. that's basically the idea behind the migrations changes in our libraries.
Artem Barmin (34:48) Before... ⁓
I'm here.
Is it kind of security implication for these changes?
Marcin (35:05) Yes, this is security implication. That's the one thing. And the other thing is also developer experience as with the new, with, with new libraries, I'm seeing ⁓ improved approach to some of the issues. ⁓ So like, I don't know, Stuart Sierra component has evolved into integrand, for example.
Artem Barmin (35:21) Mm-hmm.
Marcin (35:34) So
like this part, but mainly it's ⁓ security ⁓ from this perspective, it's definitely security.
Artem Barmin (35:43) I see.
Very interesting because we've touched this question a lot in previous podcasts and it was never mentioned as a problem and it was mentioned like as a good thing. So it's not, know, it's kind of, it's done basically. This library is need, don't need to be changed at all. And you're saying about the security implication dependencies. Yeah. And it's pretty valid point. Very interesting. Do you have some...
Marcin (36:07) Mm-hmm.
Artem Barmin (36:15) ⁓ security scanner in the system or maybe on the CI parts, the checking the dependencies.
Marcin (36:22) So ⁓
we have, I think it was Lane Ancient. So we have this in place, but we also from time to time have black box testing and white box testing from an external contractors that are trying to break stuff.
Artem Barmin (36:30) Mm-hmm.
and
Mm-hmm.
Marcin (36:47) And when they are scanning, like in the white box testing some of our dependencies, are... Basically, that when some senior manager gets a list with 10 critical severities from the NVD list, it gets nasty. And especially when you're running a law firm.
Artem Barmin (36:47) Mm-hmm.
Yeah.
Hmm.
guys.
Mm-hmm.
Marcin (37:15) and handling sensitive data. It's important to keep everything secure. So we have those scans, I think, yearly right now. that's one of ⁓ our main coding tasks. yeah, keeping things secure, especially that, you know,
Artem Barmin (37:27) I don't know. I don't know.
Mm-hmm.
Marcin (37:44) I think from what I'm seeing that the dangers that are hidden in the web and the new methods that are constantly being tried by malicious actors. Yeah, it's something that I think every everything needs to take care of because otherwise you end up like some vibe coded up.
Artem Barmin (38:00) and
Marcin (38:12) spitting out thousands of personal data and then it's good to be a law firm because you have lawyers that might handle the lawsuit but yeah, it's better not to.
Artem Barmin (38:12) That's it.
Thank
Very interesting perspective. Probably first time I hear this kind of this point of view about the security. Aren't you afraid that every library enclosure ecosystem at some time will be abandoned? Because I've seen a lot of ⁓ kind of abandoned projects five years ago, last comets.
Marcin (38:51) ⁓ Yeah, that's something that I wouldn't like to see in the future. So fortunately, there is a new bank team. There is also guys from Metosyn. So I think that because Clojure is widely adapted also in banking and fintechs.
Artem Barmin (38:57) Mm.
Mm-hmm. Yeah.
Mm-hmm.
Marcin (39:20) I think that we are good for some time. one thing is that it's very easy to write something in Lisp. Second thing is that when it gets to maintenance, you are getting into GitHub seeing that one maintainer. Imagine, ⁓ we based our all-away connectivity on this one.
Artem Barmin (39:23) ⁓
Mm-hmm
Marcin (39:48) very neat library and this guy is being struck by a bus and you know, so that's another story. yeah, that's one of the things that makes me a bit nervous in like long lifespan of the application.
Artem Barmin (39:52) Yeah.
Mm-hmm.
I'm curious, is this ⁓ technical decisions pass some checklists from the, I don't know, procurement team, I don't know who is making the decisions. For example, one maintainer in the open source project should be forbidden probably.
Marcin (40:30) Yeah, so in Next Lower For All Network, the decisions are not made by the stars from GitHub, but I would, for example, if I see guys like, know, from the Closure Core team behind some of libraries, then...
Artem Barmin (40:42) Mm-hmm.
Hmm.
Marcin (40:57) I'm feeling comfortable with using it. So we are picking, let's say libraries that are battle tested and not like some time ago I was doing a little bit with machine learning with Clojure. I wanted to see how it works and there are cool libraries, but you know, there was one guy maintaining it and he was selling books for his library. So somebody, you know,
Artem Barmin (41:00) It's not.
Please leave me alone.
Mm-hmm.
Marcin (41:27) ⁓ makes living off of it, but, ⁓ it works well. But, you know, many things can happen when you have like one king and ruler of, of some library.
Artem Barmin (41:31) Thank you. ⁓
It's coming.
Yeah, yeah. I heard the stories even about languages when one maintainer, ⁓ there was a Haskell inspired language for the front end. I don't remember its name, but I heard the story that one maintainer decided to change the roadmap and the way the language works and it basically breaks and the community was ⁓ disappointed. They created many forks, but no fork.
was elected as a new king, so it just disappeared. Yeah, yeah, I can understand. It's worrying.
Vadym Kostiuk (42:23) And speaking of maintenance of the libraries, ⁓ guess same applies to the team and to the maintenance of the project itself. And you mentioned that the team is not pretty big in terms of the closure ⁓ engineers. However, at some point you probably have onboarded new people or will onboard new people. Can you maybe share in a few words, how do you do this? Like how do you ensure the knowledge transfer?
⁓ Maybe especially to the people who are our closure engineers. ⁓ Yeah, just how do you handle the situation on the project?
Marcin (43:05) So situations where I do not have closure engineers, it's something that is really in front of me. So I need to show the project and the language and all the ecosystem to some of my friends from the global data services team that I'm currently in.
as we are sharing some of the responsibilities. So we are reducing the bus factor. So basically, think that the strongest part is to create docs, So with descriptions of like fire emergency situations, like critical procedures, and so everybody can
come in, run some CLI commands or ⁓ change some of the code in critical part, for example, certificate and put an application up to the speed. So ⁓ in general, sharing knowledge across teams are one hour every week for some period of time. And once you have... ⁓
I think experienced developers wrapping their mind around closure, especially if they were ⁓ doing some ⁓ functional stuff, for example, in JavaScript, they know the concepts carrying, et cetera, et cetera. It's quite simple, actually. That's what I'm thinking. And with the new developers,
Artem Barmin (44:48) Mm-hmm. Yeah. Yeah.
Marcin (45:02) that I'm introducing well. I think that I'm searching for a need to learn new stuff and not being discouraged because, know, like I have problems with parentheses, you know, it can be solved with one plugin into IDE. So that's how I'm perceiving it.
Artem Barmin (45:12) Mm-hmm.
Marcin (45:29) I'm looking always when I'm showing this language or project to younger developers. I'm thinking how I started it. I wanted to learn, I wanted to learn new cool stuff and I'm searching for this in others.
Artem Barmin (45:49) Interesting. Do you have some internal courses for the closure? Kind of changing the stack? ⁓
Marcin (46:02) Honestly, no, I don't have nothing internal like like courses. It's honestly, it's better to from my experience, better to meet and just point your finger at something that, you know, here is the part that you need to start from and you go up to the, you know, stack trace and you will find the root cause, you know, and how the application works. So I think that the
Artem Barmin (46:14) Good night.
Mm-hmm. Mm-hmm.
Marcin (46:30) ⁓ interaction between people is much better than watching a YouTube video. So that's how, in my opinion, courses end up.
Artem Barmin (46:36) Uh-huh.
I see. Yeah. Especially in enclosure scripts, stack traces can be rather confusing. I remember using ⁓ Async, Core Async, and it was a really interesting experience to debug.
Marcin (46:49) Yeah.
Yeah,
you need to know how JavaScript works really, really well and how this whole loop of JavaScript events is being handled, cetera, and et cetera. Also React knowledge is really needed when you're working with Reagent.
Artem Barmin (47:08) I'm not gonna use ⁓
Yeah, that's true. And speaking about other parts of the systems, aside of the closure, you mentioned already ⁓ Metabase. And I'm curious, you use some closure-specific databases like Datomic, maybe XTDB, or something like this? And can you elaborate a bit more about the whole technical stack of the project? ⁓
Marcin (47:43) So technical stack, we have Postgres as our database. we are using, ⁓ you know, I can fire up my ID and tell you more about dependencies if you would like to chat about the in general, I don't want to overshare. So we also have ⁓ Elasticsearch.
Artem Barmin (47:50) Mm-hmm.
You're free.
Yeah, that would be cool.
Of course.
Marcin (48:12) underneath for indexing and handling the data, reagent, reframe. We had Composure for quite some time and then Composure 2.0, alpha, and now Migrate Interacted. ⁓ And what do we have else there? You it's hard to...
Artem Barmin (48:12) I hear you. I hear you.
Mm-hmm.
Uh-huh. ⁓
⁓ huh.
Mm-hmm.
Marcin (48:41) tell this from out of memory, honestly.
Artem Barmin (48:45) Yeah, frankly speaking, I think that's more than enough. You don't need to tell about all minor dependencies that you have. yeah.
Marcin (48:52) okay, that's cool. Also,
I wouldn't get into details. yeah, that's mostly the app is, we always try to keep application really simple. you know, having a stack like Postgres Elastic and, you know, Clojure with some of the Java interrupts.
Artem Barmin (48:56) Of course.
Mm-hmm.
Marcin (49:21) and also we also have Material UI on the front end. So, yeah, that's mostly it. I think worth of mentioning.
Artem Barmin (49:24) Mm-hmm.
I see. Very interesting. And can you tell maybe about ⁓ how do you keep the code base clean? How long the project exists actually?
Marcin (49:45) ⁓ So
it's almost nine years. I think nine years. So ⁓ cleanups. I remember this like blog post about a crooked tree that is growing in the mountains. ⁓ So that's how it is with software projects that are running for multiple years. So
Artem Barmin (49:49) Nine years.
We
do.
Marcin (50:15) It's like that, you know, this project needed to withstand multiple differing business requirements, shifts in strategies, in the shape of the team. So the cleanups, well, we are, I don't know how to tell that, you know, just through.
Artem Barmin (50:24) Mm-hmm.
Marcin (50:38) find the library, hit control F, replace everything with empty space and see what breaks them go after chase the rabbit, know, so until you eradicate the issue to the limits. So that's how the cleanups basically work, you know, so it requires a lot of work, but I think that the best example in such, you know,
Artem Barmin (50:41) huh.
I think.
Adieu.
Marcin (51:07) cleanup stuff ⁓ is Facebook with PHP. They have chosen this technology at the very beginning and they decide we need to live with it. We've wrote so much stuff with PHP that we needed to write our own compiler. So that's how it is with, in my opinion, with software projects. If you decided to stick with something,
Artem Barmin (51:12) Thank you.
Mm-hmm.
Yeah.
Mm-hmm.
Marcin (51:34) the decision to just leave it alone and forget about it, know, it ends up with, in my opinion, more and more work than is necessary. you just need to, you know, hold your breath for a second when you're countered this...
awful function from this library that we should leave and eradicate two years ago, but there are more important things, especially to customers than one or five wasted minutes of looking into the function signature.
Artem Barmin (51:59) Thank
Mm-hmm.
Yeah, that's true, that's true. You know, from my experience, from what I've seen in some Clojure projects, especially that we built with a big team, with kind of turnaround, with the new guys coming in, and sometimes when they learn the Clojure, the power of Clojure, Macros, some advanced stuff,
They tend to over engineer things and to create ⁓ accidental complexity in the system. So have you meet such situations in your practice?
Marcin (52:55) Mmm.
Yeah, I think that it's when you will show macros to somebody, he will try to place them everywhere. When you will try to when somebody will see or is learning async, he will try to put async everywhere. So I think that the main goal is to keep every
Artem Barmin (53:22) Hey. ⁓
Marcin (53:29) thing as simple as possible. That's one of the most important parts of, I think, Clojure talks ever, simple made easy. So that's how I'm seeing it. ⁓
Artem Barmin (53:31) Mm-hmm.
Marcin (53:48) Honestly, yeah, I think that I saw this practice where it's mostly related honestly to macros. When somebody sees macros, he's trying to find a place to put them. honestly, I am always trying to use functions in Clojure. If I can use a function, I'll use function.
Artem Barmin (53:59) Mm-hmm.
Marcin (54:17) Macros are reserved for special use cases in my opinion. So yeah, that's that.
Artem Barmin (54:29) I see. ⁓ Maybe you can tell about some ⁓ implications that were created by enterprise ecosystem that we are working in. maybe ⁓ something that's ⁓ best practice in the usual closure world are not applicable in the enterprise environment.
Marcin (54:57) Honestly, to tell because in the referral network when I have started, we were operating quite like a startup. So we had startup ideas, more free will than you have in the enterprise where every decision needs to pass.
Artem Barmin (55:12) Mm-hmm.
Marcin (55:26) a process in the referral network. We had a lot of free space to roam with new technologies, new libraries. So I think that's ⁓ the element that differs to structures, to organizations. So when I've shifted from
the referral network and jumped into more structured corporate environment. It was, you know, a little bit frustrating for me to see that, you know, I need to wait for someone to create a resource group for me. And it was, my God, so much time, like I could done this by myself, like in minutes or whatever. And it takes, you know, much longer.
Artem Barmin (55:59) We love you.
Hmm.
you
Marcin (56:23) But you know, we have the process. It was placed, the process was created for a reason. And, you know, for to prevent such developers as me to, you know, I have created like 10 resource group and this new Azure account is a mess. And, you know, it prevents you from, you know, doing like spawning some super GPU.
Artem Barmin (56:29) Uh-huh.
Mm-hmm.
Mhm.
Marcin (56:52) ⁓ instances
for hosting static websites. that's how it looks. So very different approaches to problems.
Artem Barmin (57:01) We're here.
Very interesting that, you know, this very isolated department in the technical sense. So you are talking about, know...
Marcin (57:19) Yeah, so I don't want to get into politics, but I'm getting into that. In such big corporations, you can only imagine how such big corporations have different ventures, different departments, different offices, and in Dentons...
Artem Barmin (57:24) Mm-hmm.
Thank
Marcin (57:47) All of those offices have autonomy. So this is one of our main policies being polycentric. And that's how Dentons was growing for past years. We do not have like a single decisive center in the firm. ⁓ Each office is capable of...
doing its own ventures if they find it necessary, useful or whatever. like referral networks parked out of the global team, multiple regions in Dentons have their own ventures.
Artem Barmin (58:31) Mm-hmm.
Vadym Kostiuk (58:36) That's actually interesting, like having this decentralization within the team. ⁓
Marcin (58:41) Yeah,
that makes Denton special as a firm. So yeah, it's one of, I think, very interesting things about this firm itself. we do not have like Apple has Cupertino and there are just like everybody sits there and the decisions are flowing from there. It's very different in here.
Artem Barmin (58:46) Mm-hmm.
Vadym Kostiuk (59:10) Yeah, that's, I guess it's really interested, like working in such a, in such team. ⁓ yeah. And, you know, while we were speaking about, ⁓ having problems with composure, ⁓ because of, of, ⁓ like security reasons and you had some audits that showed that, yeah, there are some dependencies. need to, ⁓ remove them. need to like solve them. ⁓ I was thinking.
Artem Barmin (59:17) Hmm.
Vadym Kostiuk (59:40) If you may be like in the history of you working on a team, if you ever had a case when someone told you that we should think about moving from closure in general, because it's a liability or anything. mean, there are multiple reasons that might cause this discussion. Yeah, security itself. Have you ever had such conversation with anyone?
Artem Barmin (59:55) Security.
Marcin (1:00:05) Not exactly about security, but conversations about, let's say, simplifying the tech stack or ⁓ things like that. So the very best answer was that I have heard it was back when I wasn't a lead developer. I think it was my second or third year.
Artem Barmin (1:00:15) You
Marcin (1:00:31) is that, okay, so what do we want to do? Do we migrate to WordPress with Google Sheets? So that's in general my answer. So if somebody asks me to change the test stack, I'm saying I'm asking to what, what's the plan? And usually then the ⁓ conversation goes into other direction.
Artem Barmin (1:00:52) Mm-hmm.
Marcin (1:00:59) because it's very easy to question something and it's very hard to put something in place. if somebody would told me, we need to migrate to this and that, what is the cost effect? So we will waste, I don't know how many weeks, months, time, and we will achieve maybe the same thing or maybe something worse. ⁓
Artem Barmin (1:01:13) Mm-hmm.
Cheers.
Mm-hmm.
Marcin (1:01:28) Yeah, that's in general, my response. What will be the cost effect? What will achieve? That's how it ends.
Artem Barmin (1:01:33) Mm-hmm.
Vadym Kostiuk (1:01:42) Yeah, that's interesting. know, we just, ⁓ I was thinking maybe you had such conversations. ⁓ Because, ⁓ but I see that Dintoss is not like the other enterprise environments that you worked before, because we used to work with enterprise where like the decisions are made from the top to the bottom. And it's not such a decentralized force.
Artem Barmin (1:01:50) Mm-hmm.
Vadym Kostiuk (1:02:11) within the team.
Artem Barmin (1:02:13) Yeah, very interesting culture.
Marcin (1:02:16) Yeah, so
a lot of things in Dentons are actually coming from the bottom. people, you know, at least for me in here, the culture in this firm is absolutely amazing. It's as I'm working here, it's a great thing to experience. like people that, you know, we can call it flat structure of the firm in some cases, but
Artem Barmin (1:02:21) Mm-hmm.
Marcin (1:02:46) I think that, let's call it like people at the normal worker level are always being heard by people at the top. So yeah, that's how the world looks.
Artem Barmin (1:03:00) And talking about moving from the closure, have you ever discussed the problems with recruiting, with finding new talents for the closure?
Marcin (1:03:15) Yeah, so that's one of, in my opinion, biggest pain points of closure in general. in my opinion, it's very good in this ecosystem to keep very friendly relations with other developers because you don't know when you will need help.
Artem Barmin (1:03:21) Mm-hmm.
Yeah.
Marcin (1:03:42) So that's my opinion about that. yeah, it's honestly, it's quite hard to find somebody that is willing to basically has the skill or is willing to learn this technology as its niche. So that's actually hard. So we often had to...
Artem Barmin (1:03:56) Uh-huh.
Mm-hmm.
is real.
Marcin (1:04:09) We're often in situation where we need to ask contractors ⁓ for some help because we had some issues with finding somebody right away or the recruitment processes were taking very long. yeah, we need more people ⁓ in closure. That's my opinion.
Artem Barmin (1:04:18) Mm-hmm.
Yeah, yeah, it's really hard to f-
Marcin (1:04:39) But
it's also like, how to put it, I found that people that are writing closure are approaching some problems in a different way than the others. it makes, think,
Artem Barmin (1:04:58) Yeah. Definitely.
Marcin (1:05:07) those developers are available as it's the language and the methodologies provide different mindset.
Artem Barmin (1:05:10) I hear you now.
Yeah, we discussed this a lot and you've noticed that Clojure works as a filter for developers. So the guys who still learned Clojure, they are pretty good in general in development, not only in Clojure, but even in other technical stacks. Yeah. Hmm. Very interesting. ⁓ Okay. So let's move to another block.
Marcin (1:05:27) Yeah, that's true.
Artem Barmin (1:05:45) of questions and the name of our podcast is Clojure in product, would you do it again? So that's the main question. Would you do it again or would you start a new project in Clojure if you asked, for example, ⁓ Marcin, let's create some new module or new project in the company? So would you suggest Clojure as a technical stack?
Marcin (1:06:13) It depends. It's not an easy, the answer is not easy. So in Dendons, in my current firm, I think that it will be hard to recommend this language as I know, let's say after all those years, I know the firm very well and I know that people in here are using different text stacks usually.
Artem Barmin (1:06:15) Hmm.
Mm-hmm.
Marcin (1:06:42) And considering all business related topics, as we were speaking previously, it's hard to find somebody. And in my opinion, in such big firms, it's very important to be able to reach out for people from basically the job market.
Artem Barmin (1:06:53) Mm-hmm.
Marcin (1:07:12) ⁓
so we, it's much easier to find, ⁓ someone that is writing, example, C sharp or third type script. ⁓ if I would be running startup, ⁓ and I would like, you know, ⁓ how, this Western was called seven magnificent or something like that. And I would have to pick like, ⁓ seven really good developers for a startup.
Artem Barmin (1:07:20) Mm-hmm.
Thank you.
Mm-hmm.
Marcin (1:07:40) I think that I would recommend the closure. So ⁓ it depends on the scale. It depends on what you want to achieve on goals, strategy. ⁓ Yeah, so it's not easy decision.
Artem Barmin (1:07:46) Mm-hmm.
We should.
I see, I see. Very wise answer. Very interesting. You're probably the first one who not ⁓ said definitely yes. But your answer is more complex.
Marcin (1:08:09) It's a bold statement, definitely.
I'm also considering closure. I was thinking before this podcast about that. So it's, in my opinion, when you had this Star Wars scene when Luke meets Obi-Wan for the first time and he shows him the lightsaber.
Artem Barmin (1:08:32) That's right.
Marcin (1:08:38) What is
Artem Barmin (1:08:43) and
Mm-hmm.
⁓
Yeah. analogy. Maybe you have some words to people that are listening to us right now. Maybe from enterprise, maybe they are thinking, maybe they want to try Clojure for some microservice because sometimes Clojure brings as a microservice language when you don't need to think a lot about big things. Maybe.
Marcin (1:09:12) Wow.
Yeah, so what I like to say, to people that haven't tried Clojure, definitely try it. It's a great language that will change your viewpoint on multiple problems. And basically it will make your better developer. And for people that are already running Clojure, let's spread the word about this language.
Artem Barmin (1:09:32) I'm fine with yours.
Marcin (1:09:58) ⁓ and stick together. That's it.
Artem Barmin (1:10:03) Yeah. Yeah.
Let's build the job market together. Yeah. Thank you. Thank you, Marcin. It was really interesting, know, very unusual point of view on the state, ⁓ on the way, how do you approach ⁓ the technical things. And basically that's it. And I want to thank you that you joined podcast.
Marcin (1:10:08) Ha
Artem Barmin (1:10:31) that you share all this knowledge, all this insights about the enterprise usage. And thank you, basically.
Marcin (1:10:41) Thank you. Thank you, Artem. Thank you, Vadim.
Vadym Kostiuk (1:10:42) Yes. Thank you very much, Marcin.
⁓ Yeah, it was nice to hear about Dentons and how you use Clojure and the history. yeah, special thanks to our audience as well. So until next time.
Artem Barmin (1:10:50) Hmm.
Yeah, until next time, bye. See you.
Marcin (1:10:58) See you.