Menu
Sign In Search Podcasts Charts People & Topics Add Podcast API Pricing

Ufuk Kayserilioglu

👤 Person
252 total appearances

Appearances Over Time

Podcast Appearances

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

But we did other things to compensate for that. So there's a very understandable reason for why we couldn't conclude on that hypothesis of if we were able to reduce trivial errors is because our core monolith does more dynamic things than the stuff that we have in our code base. So it

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

But we did other things to compensate for that. So there's a very understandable reason for why we couldn't conclude on that hypothesis of if we were able to reduce trivial errors is because our core monolith does more dynamic things than the stuff that we have in our code base. So it

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

kind of like serializes objects to the database and then reads serialized objects from the database, et cetera, et cetera. And there's no way a static type checker can like prevent you from, you know, deserializing an object that definition for which has mistakenly been remote from the cloud base, right?

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

kind of like serializes objects to the database and then reads serialized objects from the database, et cetera, et cetera. And there's no way a static type checker can like prevent you from, you know, deserializing an object that definition for which has mistakenly been remote from the cloud base, right?

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So suppose you had like a user class and there was a user object serialized somewhere and then someone removes the user class and now someone tries to deserialize the user object. and then boom, your application fails, right? Because the user class doesn't exist anymore. So you can't deserialize it. So we obviously can't prevent those kinds of errors.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So suppose you had like a user class and there was a user object serialized somewhere and then someone removes the user class and now someone tries to deserialize the user object. and then boom, your application fails, right? Because the user class doesn't exist anymore. So you can't deserialize it. So we obviously can't prevent those kinds of errors.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So there are like other dynamic things going on. And like I said, core is such a large code base and there's like so much variance across like it's failure modes that it's hard to get the signal that we were looking for among all that background.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So there are like other dynamic things going on. And like I said, core is such a large code base and there's like so much variance across like it's failure modes that it's hard to get the signal that we were looking for among all that background.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So then we said, we actually need a smaller code base to test our hypotheses on, to see if we're able to move the needle in that type safety in any direction. So after we did the initial adoption on core, we turned our attention to a much smaller and more opinionated code base within the company. And that's a tool that we call dev. So dev is a tool that

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So then we said, we actually need a smaller code base to test our hypotheses on, to see if we're able to move the needle in that type safety in any direction. So after we did the initial adoption on core, we turned our attention to a much smaller and more opinionated code base within the company. And that's a tool that we call dev. So dev is a tool that

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

every developer at Shopify has on their computer. And it's the tool that every developer uses during their daily work workflows. So there is a command line tool, you use it to clone Shopify repositories, then you only invoke dev up and it knows Based on a configuration file within the repo, it knows which dependencies to install, which commands to execute to bring the application up.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

every developer at Shopify has on their computer. And it's the tool that every developer uses during their daily work workflows. So there is a command line tool, you use it to clone Shopify repositories, then you only invoke dev up and it knows Based on a configuration file within the repo, it knows which dependencies to install, which commands to execute to bring the application up.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

And it also gives you different shortcuts like dev test or dev type check, which was something we added to run various things. So dev is a very opinionated code base because it's a developer tool. It's a command line tool. Everyone uses it throughout the day. So it needs to be fast. It has, for that reason, it has no external dependencies. So it doesn't use any gems or anything.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

And it also gives you different shortcuts like dev test or dev type check, which was something we added to run various things. So dev is a very opinionated code base because it's a developer tool. It's a command line tool. Everyone uses it throughout the day. So it needs to be fast. It has, for that reason, it has no external dependencies. So it doesn't use any gems or anything.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

If it needs some other code, it vendors them in. So it was like the ideal code base. And the team that's working on that code base is a small team that's been working on the same code base for a long time. So we talked to that team and we told them that we were interested in adding type annotations to the majority of the dev code base and to see what kind of an impact we could get on type safety.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

If it needs some other code, it vendors them in. So it was like the ideal code base. And the team that's working on that code base is a small team that's been working on the same code base for a long time. So we talked to that team and we told them that we were interested in adding type annotations to the majority of the dev code base and to see what kind of an impact we could get on type safety.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

That was a project that took a couple of months because it's especially hard to add typing to code that you already have because it means you need to understand how data is flowing throughout the code because you have some methods that ends up calling some other method and then combining the results from that other method by the result of another method call or something.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

That was a project that took a couple of months because it's especially hard to add typing to code that you already have because it means you need to understand how data is flowing throughout the code because you have some methods that ends up calling some other method and then combining the results from that other method by the result of another method call or something.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So you have these chains of method calls that you need to understand. what types they return to understand what types your method in question is returning. So it becomes like a arduous process to fully type an existing code base. So that took a couple of months, but we approached that very methodically.

Ruby Rogues
Sorbet with Ufuk Kayserilioglu - RUBY 664

So you have these chains of method calls that you need to understand. what types they return to understand what types your method in question is returning. So it becomes like a arduous process to fully type an existing code base. So that took a couple of months, but we approached that very methodically.