Tackling Complex Business Logic with Laravel - Tag1TeamTalk #12
Hello and welcome, to tag, one team talks the, webinar, and podcast, series on emerging web technologies. I'm, really excited today because we've got an amazing tag, 1 team talk episode, this morning about, Lera, Ville and complex. Business logic my. Name is Preston so I'm located here in New York City editor, in chief in tag 1 moderator, of the tag team talks and also, senior director of product strategy at Oracle. We're, joined today by three, of my cherished colleagues today at tag 1 first, Laszlo, Horvath who is the senior level developer at tag 1 he, has 13 years of experience in various technologies, mostly, php-based, specialized. In lyrical and symphony applying them to middle, to large-size. Projects. He, contributes to a variety of different level, and Symphony packages, including, creating the enemy hydrator, for genetic generic. Enemy hydration, and Symphony and soft delete cascade for, our doctrine, all of those words went pretty much over, my head but I'm excited to talk more about what, les is working on we're, also joined today by Fabian, a mainstay, on the show Fabian. Is the, senior technical architect and performance, lead at tag one they'd be in France is also one of the five Drupal, seven for branch maintainer z' he's based in switzerland and he's also one of the top 50 contributors, to fellate and is the maintainer for several tripoli or sub systems including, big pipe dynamic, page cache and themed api now, those words I know and finally. We're joined by Michael. Myers managing, director of tag 1 also located in New York and just. To kick us off Michael, what are some of the things that were interested in talking about today while arival for, a group, that has primarily talked about Drupal in the past. Yeah. Great, question everybody. Thanks for joining us today we, work with a lot of tools and technologies, we're definitely most, well known for, our, leadership in the Drupal community but. We work with a lot more technologies. And try, to pick the best tool, for the job we're. Gonna talk a lot about this today but there were many advantages, to using laravel, for such a data-driven application. Some unique client needs and it's. Exciting it's a really cool piece of technology and it's a great fit for the project, and so we wanted to share why. We chose it and some of the awesome things that we've done with it for this group thanks. So much Michael and just to kick us off here I mean one of the things I know that is, really interesting about this project is that it involves millions, of users I know that we can't really talk much about the actual client but what, exactly did this project entail, what's, the story behind this, incredible use. Of label that we're going to be talking about today, so. It's a it's a large membership, based organization. They have millions. Of members across, the United States broken. Into over. 3,000. Affiliates, managed, by local. Groups that roll up in state, groups and conglomerates, of state groups so, it's a really complex. Structure. Local. Affiliates, can often, be managed, by volunteers. Or, designates. And so, you, know the systems need to be really, useable to a broad array and, then, there's of course the, organization. Itself the national organization, and a, whole team and slew of users that oversee. And need to be able to jump in and do all sorts of things, it is. Really, complex. You know people, join, the system leave, the system can. Hold many roles and there's, a lot of information and, information that changes you know say you get married you need to change your, your, name you, move, from one organization, to another change, your address, deviation. For the kind of dues and so it's really a critical core part of their business because. It's, how they raise their money to service, the organization. Through fees and dues and for, their members it's how they track, and receive, the. Benefits that they get as you know being a part of this organization. There, are also a lot of technical challenges again that we're going to go into as well, as internal. Organizational. Challenges, and I think a lot of organizations. Deal. With this you know they had a lot of tools and technologies, they use but. Limited funding and a limited technology, team and so. Internally, they have a really great team. That, has a broad, array of knowledge but they don't necessarily have a tremendous.
Amount Of expertise, in you, know individual. Systems, and so one, of the critical things here, is that they're able to run and manage this system long term what. We're doing is replacing a system that, was built historically, by another. Services. Company an agency, that, really never met the needs of the application, itself but. Also wasn't, really, something that the organization. Could own and, continue, to build on top of both because of the architecture and, it's, the technology choices that were used and so a big, part of this engagement is. Working. Very closely in conjunction, with the organization. Training. And mentoring, their resources. Overseeing. Their development, so that they are in a position to. Continue. To own and maintain this, internally, and one, of the reasons that we're going to about picking laravel is because we have abstract. A lot of the complexity, once. It's been put in place and enable, them to fulfill. Their day-to-day needs, without. Necessarily, having to dig into that on a regular basis, and inherently, there for them, so. I definitely want to dig more into the. Choice of level and how exactly you abstracted, out that complexity, but, first you know I know that one of the things you mentioned was you know changing, your name changing, your address what. Were some of the other core features, that were involved, in this project that, this organization had really required during, the kind of discovery process and development cycle. Lazlo, Fabian anything, exciting, or complex. On a feature and functionality standpoint. I know that there. Are some really cool things that we did as far as managing, the data from a UI standpoint, the. Ability to you know edit in place you, know trying to make it significantly. More efficient, to, save the organization. Time because. This is a big part of their, their resource, you, know day to day work. And so, every click we can save them every minute you know that we can bring, back to the organization, is something they can use to.
You. Know apply to other areas and functionality. And then, you know the fact that we have you. Know an API, based. System, that, plugs into you, know a couple, of UI they. Can integrate on the back end with a wide. Array of technologies so, their accounting, system for example Microsoft Great, Planes dynamic, system and other, internal, systems. Need to pull, data and push data into this system I. Think. If, one is more important, things is just a sheer amount, of data, that has, like. Millions. Of members that. Gives, challenges. On a completely, different scale, because. You're not just me, to my great migration. Also was a large part of this project you, don't need to migrate like, like, one thing it's a little thing and after an hour you are done like. With things but, at. One point before, performance, optimization. Between very nice they did it, took seven, days to. Migrate, just. One part of the database and, before. That we were talking about like may needs I think, the original estimate was like fourteen days or something we're now down to about one day there's. Pretty cool but, really the amount of data is also very like, a like a huge challenge for the puzzle, organization, and, because. There's so much data already, they are obviously, you, also need to process it and, do, different things with it so. That's there was definitely, one of the challenges, here just project, sounds. Like an incredible. Project and one, of the things that I wanted to ask especially, because, of the fact that you know a lot of people have heard of Drupal they've heard of symphony a lot of people have heard of layer volt but I think it occupies a bit of this kind, of gray area where people are, a little bit less aware of what level is why, was, level, chosen, over other. Frameworks, for this project we've, dug into a little bit but I'm curious you know is it just because the name sounds cool I really like the name level I think it's a great name but were, there are other reasons why level, is chosen and, really, articulated. For this particular, project so well, basically yeah. You're correct in, saying that laravel, occupies a sort of gray area it, was one of the frameworks that came a bit, to the game so to speak and, it's. Internally. Parts of it are really based on Symphony so like internal works of laravel use, infinite, components, and. Well. From. Mine my standpoint I. Would say, its. First. Of all it's really, very, well structured and it, allows the developers, to really, focus on just like. Developing, the, the logic itself not, waste, too much time on doing. Repetitive work. But. Really be, able to focus on on the meat of the, project, so really really building out the business logic, apart. From that since we are talking about the single page application, so we have a completely, detached front-end, it's also really easy and really powerful, in building, API eyes so. Again. When building an API you can really just focus on on fetching the data returning, it without having to worry about a, lot of the other things plus. It has a great. Way of allowing. Developers. To control, what they want to send back from the information, because. As we already said, or, mentioned, there's a complex permission. Structure in place because, there, are different levels of, affiliation. And organizations. So. This, plays, a huge role in in deciding. For, larvell. It's. It's. Actually they have built-in. Integration UJS, so this actually, speaks to head to it being a good choice for single, page applications, and. One. Of the main selling points, is as, someone. Mentioned the, team their, internal team that should later, build out the project, and and continue, maintaining it was. Not familiar, with with laravel, or I think, they were you. Know Popplewell but, since. They were not. That familiar with any, framework, or they didn't have a preference, that, Laura well is a good, choice because it's a lot easier to learn it has a much. Better. Learning curve than other. Frameworks, like Symphony because you know Symphony is more I, always. Say like you need to be more of an engineer to, to do Symphony and laravel. Is more, free-flowing so, it's it's, easier, to begin and really start seeing results right, away yeah. One thing that that really, makes great is how. It focuses. So. 100%. On, a great developer, experience, this. Makes it really really nice to work with tool, and. Anything. All those contracts, you know from Symphony like a dependency. Injection, contain all of those they've. Taken those same concepts, and made them simple, this, is kind of I would describe the main draw. Thing of flour for, example another. Thing that I honestly do my mind, was if, you want to set up an API you.
Usually Have, to include, authentication. And then you have to put that token. That you have to put that in into the view into the axis and into. All those things and maybe you need to set up an authentication. Token for victory like overall service or whatever so, it's really complex, usually. Like, to go through some tutorial. Of course reached on their allowable. It's one line of code it's. Really one line you had and. Your. Whole brief front-end can't because love automatically. Magic. Transparent. That's, like wow. Like. This. Line of code it allows, everything, to do that automatically, there, was really, great experience, in that and. Speaking. Of API so it was also one important, part here, what's. Usually, not a good idea of technologically. Is, and. How everyone, to just directly bind into database, because. While the stored, procedures, you can do things like triggers, or you can have an audit trail or, other, things in in, modern worlds you really. Want your database, we, specified. On schema, but, then you want to hide. This database complexity. Behind way. Easier, api's. And there's, also bi-level, was the Troyes for this project is because if, you want to build everything API, based anyway, a single, page application, as a next natural choice because. Then everything is API, based you, basically, dogfooding. Api-based. Approach, so, that other systems, in the future like is a party system and like like in Turnersville, party system and you like combining. Needs, to get data from the same database can. Use those api's, to basically get. Their data out and in in the, inconvenience. That so. That one made you have to basically build, up a database that, you're, building internally, to the organization. Up to success, by, providing this API. Layer that. Can then be used for, everything within the organization. To interfaces. In the database. And, I think that that's, also very powerful, way and again here everyone has some strange and.
On. The other end everything is a lot more bare-bones. And what we use to from Drupal for. Example just, for, our audience, that are familiar with Drupal, you, have something, akin to entities, for just so-called, models, but, they are like directly, he added to tables, and then you add like things like you wanna go, to some other table so you define relationships. Like this has one, for. Example a user has one. Email address or. Things. Like that and by, doing that you, very simply, can Kindles. Are basically, this complex, structure in the database you can describe. The same logic in your application. And, again this is when you have to work with very custom, data models, it's, a pretty good way to ensure, you can can, build an application that, tailors, to your database and, not, an application, that defines, the schema like, that and there. Was really another. Huge. Advantage here, in that, and yeah it, makes everything basically sun, block then, something. Like samba so that's really, cool. Thing, baby. What's, the backend, database that, you guys are using to this in. This case it's a Microsoft, SQL Server thing. So. I love, that I can work easily miss my Scala, but it can also look seen, here was my strip ms, SQL server, so. Microsoft. There's other bindings. Basically. Yeah, tell. That back now. We. Haven't had any, issues with with, some, custom stuff that's that's. Applied only to use two miles. To ms, SQL server so I was, actually surprised, that it works this well I was I was, interested in seeing how it works because it's really an odd choice to, use like PHP, and then MS. Server. But so, far really like, what we're doing three months of work already not, a single issue was, was, noted I really expected to like okay finally, I'm going to submit like two eloquent. Is called your or I'm told that that, laravel is is using I was, ready to submit like a bug report like okay this is not working in in SQL Server but so far it's it's, gone without a hitch and this. Is it's, really important because those fabien as you mentioned when, you have an existing structure to. Like like elephant really helps because you, have, the freedom to, build out your model, without, having to to alter the database because you know all the model modern frameworks, have is this, way of yeah, define, your code and then the. Database will be generated, based on your code like you define, the class system in code, like entities, in, Simferopol. And in. Case in, this case you really have database, that has, 20. 30 years of data in it so, it's not an option to you you know build, out the model in the code and then like hope to, somehow, fit everything together so this, is this is one of the good. Things about floral yes. Was also for this particular, kind very important, for them to be which is a.m. because as I said the data migration, process which part of this project but also designing this, database, structure, so. Why the date data is for two years and more older, it. All gets important, into a very fresh database, so in theory the. Model of the application, providing, that thing would, have worked but. The problem is and it was kind of what the in previous, database was like if, you do something like that then. You have some problem that's right even reports, can get very tricky at times because. Requirements. That are very. And that. You need to generate some reports, just for the business, to work correctly and. If. You can't generate those reports, you're basically toast and. So. One, of the other parts, of the project not. Relate to now but, more in general was that, we took care that we said we need to build, me, to migrate, this data as soon as possible, and then we need to build out all this report, so, that we can prove that, the system works and not just after the fact after it has been built for three years or whatever they. See we, cannot get to report job you need, so. But. Yeah here laravel, really bus bus was nicely, adjusted to. Being able to fit, to, whatever data structure, you throw. At it, wonderful. And I know that it's one of the things that I'm sure is gonna be very interesting to our, Drupal audience, is also the notion of laravel, adopting.
Already. Encapsulated. All this so what. To do is just you know you have, API endpoint you specify, you. Have the documentation, you take what you need, specify, it through the front-end you get and, basically, the back end already sends you the data in the formula tuning so but, we had some work to do it to adjust it but it was really minimal, so yeah, so to make this more concrete, of, what this does is let's. Say you want to return, a member and. The member has has. An address and you want to return the address in, the same API call, and, all you have to do is basically add, to the API call, this. In. Code and then, you include that, you wanna for, that member address, running, to toes and then, due to the relationship being, already defined, that one member has an address it. Gets automatically, put, in so, again it's nice, nice, developer. Experience, yeah again that, we have seen yeah. Because you know in in in, other you always had like a, trade-off. Either you, will load like I already, met applications, that you know you have wanted. To show a list of 100 entries, so let's say in this case you want to show hundred members and each, member has has, a relationship, to an address to. An email to. Social, media to. Bank. Account to whatever. Other information and, then, you end up with like pulling one third of the database on an API call because you know we want to display all the data and the, other end, is you, end up with a lot of API, calls because you know the basic data and then for each role you have to you. Get like okay, these are the routes to the other information, if you want to load it and you do a lookup from the front end and then you end up with with a bunch of API calls that just cause. A lot of server, activity. That you could like, same with loot with, a much simpler call so in this case we had like a best, of both worlds approach where, the. Packages cells allow us to to. Include the information that we need dynamically. So if you want you can just just get a flat list with just the base information, from from, your model, or for. Listeners. Who are more familiar with entities and in. The other case if you want to show like. Relationship, data in the table, as well so let's say if a, member has an address you can just specify it and you can even drill down to the, field level so you can say okay the address itself has 50, fields in the, table but, I don't need all of them I just need like street. Address state. And. That's. It so you can just say okay just give me the address ID give. Me the street, address and the state and it will be done like that so this, is this is one of the one of the good, parts of about this package. So. Basically there, has been a certain, push of. Certain. Developer, types that's a AFP, API needs to be very pure, it. Needs to be a pure in that it only returns like, the war date and, then. You need to do another eject, call for the address etc like, that and then. Then, you have rescuer which basically, allows you also to do such, query crying, from the from, the kind, person, is, basically, doing the same but, lower basically, its pragmatic, that's. Kind of what I would call it. Personal. It. Allows you to be pure if you want to be but, it's pragmatic, by default, that, it gives you the best out of those bars and that's really great another. Package we used originally, not. In the game but originally it's a package, but it was still, pretty nice for some early stage demos, but, now but, Lenova. And with. That we were able to demo at least all, the data is now in the system we can access it we can drill down and again, that was already making an impression. Early. Wonders prints been the front end and back end was not good, out yet much just, be able to see all the data. So. That was also pretty good larval. Always like. I used a bunch of scaffolding, applications, in different technologies. From. Dotnet, to Java but, larval Noah was the like the easiest one to set up and to like, as. You said just to be able to okay this is the data you.
Can Just. Display it and then. Time to develop your your, own app it's, it's, really powerful, and it's also developed by the core team so you know that it's of high quality. I'm. Really interested in in talking more about the kind of, how. You describe their evil as being pragmatic we'll, take that offline but, Fabian, hey amp last long kind of curious one of the things that you mentioned as well was you, know we talked about filtering, a little bit we talked about eager loading but, what about enabling some of these really complex, workflows, you know I know that one, of the things that has to happen with these members, and this application, is that they have to be able to do certain complex, things engage. In a process over a period of steps what, exactly, how, exactly, did you use laravel, to, make. These complex, workflows, really, streamlined. And much, more easy. To build and also really straightforward for the, members, side of things. So. As like the like the saying goes into our web there's a package for that so in. This case there's a fairly. Cool package it's called larval actions, which. Is which. Is like focusing, on they. Called in vocable classes so it's basically an action, as its. Name, defines. It it just focused on executing one action and how. It's how. It affects development, is when, you think of a workflow which consists of certain steps so I don't know you have a new, member you, want to make sure that you fill out all the enforce. Important data you want to verify that information and, then you want to like either, activate, it activate. That member or, maybe you want to, get, some, more information, and things, like this so in, this, case each step would be one action and. You. Just change the actions together into. A certain workflow so. Because, they have a lot, of complex workflows, where based. On membership, changes. Based. On like. Maybe, even. Like. Moving, an, address for example maybe they need to change the affiliation, things, like this they. Have a certain certain steps. That they need to go through like, the organization. Is there for a long time so, it's, normal in big organizations with, three, million members they all stay, of course they have to have like process, for everything and this. Process results in these workflows so, what what what, the package enabled, us to do is just, like build out single, steps and. You. Can reuse them in each workflow as you wish so, it's it's pretty cool also from because, I'm always interested in the in, the design pattern, /, software, architecture, side of things for me it was really cool because it. Really plays well with certain patterns, that that allow you to set. Up complex workflows without having. The complexity, in the code itself like. You, know otherwise, you would you. Would get, certain, parts of the code that would be hard to maintain and. Hard. To test out actually, and in this case writing, a test for an action is like okay you have you.
Have One test case maybe, it's. It's, defined by the data that flows in and that's it so it's really easy to test test out to make sure that it's that it works properly yeah. Again again, it speaks to the pragmatically. Being, being there well in that it, makes design, patterns, which are pretty, complex or can be pretty complex, easy, to use but, not over abstracted, it's, kind of Ken as a point because Java Java, being. The prime example of having, basically, all design patterns that exist immersed, in PHP. Also going in in parts to, this one, of the larger problems is that you you get so abstracted. That. You, get. Lost in translation or, you could lost in the in the iterator. Lost. In in the decorator. Where, you have five layers of decorators. That are decorating, each other etc and we're in in the end you, have so much complexity, that, a. Team. That, is more, at, the normal. Developer, level to, junior, level will. Have very, very hard times to even grasp, what this code. Is even doing anymore in someone, in five years well I just have to click five times, to. Do that and this, fortunately. But. Really. It's pragmatic. Here in that, you define the action it does one thing it does it well stink, like the UNIX command and you, can have, an isolate test and that's it. Yeah. So think. For example. In this is for, exact a, certain, action to. Be a, synchronous. So for example I don't know what this action is. Export. 20,000. Rows from the data table into a CSV, file for example you don't want this, to be like. To. You, don't want to request too late for for the response from this action you just say okay now I want it to be a synchronous, it's, basically just one line of code and the, action will be called the synchronously, it will be done done. In the background then your, code can go on and do wonderful things and then you just decide, what to do when, when the call is over but basically, it's it's just a one-liner, I can, relate. In symphony if you want you have to find a bundle or a package that does this that you have to include it and you have to trigger an event you have to give it to payload and you have a whole, structure that you need to go through before you are able to to, really just you, know do, the thing that you want to do and here you just say, you take the action that you had and you say like okay this is q-ball and that's, basically it, will take, the configuration, and. Trigger. Trigger, it itself, and that's, it so, we will really cool cooling it, takes a while to not. A while but you know it's if you come fresh to this it's great if you come from a world where you are used, to like having, to jump through two. Hoops to achieve, your goal it. Can be astounding, to know like, wow. I can just add one mine and that's it like I'm not used to this and then I'm like okay you, know as when. You do a lot of software development, you realize, that the complexity, has to be somewhere you know, it's if you do a lot of simple actions, they. Will have to be bundled together somewhere, and the complexity, will end up there and, the. Plural the complexity, is taken. Away from you into. The into, a core package so, take take out all this okay you need to fire this together and, you need to call this and that and just. Give you a one-liner, that you can call and and, just focus on on your stuff so that that's what's what's, really cool about and. All the packages that are that are developed for laravel they. Follow. This the same design principle, like make it easy for a developer to use, it and then it will be used so don't. Don't. Over engineer make. It as you said pragmatic, and. It. Will it will be used and that's that's what we had with with all the packages that we include, in the project. Amazing. And I guess just in the topic of abstraction, one of the things that I think is really interesting about this project is that you leverage. A lot of the existing, capabilities that. Were, available and level to enable, access, control at a variety of different levels how, did that work exactly, and how, does the access control that was provided to these users relate. To the, filtering, that we've already spread. So. From from, a business.
Side Perspective. We. Already touched briefly, on the subject it and, basically. Users. Are always, part of a certain affiliate, so they are always part. Of some, organization, let's call them organizations, because it's I think it's easier to, envision that and of. Course the user, should only see the information that's. Available, in. This organization, they should be able to see like all the information, that that's, out there so like, the first we, have this really low-level filtering. That says like just. Show the user the data that he's allowed to see this. Is what we call like a first level low level filter that's, basically, what. We had to do in Largo and what's what was really easy to achieve is. To, have. This. It's. Called scope, it's, a global scope per lateral definition, this, is a bit of a technical term but what it does is it takes all the queries that are that are ran. Through eloquent, and it, applies a certain, filter to them so you can define what the filter does and what. It what it does is all. The data that, can, be filtered by a certain, affiliate. This case will be filtered, with with, this affiliate, so. It, can be one or it can be multiple. Affiliates, but the important thing is all the data is filtered this, way so you. Will never end up, in a situation where a user will. See data that's that's, not there shouldn't be available, to him the. Good side about this is if if, you, want to do some reporting, for, example, and you. Want to see cross affiliate, and we want to see everything you, can easily do this by just saving, the the, filter so it's. It's possible and the. Benefit of this, is the, developers, don't need to take care of it you know you just you just go away and the. System, will take care of all. Of these things and you, know you don't have to apply. Conditions. To your queries anywhere, or to elephant, elephant. Queries you can just you, know write, write the code that you that you need to write so, again. Sorry. Did. For, us. This is very similar to how note, access, control, bugs on Drupal, ways. When. Think Andy can grant access, control. To try not note, basically you're part of an organization because. That your user is, part, of this organization in, this, organization. That can then grant a Content, note the. Access control, so. If you are part of this you will automatically, be having. This access control, so, that's one part of how, Google makes, as possible, or the other as a symbol query, ultra. Where. Baseman. Drupal you have to implement like three things abuse, very alter and it's very, very. Also if, you want to have all the use cases in there but, if for example all, your Drupal is is built upon views it can be as simple as adding a mandatory filter, with you and. Then you also have that he, again level. Just gives you some concepts. Of making. It possible, to do, this that. You can it's basically giving you again a framework, of, how you can implement those access. Control in filtering, it's still not easy because. It's. A hard topic regardless, in that, it just as caveat, on that but, this, world basically allows, you to do this like, not exists. For a group, access or group filtering, that Roopa also can do in in. Lava and this is how we will, be able to achieve that for ensuring, that for, example if you choose something on the front and you're not always passing. This back to the back end where. Basically, anyone, could hack hey I'm gonna use some other group instead, and, when, you look at that but, because it's service right sides you only have access to those and this is filtered for you automatically. You cannot basically access, so until, the fun and also does not need to deal with it the, funding can just say hey just a me all members, and depending, on the service side scope it will get very different, data. And. I think friend, and also is next. Yeah. So so. This is this was one of the types of filtering that we had we, had another two layers of filtering. Added as you, as you Fabian already mentioned we had we.
Had Also the goal to or the requirement. To be able to filter on, an, organizational, level so not just give me all all the data from all the organizations, I have access to but, give me data for a specific organization, and this, meant that all the, data all the other data, in all the tables that we have had. To be filtered, down by this organization and again it, was fairly, I mean easy it's it's. It's. Easy to set it up but then to implement it you have to you have as, a, caveat to that where you have to to. Implement. The use cases but it, was still if. There's a place for it and and, you know exactly where you need to go to achieve that and. Then. There we had the third, level of filtering that was like, the dynamic filtering. That the users themselves can. Apply which. Means if, you have a table, that displaying. Members and, then you do want to go and say okay give me all the members that are from, a certain state because. You want to organize an event in that state and anyone, by those people, so. This. Is also. Fairly easy I mean for. For the basic use cases it, just goes down to filter the table, based on some information but. You can come across some more complex situations, where you need to like even, even, invoke some business logic before or after applying the filters and. It's. Also fairly simple in Laura where we can you can do that you can just define a filter class and implement it and you know literal it will take care of the work for you and you. Just pass it of course you pass it through the through a call and this, this will be this, will be done. Wonderful. Well you know we talked a lot about kind of the backend logic and how you, all have really successfully. Abstracted. Out a lot of this complexity, that's in the business logic a little. Bit about where users, actually interact with this these workflows and, and leverage. Things like their Apple actions from, their standpoint behind. This kind of class layer, which is the front-end and one, of the questions I think is on everyone's mind especially, as we listen to this is well this is a very complex, application. Why, did you go with the single page application, approach whether, there considerations, may be to go with the traditional model a more monolithic approach. Well. They, were certainly. Pros. And cons in both. Approaches, so people, are more used, to maybe the the monolithic the, I, call. It old-school approach. Which. Of, course has its has. Its benefits, but in. This case I, mean. You, know that the. Web is not now, it's moving. This way for a long time already but you, know this is like especially for for, these. Kind, of hidden, business, side apps that are not where, SEO is not important, where you. Don't have, to take care of marketing, and branding or whatever they're you can really focus on on like. A the management, because after, all this is a data management platform. That, we're talking about and it's. Kind of natural for it to be, you. Know to enable, the users to do much, more things without having to wait each, time for the page to load it. Every run. Through the server and and getting, the information back, takes. It takes, a certain amount of time you know you can do a lot of caching, you can do a lot of optimizations.
But In the end you, will have to go to go to the whole cycle each time and in this case you, can really like. Focus. On okay, so now I have hide this page I have all these available actions from this page and each of them will take a certain, amount, of milliseconds, and we, are talking about like two two-digit, load, three-digit, numbers which. Which, make the whole experience for, the user like, really Pleasant because you can just click, around and things are happening instantly, without. Having. To wait for the page to load and, for information to become available so this, is like one of the one of the things that I stress, always to people who okay so you want to have a b2b. App or you want to have like a. Platform. For managing data and, this is this is a good choice it certainly, adds a, certain amount of complexity, because now you have a full, stack environment, you just don't have your your, normal environment. Where you can focus on on PHP and just building out the. HTML. Or whatever, now, you have to like, decide. Where to store some, of the logic so some of it belongs to the front and some of it goes to the backend but when you were and you know what you're doing it's it's much much, more it's. A much better approach than then. Just just, doing the old-school way, yeah. Absolutely. One, other thing is as, I said already they. Need to dogfood the API so, if, you don't use those if you nice. They'll. Be in some corner trying, and be. Left forgotten. So. It's. Really important, that those, API used, at the application, is built Lass's API so, that maintance be. A approach, the, single page application. Approach kind of the only one, obviously. Especially for, something that is called a membership. Application, makes. A lot of sense to actually be an application, and I mean we've all seen how rich. Applications. Feel. Very, similar, to desktop applications. Nowadays through. A good, made a mobile application if, he, is almost just, indistinguishable. From from, a native, application, except. For maybe some spindle agency, so, it. Really made made sense me and Matt on the other hand legacy, is. Not only me but also, allows. The low b12 a later here, and. Announcement. Something nice for people, in that I've been also talking about basically. Bringing bringing. Legacy. Applications, back to, ensure, that, this, full stick also has a lot of problems and you also always, have to compile you you. Have to endow. That again is so pragmatic it, makes it the most simple. Tool to, implement, it really saying it's like if he is natural, in that you. Just have all the steps that are out for you and, you basically can just start, building from, from, day zero in, that you don't have to do large. Plumbing, first and then set everything, up but, really you're just defining component. And it's found you can use it in the. Rest is again then automatically, how, it should be oh yeah. Legacy. Will be making a comeback I would. Say right now in that's already happening, but. We. Will talk a little bit more at the end. Wonderful. So the kind, of you, know we talked a little bit about the API is and the link between how, we can, handle presentation, and data within, this application how. Are you actually building, the front end with UJS, and this really brings us to kind, of the the actual interior, of the and, the inner workings, of the, single, page application, and UJS. So. Yeah UGS. Was the natural choice because, it plays, so well with Laurel and the. Next step was to find, like okay now we want to use, UGS, so we need to like, use there be some basic components, that you want to use everywhere, so if you have, tables. You want data. Table to find once and you don't want to have to. Like. Implement. A lot of things all the time and just basically, boils. Down to copy pasting, so there. Are a couple of frameworks, that are really good. So component, frameworks for, for view Jas. Beautify. Which, which we end up choosing and kazar are probably, the two most widely, used ones but.
Beautify. Is by. Far, the simplest one to integrate, so, it's plays. Well with a lot of CSS. Frameworks, so whatever, you choose from from the CSS standpoint the material, bootstrap, tailwind. Whatever you want to it's very simple, to to integrate. It with beautify. And it, has a huge. Repository, of, components. That you can just plug in and and, start, using so this. Was affirmed from the fronton standpoint this is this was the like biggest choice we had to make and. So. Far I, between. Run into any problems we, didn't we, basically didn't have to to code to, change any behavior, we didn't have to like. I'm, used to I did, a lot of you and, a. Lot of angular projects. And, sometimes, I ended up browsing. For the github finding. The component. That I need and then checking the inner workings, to actually be able to do something and here. All I had to do was like browse, the documentation. If I was, unsure on how to get, something done and that was it so it was really a pleasant. Ride for me yeah. Which is just, a pretty large review, of several. Different technologies, that were available to us at that time when. We did to choosing, and I've also looked at a lot of the inner workings of code and beautify. Came out as most clean in, all of that where, the components, even looked a little bit like react like so. Very clean components. Very nicely to use in for, example such, things for something like a flip card you just define a flip card and then, you nest, two slots maybe, below like the children, and it just works and this is how governance, should be if. You use it you take a look at the documentation, and also data tables, it made it really really, simple to do just more larger, complex, things that are usually taking. A lot of time to browse out in, a place and such, saved. Us time. Well. Speaking of time we are running short on, time here, today I really, think we can talk for another couple hours about beautify, and some of these really interesting elements. Of the project I'm particularly, interested, in the. Kind of component, architecture that, you just described, Fabian unfortunately. We are at a time so I do want to take a little bit of an, aside tag, here and talk. A little bit about some, of those other things that we're working on out in the world today I guess, I'll go ahead and start and we'll just go around the table and hear, from everyone about something. Cool or interesting that you want to share with the audience that you're working on shameless, plug could, be an interesting piece content, you're working on could, be a cool project so, this week I've been working. With the decoupled, A's team, well dey's is the kind of premier, and, first-ever. Community-led. Headless CMS conference, in New York City it's also the kind of decoupled, Drupal unofficial, conference, as well and this. Week is your last week to, get I'm not sure when this will be posted actually so maybe I shouldn't say this but we, are working very hard to prepare for the conference you can get tickets right now it's a couple days comm by, the time this comes out sessions, will probably be announced, although, with, the current. Situation around. The world in terms of public health we'll see how, that goes so it's a couple days comm if you want to check that out and let's. Go ahead and switch over to Lazlo, what's here a side tag for today yeah, so, we. Actually, touched on it or Fabian mentioned it and I completely agree so the back end is kind, of coming back so, so. Like legacy, apps are or making their way back and to. Honor this there's a really cool new laravel, project, slash. Package that was announced. A couple months ago now it's already available, it's. Actually, really easy to include it in the upcoming level-7 release it's called live wire and. It's. Like, it makes. It so much easier to, you. Know create, components, that will seamlessly, integrate with with. Your existing application. Or if you're starting a new one it. Can like. It it. Allows developers to really code.
How They use the code so. If you're used to like legacy. Apps and how you code on them how do you how do you structure your code where you put your components, and everything it, actually allows, you to do, the same thing and but. On the other hand it. Seamlessly, integrates, between. Components. And the backend so that you can you can leverage. Api's. And things, like that without having to worry about varying. Without having, to to. Specifically, specifically. Call like. Ajax and, and, perform. Ajax course you can just it does it out of the box so it's it's really it's, really a cool feature and, the, shameless plug would be that I'm currently writing plug. In 4 for IntelliJ. Or for PHP store that's. Will enable users, to use, autocomplete features, and things like that with. With the livewire package yeah. Life. I immense, a huge part of the vision that I've shared a Drupal core I was not aware of that at that time, so. They. Did, all of that they did use email. Ever 7 days now switched over to define for comments phenomena and blade like this and add syntax but completely, as tags, they. Just do the X and, then the component you can just define a component, and, you can also create compressed, class but, if you're not PHP, savvy you can also define a component with some properties, just as as a blade files so. It's really, pretty great it, also takes the best of the worlds of what, we had into play jacks system, and still. People are using it. Takes this and makes it. 10, or 20 times better in. That it makes it developer. Experience, of using this so. Easy. To. Play 2x dollars like this you have to go through all those steps to, make, something and really. Hear you for, example you have some, counter, and, when you increment it you just could have put like a like. Similar to a virtual. Property. By, our Colin click equals. Increment. And then it automatically, calls the increment, method on your class in the backend whenever. Someone takes a start. Just that's. Why we are saying our back end is coming back because, basically does all the things of, blue. Or whatever in, simple. Things but really as a pure bacon bacon application, in that combined, with turbolinks, you, pretty much it near. Seeing. A page application. Thing is, unfortunately. Not as data-driven, as I would like that is vide HTM algorithm, they, speak of HTML, it's a data structure, now I assume they'll be running into some problems in the future was that I thought I was still, a very interesting thing do. You think I want, to talk about is talent, because. We've we've, started to users, and tail end is this crazy thing where. You. Basically put in nine styles as a critics, like to call. It so. You if, you want to start something you put like text, Center and then. You put MD. Fund. Large in. Such things so. And people like of saying hey this. Is the United States I never worked that when. The United States originally. Had been had been invented those. Inline styles had been where, you had like a thousand, HTML, pages that, you were putting, in HTML, by an end etc so, the Cascade, made a lot of sense but. Today we are in a component based world and it's, so much more, simple to just not, have to invent. A class for everything, you want to style, so for example you have a card and you need to put card this is cards and this is or. This. Is about an oil whatever and, instead. I know you have your blue button component. Component. Button. Component, and, well. We've, gone away from that and then you can really just put put, your classes, in there and you don't need an external, CSS, file, and this, makes that it, makes things much, more scalable because, one of the things I've found on many of our legacy projects.
Is That the CSS, gets. To be immutable, over, time that. Means no. One dares to change, it anymore because. No one knows what side effects it would have and. That. Means only new CSS, get added and that, happened not only with our. Project, long, legacy projects, even with the best, developers, and about it happens and the proof of that is it, happened to say it was it happened to get her it, happened to all those organizations. That, I basically had, the same problem, of only new code was written and the, more developers, you have the words a problem guest and. This is basically taking, those, global. Changes, that change everything, you change one class that can change everything back, to localized. Changes, if. You change this part of the HTML, if you change this template, it's a only affect this template and this, is just absolutely, fantastic. Because. It allows you to prototype, very, nicely it allows you to work very fast and. We're. Trying it out and it, feels very feared. To. Read HTML, with all those classes, in first but. It makes a lot of sense so try. It out, tail and CSS, don't. Work I think maybe, calm, but, yeah tail in CSS you'll be able to find it. Awesome. Thanks Vivian how about you Michael what's your side tag for today I wanted. To mention the, acquired, podcast. Outside. Of of cost the tag, team talks the acquired podcast. Is my. Favorite it's awesome, they talk about tech. IPOs, and startups. And they cover everything from the history. Of the founder through. To the history of the company what's, made it successful. The challenges, the business, models, future. Predictions, so. For example, you, know. Let's. Jump to the two-part series on the history, of Elon, Musk and what led him to, becoming, a quote-unquote founder of Tesla. And, you. Know as an entrepreneur and someone who's worked on a lot of startups it's. Really awesome to hear about like the trials and tribulations of, you. Know of Elon you know leading up to this and the, near failures. And catastrophic ends. To Tesla, along the way so. It's fascinating and, it also I think has, taught me a lot about you know how to on a business including things that we can leverage and tag one, listen, you like the Shopify, talk, and, how they leverage, partner, relationships. Early on you. Know reminds me of our approach to tag one quote and partnering with agencies Reb, shares to. Grow our market so if. You're interested in, in, startups, and technology companies, I highly, recommend, you check it out and they. Actually gave me the idea for this new section in our podcast at, the end of their talks they bring, up something interesting and exciting that's going on that, you should check out so I hope you guys like this new section we're.
Looking For a name for it so please. Please reach out to us if you've got a great. Name for what we should call this section and check. Out the acquired podcast, at acquired, dot, F M. Well. I'm personally a fan of a side tag but I think it's a joke that'll go over a lot of people's heads so. Her. Name alrighty, well we are just about out of time I want to say big. Thanks to Laszlo and Fabian. And Michael for joining us today as we, mentioned, at every single end, of this at, the end of every single time one team talks, episode, all of these links that we mentioned today are gonna be online at the top what are you interested in beautify or tickle in CSS, Fabian. Or other things that we've mentioned today they'll all be available in. Conjunction with this talk if you, do enjoyed these episodes please, feel free to upload, subscribe. Share it with your friends and family your grandparents, and. Also check out past talks that we've done it tag 1.com / tag team talks you can always suggest, a topic give, us some tips drop us a line at tag team talks at tag when consulting com I want to thank everyone today for, joining us as well as my dear friends Laszlo Michael, and Fabian, and until. Next time.