In addition to all of that, sessions tend to last a long time at Monday. And tabs tend to stay open for several days, for three and more days with a lot of interaction and a lot of dependencies between all of these components and micro-frontends. So our client-side is a sophisticated, complex piece of software running on your browser and some of its dependencies and services have been built and maintained for over than ten years with a lot of Monday developers and external developers contributing code creating this massive piece of software.
This is a real example of a selector that we have. You can see it depends on so many other selectors and each one of them may depend on so many other selectors and each one of them depends on services and utilities and a lot more files, resulting in the fact that this single selector can depend on hundreds of files.
So, what we came out to do. We wanted to break the core, the very hearts and brains of our client-side monolith and doing so while keeping some ground rules. We wanted zero production incidents. We wanted to create no behavioral changes in our application. We wanted to convert everything to TypeScript along the way and to keep the very minimal human friction in the process.
What is that Morphix that is breaking our monolith? To the average developer at Monday, Morphix is creating random pull requests at random times and sends these pull requests to them to review and merge. In this example, you can see a Slack message. Morphix sent these two developers telling them it had done a lot of work for them and now it's up to them to review and merge it.
Now how to pick the right file to extract. Just like in the Jenga game, you need to know which brick you can extract without breaking the entire tower. We don't want our product to crash. But if you ever played Jenga, you know that eventually the tower must fall. When extracting files, if you just pick a random file and you want to take it out of the monolith to extract it somewhere else, you know you can't just take it out because it has dependencies and it has other blockers that must be solved before that specific file must be handled.
But if we could just take out the bricks from the top of the tower, that would be much easier game to play. And eventually, for our monolith, we found how to do so. We created the Morphix analyzer which is a static deterministic tool using an AST under the hood that traverses the entire code base and builds a huge dependency tree. And its leaves are just like the top of the tower. It is free for extraction. And after the analyzer runs, we take all of the data, all of the migration data, the dependencies, complexity, and all of the other relevant data and we just threw it to a Monday board.
And now, with the board, Morphix and us have clear visibility on the extraction progress, status, and order, creating an amazing human agent collaboration where human and agents are working together on the same board towards the same goal. And with this board as a sink in place, we now enable Morphix to run parallelly extracting multiple files simultaneously. So let's see how we can extract a single file, a single block out of the monolith. We just go to Claude, of course, and we say hey, Claude, please take this file out of the monolith. And as we said, we want to also convert it to TypeScript. This is what the prompt looked like, like a one-liner.
Comments