Hi everyone. Today I'll be talking about moving from legacy code base to a modern frontend. I hope you enjoyed this story. It is kind of a work in progress, so it's not really finished yet. Like my team hasn't completed the migration, so the presentation will be just cut in certain point. But I think there's still a lot of things to talk about. So before I start, my name is Gregorz. People called me Greg. I'm head of engineering at Caligo Solutions. We build software for banks and airlines. And I've been using JavaScript for almost 10 years, but it's always been kind of a second or third language for me. So I primarily use Ruby and Elixir, but because I've always been developing for a web, I had to use either like, you know, the old, very old JavaScript like jQuery, or the more modern one like Node.js or TypeScript. So the product that I will be talking about is called Travel Edge. And it's a travel booking site. So we offer hotel bookings, car bookings, and flight bookings. And we developed it as a white label. So we basically tell banks that, hey, if you want to allow your customers to use their credit card points to spend them on hotels or flights, then we can give you that platform. And the code base has been developed since 2014. And even though it's relatively new, it's just for years. I believe that in JavaScript world, it's like a new era because it's been developed before really the modern features took off. And now it's a multi-tenant application. So we can deploy this application separately for each tenant, like you know, you separate database, separate servers, et cetera. But we can also use a shared hosting so we can determine the tenant based on the request host and some other attributes. So each of the tenants has just some custom JS code. Like we use shared JavaScript code and we use some custom code on top of that. And we can customize like the whole front end. Okay, so what do we start with? Our technology stack when we started was Ruby on Rails for the backend. Then for the deployment, we use a platform called Opsworks. And even though it's not related, it is quite important part in this talk. Then we use Prokets, which is part of Ruby on Rails asset pipeline, which is basically a way to get from any kind of source code like JavaScript or, sorry, like TypeScript, CoffeeScript, et cetera, to bundle together in one file for the browser. Then we use Bower. I'm not sure if you remember that. It still exists. It's in maintenance mode. We used CoffeeScript and we used AngularJS2. Now what we want to end up with is we don't want to change our backend, but we basically want to change everything else. So instead of Opsworks, we want to have Docker containers. I will skip this part during this talk. Then we want to move from Prokets to Webpack, from Bower to Yarn. We want to rewrite our CoffeeScript to TypeScript and move to the modern version of Angular. So in my presentation, I will focus on these four parts that are most relevant for this meetup. The first part will be about CoffeeScript to TypeScript migration. How the migration looks like. Basically, I don't know if you've tried using CoffeeScript before. It's kind of like TypeScript. It's just another language that compiles to JavaScript. CoffeeScript has a syntax that is more familiar to Ruby and Python developers, and back when it was created, which was in 2010, if I remember correctly, it was quite a big thing, because it added a lot of nice features on top of JavaScript. Basically, it allowed you to write 10 lines of code, rewrite them in three lines of code. Over time, CoffeeScript became less and less relevant. So the features in ES6 and later ES2017 made it kind of deprecated. So you can still use CoffeeScript. And right now, the CoffeeScript compiler, we actually compile it to the modern JavaScript. But really, nobody uses it anymore for new projects. And that's kind of a problem for us, because finding new developers who want to work with CoffeeScript and who understand CoffeeScript becomes harder and harder. So this is one of the reasons why we migrated to TypeScript. And now, the migration process, it seems quite easy. So basically, you need to add TypeScript as your dependency, write one TypeScript file, try to compile everything, and make sure that it works. But on top of that, we need to research some good TypeScript practices. So it is kind of a new language. It adds new features, and we didn't have anyone who was very experienced in TypeScript at that point. We're all more CoffeeScript developers. So we needed to do a bit of research on what to do with TypeScript, what not to do. We didn't want to just rewrite it to another language and not to use its features. We didn't want to have, like, you know, CoffeeScript code just in TypeScript syntax. So after we did some research, we asked the most experienced developer to rewrite a few example files, like one service, one controller from our Angular code base. And after that, the others could follow. So this was like the idea that, okay, just give an example to people on how to do that. And after that, once the research was done, once the initial work was done, we started writing all new files in TypeScript. And whenever there was some work to be done in some big work to be done in some CoffeeScript file, we said, okay, we let the developers decide, okay, this work is big enough to rewrite this code in TypeScript. So this is not a perfect way to migrate because it keeps both TypeScript and CoffeeScript in your code base for a long, long time. So that's one of the challenges. So there were a few challenges during this migration. So the first was to make TypeScript and CoffeeScript work together. It's not as easy as it seems, primarily because our, the next part of this talk, the Spockens, the Ruby library made it a bit messy. And sometimes the TypeScript files and CoffeeScript files just just well and bundled together correctly. And what I talked about a minute ago, it's hard to prioritize a task. When you're a startup and you have really a lot of stuff to do and you know, I'm sure some of you at least know how it feels. It's very hard to tell the leadership of the company that's, hey, so this week we want to spend some time rewriting the files because then they ask like, okay, so what's the point of that? And we're like, well, it will be just rewriting the new language. For us developers, it makes sense because then we don't have to deal with this old language. So the new developers who come, they don't have to learn the new language. They don't have to understand that code base. But it's really hard to prioritize it. Also, one of the initial challenges was that a CoffeeScript is dark type. So it doesn't have any type annotations like JavaScript. And because of that, we didn't have experience with using types. And there were basically no type annotations anywhere in our frontend code base. And it's hard to initially start using types because you can start using types in one file, but then majority of your code ends up with the type called any, which means basically any type, right? Because how can I use another, how can I use specific type if all of my application just doesn't define types? So it's basically impossible. So initially, we just had to add a lot of type definitions, a lot of interfaces, etc. before we could actually start using them in the whole code base. So the result of that part is that for now CoffeeScript and TypeScript still exist together in our code base. We are on a steady path. So we are migrating every new piece of code is written TypeScript. CoffeeScript is just for minor changes. Some files in CoffeeScript will remain there for a long time just because these files are not really touched by anyone. So if something is not used, it hasn't been modified for like two years, then we will just let it stay there for a while. It's not a big problem. But we are on a path to be 100% CoffeeScript free in a couple of months. And we're very happy about the new features that TypeScript provides. So people are often resistant to use statically typed languages, especially if you work with languages like Ruby or Python, then you have the whole power of the dyke typing and you just don't have to worry about types. But eventually you find that they are useful, not everywhere, not always. And TypeScript gives you this good place where you can use types, but you have the any type. So if you don't want to use types, you can just ignore them for a while. So that's the first part of our migration. CoffeeScript to TypeScript. Now, as a relation, the second part is Bower to Yarn. So first, why did we start with Bower? Bower years ago used to be a go to solution for JavaScript files management, especially for the front end. So before Node.js really took off and people started using the NPMJS for all the packages, Bower was kind of a thing that allowed you with minimal configuration to download the JavaScript libraries and configure like manage them in a very, very easy way. However, because the NPM repository is so much bigger, Bower became kind of irrelevant because people figure out, okay, if Bower is only for the web and NPM is for everything, then why don't we use everything in NPM? And then Bower just became kind of deprecated. Even right now on the main page, they say that the Bower is maintained, however, they recommend switching to NPM or Yarn or some other package manager. Then we had plenty of issues with Bower during deployments. I think Bower is hosted on Heroku and I don't know what's the configuration there. I believe that Heroku just sponsors servers for that. But sometimes we had troubles. There were lots of timeouts during deployments and that caused us like, you know, it gives you a lot of stress if you're deploying a few servers and one server or two servers just do not deploy correctly because of the timeouts. So at some point we just decided that here we can't do it anymore. This is too unreliable. And on top of that, it was harder and harder to find certain packages in the Bower. Like the JavaScript library maintainers, they just don't add the Bower.json file anymore. They just put everything on NPM. So that's why we decided to switch to Yarn. So at that point of time, Yarn was this new hot thing and everyone started recommending that. And I'm not sure right now, but I think the NPM kind of caught up right now. So the difference between them is not so big anymore. But back then, all the comparisons said that, hey, Yarn is much better and it's just like a drop in replacement for NPM. So we decided to do that. And Yarn was also recommended by Ruby on Rails core team. So they were working on a seamless integration for Rails with Webpack and they just said that by default, this library will use Yarn. So that's one of the reasons why we decided to go with it. Now, the migration path here was first to make sure that Yarn is installed on the server. So like, you know, just add some script to the server setup. Then we had to convert the Bower.json file to the package.json. This was very easy. Replace packages that are not present on NPM. This proved to be a bit more challenging. I will talk about it in a moment.  So this, again, Yarn, sorry, Bower was installing things to Bower modules. NPM is installing to Node modules. So it just had to make sure that the assets are available everywhere. So there were two challenges with that. First, our deployment solution only used some really ancient version of Node.js. If I remember correctly, it started with zero, which, yeah, I think you know how old it is. So yeah, so the Officeworks platform, which is part of a AWS platform, it's kind of like a web interface over Chef. So it had some pre-installed packages and some Chef recipes that were just built in. But all of them were very old. And even though you can recommend and ask them on GitHub to add the support for new versions, all of the issues are basically ignored. So the only way to deal with that was to write our own Chef packages and do some really hacky stuff on the Officeworks platform to make it work. So eventually, we did that. But it wasn't a pleasant experience. Like, you know, when you go to your platform and you see that the last version of one of the most critical libraries comes from five years ago or even before, that doesn't give you a lot of confidence about the deployment platform that you're using. The second problem is that lots of people, when they were moving packages from our repository to NPM, they realized that the name of the package was already taken by someone else who needed that package to be published on NPM before or the other way around. So we had certain packages that we just couldn't find them on NPM. Like, the package was there, but under the original name, there was something else. So we had to find the equivalents. And it wasn't very difficult, but it was just, you know, kind of tiring and took us some time. But eventually, the migration was very successful. So we are now 100% working with yarn. We forgot about the borrower entirely. And there is no more issues with the deployment. So the NPM repository doesn't cause us any timeouts. We haven't had any problems with that. Now a bit more challenging thing. So we were moving from Sprockets to Webpack. And I'm not sure if you ever work with Sprockets, but back when it was released in 2011, it was really a big thing. So before that, bundling JavaScript files was basically, nobody did that. Everyone, whenever you wanted to add JavaScript file to your application, you just added the src tag in your HTML. And when the user opened the page, they just downloaded 20 or 30 JavaScript files. So Sprockets, in 2011, they introduced this concept. I'm not sure if they were first, but I believe they learned it popular that they started bundling everything into one file. They added the fingerprint at the end of the file. So before that fingerprinting, if you change your file, lots of users still could see the old one because of the browser caching. Because nobody figured out how exactly to cache the files. Because if you want to deploy the file any time, then you cannot give any cache. But then you want people to cache that file because you don't want them to download the same files over and over. So that caching was kind of a problem 10 years ago. But with the fingerprints in the name of the files, the problem was gone. So Sprockets were quite a fun thing to work with. And there was minimum configuration required, especially if you work with Ruby on Rails. It's just, you know, it's kind of built in. However, again, over time, like with Bower and with CoffeeScript, it kind of became less and less relevant. So Sprockets have its own kind of own DSL. They use their own directives like require, or directory, etc. They do not support the common JS or system JS. So there is lack of support for the modern JavaScript modules. But to be fair, that's it. I think that Sprockets is actually still pretty good. And if you don't want to deal with the webpack or branch configuration, then this is still a good thing to use right now. And here a small digression. So I remember during my time working with JavaScript, there's been really a lot of bundlers like Grant, Galb, Branch, and a couple of more. But whenever I read some blog post of someone saying, this is how we migrated from Sprockets to Galb or Grant, then they say that, okay, so we added this one file that was 100 or 150 lines of code. And that's how it works. And like, okay, so the cost is writing 150 lines of code. What is the reward? And the reward is like we are on the modern platform right now. And as you can imagine, none of this platform is modern anymore, right? So the reward is gone. Yeah, so the cost was always too high for me to migrate. And I think that also shows the power of built-in support. So with Ruby on Rails, I never had to configure Sprockets. So I could move from zero lines configuration to 100 plus lines of configuration. And it was just, I was never motivated enough, just because I wanted to be a more on a more modern platform. However, eventually, we decided to move to Webpack, because it supports the modern modules for JavaScript. It's kind of a mature library. It's well tested solution. And now Ruby on Rails provides built-in support for that. So again, we don't have to write the Webpack config from scratch. And we just use a kind of a default config that Rails provides. And we just customize a couple of options. So we chose Webpack. And we never really considered other options. I don't know what are they, I don't even know what are the alternatives right now. Every once in a while, I see the blog post that says like, oh, now Webpack is so powerful that you have to write 100 lines of code, use parcel. And then people say, now parcel is becoming too powerful. So we just decided to go with Webpack because we knew that it's so popular and so big. And it was a very new library back then. It was in version 3.0 something. We said, okay, let's go with it and just configure it once and hope that we don't have to work with that. We don't have to come back to it all over again. Now the migration was a bit complicated. Because Sprockets has its custom directives, it was a big step for us to move directly from Sprockets to Webpack. So what we did initially was we moved from Sprockets to Browserify. So Browserify, I believe it's another bundler for JavaScript that just supports the common JS. So it supports the require function. So this way, using some library that allows us to mix both Sprockets and Browserify, we could move step by step. So I could play a bit with Browserify. I could just install one or two libraries and use it via Browserify and still keep Sprockets. And it worked. It deployed fine. And it didn't cause us any problems. So this allows us to experiment a little bit and check how everything works. And then step by step, we moved fully to Browserify. And then from there on, we moved to Webpack. Now, there were really a lot of challenges here. The biggest one was the memory usage. I don't know how much time I spent trying to figure out why Webpack needs that much memory. Like, I was compiling the same JavaScript files that I was compiling with Sprockets. And Sprockets never crashed. But Webpack really gave me a lot of problems. So finally, I found out that I need to use the node options with, like, max old size or something like this, which basically gives Node.js more memory to use. I think by default, the limit is one gigabyte. And we just increase it to four gigabytes. And that prevented the crashing. I still don't understand why compiling a bunch of JavaScript files that all together are like two megabytes or maybe five megabytes, why does it require more than one gigabyte? I have absolutely no idea. But increasing memory solved my problem. So I don't need to have this idea anymore. And for that, I'm blessed. Now, the next challenge was the deployment speed. So when I finally figured out that, hey, if I increase the memory to four gigabytes, then it works. Then I realized that also the deployment went from 10 minutes to 30 minutes. And again, I had no idea why. Why my deployment became so slow? Like, I'm using technology that is supposed to be faster and newer and better, and it gives me all these problems. So as it appeared, it was a memory problem again. Because even though we set the limit of memory to four gigabytes, our server didn't have that much free memory. So it had like 10, two gigabytes, and then it moved to swap. So of course, it's much slower than using RAM. And that's why the deployment became so slower. So what we had to do is to make sure that the servers have more free memory. This is a bit of a problem, though, because with our current deployment solution, the same server compiles the assets and runs the application server. So if we had switched to something like Docker before, we could have just one very big server with lots of memory that would compile everything and just push the Docker container, and then the application servers would fetch the containers and swap them. But with Chef, the deployment is that you basically connect to the server, you fetch the source code, you compile the source code, and you run it. And it is kind of a waste of resources because the server could use all the memory that it has. But if it uses all the memory, then there is nothing left for compilation. So this is one of the reasons why we are migrating from our current deployment solution. Eventually, we just increase the memory on the servers. So now the deployment is back to 10 minutes. But we know that if we use even better servers, then we could just make it even faster to five minutes or so. And then another challenge was with asset fingerprints. So this is something that we didn't detect in staging. This is something that we detected only after deploying to production, which we had to immediately roll back. Now what happens is that because we compile assets on each server, and by default, the fingerprints of the compiled files depend on a timestamp. It means that each server ends up having files with different timestamps. So let's say that I have five servers, and I download the index.html file from server number one. And it has, in the HTML, I have references to certain JavaScript files. And now I try to fetch these JavaScript files, but instead I connect to servers 2, 3, and 4. And the files there have different fingerprints. So the file that I want is not there. So what happens is that the files are basically not there. Now we immediately rolled back. So the issue was there just for like 10 or 50 seconds. But it gave us a lot of stress. Like, you know, why does it happen? Of course, the fact that the fingerprints depend on timestamp wasn't obvious to us at that point. It's something that took us a while to realize what's going on. So the solution for that was a plug-in for a pack that just generates the fingerprint based on the content of the file, not on the timestamp. So I think what happens there is that it just takes the whole file and it calculates the MD hash of that file. But again, this is something that it gave us a lot of stress. It was quite a big challenge. And it was something that is very difficult to detect, especially when you just do it on one staging server. And then the last thing that was quite problematic was local compilation speed. Because our application is a multi-tenant solution, and each has its own JavaScript files. And locally, each file takes, I don't know, like five seconds to compile. Then if you have 10 tenants, then it means that each compilation takes like 50 seconds. If you have 50 tenants, then it means that each compilation, and you know, if you use something like a Webpack Dev Server that just recompiles things after every file save, you can't just wait five minutes for the refresh. So what we did is we just, for the development environment, we have just configuration file, which we, basically what we say is that if I work with a certain tenant right now in my development environment, this is the only tenant that will have its files refreshed. It's a JavaScript file refreshed. So that helps us to solve the problem. And now as a result, of course, all the JS files now are processed by Webpack. CSS, we still use sprockets for that. We are considering migration. I don't know exactly what are the benefits of that, but we are still, we are considering it. The deployment time for now is comparable, but eventually once we move to containers, and we have a very big server for compilation, for builds, it should be much faster. Development is faster. It's much nicer to work with Webpack than to work with sprockets. And because of the integration between Rails and Webpack, we can still use the helpers in our Rails templates. And now the last, the biggest, and the most painful migration that I will talk about today. First, let me explain why we had AngularJS. So at that point of time, remember, this was early 2014, Angular was kind of a thing to use in the bigger applications. I think React was just half a year old back then, and it was still not very mature. Backbone, on the other hand, was already old and too mature for that. So AngularJ was kind of a thing to use. There were a lot of learning resources that was rich ecosystem, that the framework was growing, the developers, they were very active, and it made it easy to develop single-page applications. However, over time, like with everything, AngularJS became kind of a legacy thing and kind of a problem for us. So the AngularJS framework was replaced by Angular. Now, the names are confusing, so later I will be referring to them with their versions. Basically, AngularJS is version 1.x, and then the whole framework was rewritten in TypeScript, they removed like 80% of the concepts, they left some similar stuff, and AngularJS is right now in maintenance mode. So the last version I think is 1.7, there will be no more features added, there will be only security issues will be solved. The ecosystem is shrinking, so nobody now develops new libraries for AngularJS because the framework is in maintenance mode, right? So it doesn't make sense. And the code was very coupled there. So I don't know if it was specific to our application and we didn't have just very good practices, but I think that AngularJS doesn't promote loose coupling.  And you know, if you don't know where to put something and how to synchronize different places of your code, then you just put this stuff to root scope and it works. Of course, it's crappy because it's just one huge global container, but hey, it works. So when we decided to drop AngularJS, we had multiple options. And eventually we realized that we will just migrate to Angular, which is like a successor of AngularJS. Why? First, because it was the most natural migration. So even though lots of concepts were removed, still we can reuse a lot of code. And our team was already experiencing Angular, so it was easier for us to migrate to the newer version than to learn entirely new framework. And at least in theory, there was a very clear iterative upgrade path, which is called ng-upgrade. So Angular core developers build this thing called ng-upgrade that allows you to run both AngularJS and Angular applications together. And then the ng-upgrade allows you to synchronize the state of these applications. So in theory, it's awesome in practice a bit less, but at that time that was something that we say, OK, this seems like the easiest way to migrate from this old framework to the new one without stopping the development of new features for a long time. So the migration path was, first we needed to upgrade our code to AngularJS 1.5 because it introduced some things like, for example, components. Components are critical things in Angular6. This is the latest version that we're migrating to. And before Angular 1.5, this concept is there. So first we had to upgrade to Angular 1.5 and start rewriting the code to modernize it to add these components. Now, after that, we could add Angular 6 via the ng-upgrade library. So it allows you to run these both applications next to each other, and it allows you to kind of upgrade and downgrade your code. Let's say that I've got a service written in Angular 1. I can just use function called upgrade, and it allows me to use the same service Angular 6 code. And on the other hand, if I have a service that is written in Angular 6, I can call downgrade function, and it allows me to use this service in Angular 1. This is really wonderful concept because imagine three of your dependencies. It doesn't force you to go any path. You can migrate every single piece. It can be the leaf of the tree. It can be the root of the tree. You can migrate any piece you want, and then you can just still use it in both the old and the new code. However, ng-upgrade is not nearly as perfect as it sounds. If you want to run both Angular JS and Angular Next to each other, your application will be huge.  We've got lots of users in countries like Singapore where the internet speed is not a problem. However, we've got also a lot of customers in Brazil where not only the internet is slow, but also the CDNs don't have that many endpoints. So the size, the increase in size was huge, and it was just when we added this new framework. If we start adding more libraries to Angular application because we need some libraries, like, for example, for translations, etc., then this will be even bigger. So this is not something that we wanted to do. So we had to add another step to our migration, which is reduce the size of the application. Now, how do you do that? So there's a few things that you can do to reduce the size of the application. First thing was to use the Webpack Bundle Analyzer library. This is a wonderful tool that allows you to see what takes that much space in your application. Well, unfortunately, in our case, when you look at the size, the AngularJS framework and the Angular framework together take most of the size. So there is not that much that we can cut. But still, you can remove some unused code. For example, in our case, for each of the tenant in our application, we started loading dependencies more dynamically. Before, every tenant loaded all the dependencies, even if they didn't need that. But now, we added the customization, which allowed us to save around five percent. Then we started replacing libraries with lighter equivalents. So, yeah. For example, we used to load, whoa. Okay. Yeah. So I mentioned already there for each tenant that we don't need all the code. So it's not only about dependencies, but also about our application code. Now, Moment.js, this wonderful library, by default, loaded more than 100 kilobytes of locales. So if your website supports 50 languages, then that's awesome. If it supports one language or two or 20 languages, you don't need all of that. So we use at most 20 locales, and that depends on the tenant. So we also added dynamic management of that. So now, we only load the locales that we need, not all of them. Then if you check your code base, I'm sure that you will find a lot of other dependencies that are just very heavy. So, for example, jQuery is something that you will find in lots of places, and it's heavy library. And right now, while it is still very useful, you might find that there's lots of equivalents or lots of lighter libraries that will provide you all the functions that you need. The same with jQuery UI. So jQuery UI is a bit more customizable because it has different components, but it still will take at least 50 kilobytes minified. Then the next thing is that you need to check dependencies of your dependencies. Even if you don't use jQuery directly, there will be some library in your code that comes from 2011, when everything depended on jQuery. So it also depends on jQuery. So, for example, the slick carousel itself takes 40 kilobytes, but it also relies on almost 100 kilobytes from jQuery. So if we want to remove jQuery, we have to first remove slick carousel. Then there's lots of libraries that are just kind of wrappers over another library. So we use the Angular counter library that when we check the code, it appears that it was just 77 lines of code, but that's because it was only a very thin wrapper on jQuery animations. So this is something that we learned that we need to always check the dependencies of our dependencies. Now, the next thing that we could use is Angular ahead of time compiler. Let me very briefly describe the difference. So whenever you deploy your application in Angular, the code includes a compiler that allows the application to get the templates that are written in Angular style. This is kind of something like JSX for React. Basically, you use things like four loops in your templates or ifs, et cetera. So by default, Angular comes with the just-in-time compiler. And just-in-time compiler compiles the templates when it needs them, which means that it needs to be present in the browser. So when the user opens the page, they download the JavaScript file. The compiler is there. And the Angular compiler adds around 100 kilobytes to a zipped file, which is quite big. But because of that, you can just send the Angular templates to the browser and the compiler will understand them. On the other hand, AOT, which is ahead of time compiler, is run on the server. So it allows you to compile all the Angular templates, and it will just inline them in JavaScript. The application should be faster because then whenever a template is needed, you don't need to fetch it from the server and compile. It is just already there. Potentially, the size of the application is lower, but that's not always the truth. Now, the problem with AOT compiler is that all templates must be available as HTML files during compilation. So in our case, the HTML is generated by our backend application written in Ruby. And it depends on the tenant. So we don't have HTML files generated statically. And even though we could do that, it is very time-consuming and quite challenging. Also, the AOT compiler understands only subset of JavaScript. There is a long page on Angular documentation that describes what is allowed and what is not. And the last thing is that if this compiler needs to inline all the templates, then it means that the templates are not fetched when they are needed from the server. It means that they are already in the application. So the question is whether you're actually making the application smaller or bigger. If your templates compiled, put into JavaScript, will take more than 100 kilobytes, then the size is the same, or the size can be bigger, and you will not have this advantage anymore. The last thing that I want to talk about is the lazy loaded modules. So Angular allows you to load the whole modules whenever they are needed. So basically, just imagine that you have a core.js file. And then later, if you want to go, I know, to my account page, it can just fetch the whole module responsible for the my account page. Unfortunately for us, initially it doesn't offer us help, because right now, when we start, we have just one module of Angular 6 application, which is the main module, which we have to load anyway. And our application is already huge. So even though we don't have any modules besides the main one, our application is already big. We still consider it for the future performance improvements, just because it should make the page faster. So eventually, we decided to go with these two options for now, to remove the unused code and find the lighter equivalents of libraries. So the migration path was to rewrite each AngularJS controller as a component, migrate services from AngularJS to services in Angular. The syntax is slightly different there. The same with concept of directives. And finally, we have to find equivalent libraries for the new framework. So what is the problem here? Of course, AngularJS libraries will not work in Angular. Lots of authors abandoned their old libraries, and either wrote new ones or didn't write new ones. So usually it is quite easy to find an equivalent library, but rarely it is a drop in replacement. In 90% of cases, there is something that you need to change to use the new version of the library. And now the last step will be that once all the code is migrated to Angular, then we can remove the breach library, the ng-upgrade, and we can finally remove the AngularJS framework entirely. So just to rephrase the challenges that we have with Angular migration is the application size, is the finding replacement libraries. The next one is that there's a lot of code to rewrite. So even though certain things are reusable, there's still a lot of changes in the syntax. And there's a lot of new concepts to learn, because the new framework introduces just quite a lot of new stuff. The reason so far is that we're still in the process of migration, and it will take us a while. But so far, we notice that the new framework is obviously much, much better than the old one. I think that the Angular code developers took a lot of concepts from React, and things like components are a huge improvement. Also, they removed the root scope, which was one of the biggest pains to work with. So we're doing that with, as I mentioned in the beginning, there is a lot of things that are going in our migration. Some of them, like TypeScript, Angular, or Docker containers are still in progress. Some of them, like Yarn or Webpack, are already completed. So the most important lessons for me are that it's better to migrate iteratively whenever possible. The fact that we waited quite long with the whole migration made it more difficult. And of course, if you wait, then you have to migrate bigger pieces of code, right? So I think that iterations and regular maintenance are extremely important. And finally, always review the libraries that you out to your call. Because even though the library can be very simple, it may happen that the dependencies there are heavy, or they may have some security issues. So that's it for me today. Thanks for coming and listening. And if you have any questions, I'd be happy to answer now or later.


How do we get any soldier going to... Secretary of the Army Dr. Mark T. Esper spoke with soldiers, family members and DOD employees during an open town hall forum where he discussed the state of the Army and laid out his priorities as the Army's 23rd Secretary. My three focus priorities, which are number one readiness, making sure we are training, preparing equipment as ready, munitions ready for the high-end fight. Number two is modernization, making sure we build the technology in the future to ensure our soldiers have weapons systems equipment they need to really fight and win the future fight. And then the third priority is reform, making sure we free up time, money and the empire to put those other priorities. The forum provided members of the USAG Bavaria community the opportunity to engage in dialogue with Dr. Esper regarding the future of the Army. Reporting from Grafenvere, Germany, I'm Specialist Taylor Gillespie. Test, test, test. Test, test, test.


Today we're excited to welcome someone who literally goes the distance. Elvie Guzman joins us to talk about founding the fastest growing urban obstacle race in the country and raising over one million dollars for charity. This is School of Hustle, the show of refined advice and inspiration from people who are making their own way. I'm Shannon, the VP of social here at Go Daddy and I live and breathe at the Hustle of Business. Today we're filming from the hustle of it all at the Weedwork Times Square in New York City. Everybody, let's give Elvie the biggest warmest welcome. Thank you for being here. My pleasure. You are going the distance 23 times now at three and a half miles each. What is the city challenge? It's an urban obstacle course that allows our participants to conquer their challenges over 25 obstacles, over three miles including walls, cargo nets and fun obstacles that people get to experience over and over. Now I've heard of like a 5k or a Spartan race, but you're different. Significantly, yes. How so? Well, when you compare us to a 5k, a 5k is running 3.1 miles on our course. You have 3.1 miles plus 25 obstacles, so it's a lot more challenging, a lot more intense, a lot more fun, I think. When you compare us to a Spartan race, there's mud, there's different types of terrain and at a Spartan race, at our race it's more urban, so you get to run on asphalt, you get to jump over cow cars and taxi cabs, which is unique to our events. You really get to feel like a superman or a superwoman when you do our obstacles. And probably less blood than those barbed wires and things that I've seen in other photos from Spartan races and things like that. Yeah, so we don't have barbed wire or electrocution like some racists do. You don't torture people. We don't torture them to that degree, but we definitely put them through a test of both will and fitness. It's got to be as much mental as it is physical. I would say that the mental component is probably 90% of it. Really? Yeah. That high? Yeah. Okay, why is that? That surprises me. When you come through obstacles and different challenges, you have an opportunity to either go above and beyond and conquer those obstacles or you can turn around and quit, right? So at our races, when you get tired, when you get to a wall that's eight foot tall and you're five foot nothing, you have the opportunity to turn around and go home or you have the opportunity to actually face your fears and jump over it, climb over it, get on someone's back and just make sure that you get it done, right? And in the spirit of getting it done, you have some medals here that you brought today. Yeah, so this is our first medal in 2013 was a bot opener. We thought it would be a great marketing idea to give people a bot opener so that when they're entertaining guests, they can use it over and over again and people will ask, hey, what's that? It's the challenge race, you know, and it worked out well for the first year. And what goes into the artwork? So this medal is from 2015 and this medal has a really cool saying in the back, champions aren't made in the gyms. Champions are made from something they have deep inside them, a desire, a dream, a vision. There's a quote from Muhammad Ali, something that people can take home with them after the race and show off to their friends and family. Philanthropy is just as important to you as fitness and you have found a way to merge philanthropy and fitness into the city challenge. How have you done that? What does your charitable component really look like in all of this? So one of our main goals when we created a city challenge race in 2013, my sister was diagnosed with breast cancer at the time. So I wanted to create an event that raised funds and awareness for breast cancer. So that year we partnered with Susan G Coleman and we raised money for that cause. Ever since then, we've partnered with different charities, including the Warrior Project for veterans and kids with cancer, big brothers and big sisters and different groups, including the Hoboken Shotters. So I think it's important that when you're successful, that you give back to the community that has embraced you and that has allowed you to grow and be a successful company. And you've given back over $1 million through our races, through our events, either through fundraising or just checks that we've written to these groups. It's an amazing accomplishment and all of those groups are fabulous organizations. How do you identify the charities that you'll support? Well, I use charities somewhere local that we see in our hometown, which is Hoboken and Hudson County. So a lot of those are local groups that I see that have a need for funds and for awareness. Some of the groups are groups that search us and we review and we interview and we look at if they're a good fit for us. One of the warriors also operationally during the warrior is our groups that are great for our veterans. And our veterans are a group that I think are not being taken care of as much as they should. So any kind of awareness or funds that we can raise towards those groups is I think is a great thing. Well, I've heard you say that the only way to succeed is to run your own company. Could you tell us a little bit more about what you mean by that? I believe that when you work for yourself and you're doing things that you're passionate about, you're going to be happy, you're going to do great at it because it's what you believe in and what you're passionate about, right? I also believe that when you work for yourself, you have a more significant goal to strive for versus working for someone else, right? In corporate America and in different groups, people are fired and they're let go every day and they're working for companies that don't appreciate them as much as they should. When is your next course and how can people get involved? We have New York City Challenge Race on August 17th. I have to ask you, what goes into closing streets in New York City and Stanford? I mean, how do you pull off taking over a city? Well, it's interesting, right? Staff can actually reach out to us and wanted us to come there and to bring this event and promotion of health and fitness and to get more people involved in that community to be part of this event. Our event in New York City has been going on for six years. So it's kind of the turnkey now, but first year is definitely difficult trying to get permits and getting people on board to be able to close streets off. Thank you for sharing all of that. We're going to now spice things up and play a game that we call Hustle Time. What we are going to do is set a timer for 60 seconds and see how many cards you can get through in that time. In 60 seconds? In 60 seconds. We've messed up, we're going to probably one. I'm going to try to read as fast as I can. Vacation, lounge on the beach or an active hike? Beach. Dogs or cats? Dogs. Favorite movie theater treat? Popcorn. Sashimi or rolls? Both. Would you rather never get angry or never be envious? Both. Go to karaoke song? Wouldn't use anything. Yes or no, socks with sandals? No. Most irrational fear? Brownie. Wine, white or red? Neither. No cheese ever again or no sugar ever again? No cheese. Describe yourself in three words? Rockstar superstar? Elvie? Surf's Up or Cocktails Poolside? Surf's Up. Least favorite candy? None, I like more. Saturday morning cartoons or a late night TV? Late night TV.  Drive myself. Summer or winter? Summer. Favorite breakfast cereal? None. Favorite Jennifer Lopez movie? All of them.  Nice. Who is someone that defines success to you? My dad. 13, 14, 15, 16, 17, 18, 19, 20. Nicely done. That's really good. Nice job. A lot of people get between 13 and 16. All right, I beat that. Yeah, that's great. Favorite part of your day? Mornings. Best piece of advice you've ever gotten? Always do the right thing. Worst piece of advice? Take breaks. How do you use your career to inspire others? Just by leading by example and just doing what I'm supposed to do. Ever felt like walking away? Yes, all the time. One thing you still need to learn? A lot of things. What do you want people to learn from you? That hard work pays off. What's next for you? Working hard and just trying to achieve as many goals as I can. Who inspires you? My mom and dad. Who challenges you? Myself. Well, this last piece of advice is not only for our favorite resident pug today, but for two new cute friends. Who did you bring with you today? So these are my kids, Amigo and Cooper. They're 10 weeks old. Well, thank you for bringing them on. Now we have three pups here to get this advice today. Now here's the question. Noodle is always up for a physical challenge. He's a fairly strong runner, but he lacks upper body strength on the monkey bars. What advice do you have for Noodle as he considers participating in a city challenge race? So one of the important things is endurance. So I think that endurance is a key, making sure that you have enough energy and stamina. And for grip strength, I suggest pull-ups or dumbbells. Also, if you have a team, like we hope Go Daddy will bring a team, you can help yourself over the obstacles. That promotes team building and commodity, of course. So you hear that Noodle, running is not enough. You gotta work on the upper body exercises and find a team. Maybe the three of you can all join together. I'm sure they can. Well, as we close, I always like to leave everybody with a final quote, and I'm gonna read three quotes and ask you, Elvie, to pick your favorite one and tell me why. Number one, leaders are never satisfied. They continually strive to be better. Number two, you don't have to be great to start, but you have to start to be great. Three, limit your always and your never's. Number two, because you don't have to be great to start. I'm not great, I'm just a hard-working guy, average guy, and I feel like we're on the way to doing some great things. We've been able to raise funds for a lot of charities. We've had over 20,000 athletes run through our courses and had I waited to be great, it probably would have never happened. Thank you for that. I really had fun talking to you today. I did too. Thank you for bringing your babies. I would like for you to tell everybody watching how they can follow City Challenge Race on social. Sure, so we're on Instagram, City Challenge Race. We're on Facebook, and we're also, of course, our website is citychallengerace.com. Great. So for you guys that have access to the World Wide Web, go to www.citychallengerace.com. And please also follow GoDaddy across social, because we are bringing fabulous entrepreneurs like Elvie every week, so there's a lot of inspiration and advice to be had. Thank you so much for watching. We'll see you soon. Woo!


ATL, y'all are ready for this main event next to noise one time. My name is Sonny Bamboo, this is my brother Mike Sick. I represent ATL in workshop, Savage Fam. This is the Apache Cafe. Six months ago, we started this two-on-two ship with DNA and K-Shine, and they've gone all around the world doing this ship, man. And we feel it's amazing to bring it back here for the one-year anniversary. It's going down in a major way. Speaking of which, to my left, y'all know these motherfuckers. Y'all make some noise. DNA, K-Shine, I'm trying to the right. These are veterans. These are our first Canadian battlers in ATL ever. All right? These two guys count. All right, we got round one. DNA, K-Shine, whatever y'all are ready, let's go. So, who we got? Chiron and the 100 bullets? 100 bullets and Chiron.  That's all I see. It's 100 bullets and Chiron. You can't talk about guns with white people. You battle 100 bullets on your own. What about him? Him. Oh, I thought 100 bullets was your own. Well, Corey and Matthew, y'all niggas ain't through good July's two shows. Falking the road, but this the wrong path you chose. Big gun. Nah, nigga, we past these flows. See, it's beyond saying pow. Or even Matthew knows.  Pow, pow, headshot. I'm turning all y'all Kennedys. Yellow tape will be everywhere.  So tell Matt, they men won't remember born identity. But this is where boy meets world. Shit's about to get drastic. Oh, see, you're supposed to help them, not hurt them.  This is like principle like Mr. Fiend. But y'all niggas try to skip classes. So Corey Matthews is the reason you never been savage. But if I can't find homes, I get a shelter. Anybody in plain sight, I get delta. A big mind, maximum style, nigga, Elsa. Keeping masterminds, I'll send a capitou. Self, sir. They said that this tech do-wet groups. Helper. Kelpter. Skelter. Helper, help us. They say this tech do-wet groups. Helper. Skelter. Since you the oldest, we gon' bring that elder.  That's welders. Two air longer than usual. That's Zelda. We got these two. We got these two on two's copy. Right here in Atlanta. We did all that. We did all that. It was all facts. First, we started with gin. Don't flop views up. Then we was on smack. And it's all facts. Make the Sorus and Elmak fall back. Now you about to learn how this works. Here's the format. And it's format.  Oh, but this is straight facts. Your career was on the racetrack.  Knowing that he should stay back. Now the shoe's on the upper foot. Y'all couldn't lace that. Ironically, the tables turn. And they don't know where to placemat. And Chirron? Ooh. Let's go. Let's go, baby. Chirron. Oh. And Chirron? Oh. Oh. And Chirron by looking at you. We know you never had to gas for sure. So what are you rapping for? He'll probably scream. Because what I drew, a Barry Moore. Should I crack his door? After I wrap the floor, should I hit the book? Nah.  It's round one. It's getting hot in here. ATL, what's my slogan? Get him the book!  Dude?    So I am going to say you're king of the doctors. That's a fact.  All right. If I heard DNA one a day without battling, I think it's April Fools. Scratch that. Gatclack. Flashback. Deja Vu. For thinking it's a game, get a halo too. We'll have soldiers choke them out till they change colors. That's navy blue. I'll pull out the whip. What you mean whip? Like my Mercedes coupe. I use it for drive-bys and races too. Yo, you racist dude? I ain't a slave to you. Now bullets dumping from the car like the Raiders do. I heard you're an uncle now. Ain't no way that's baby cute. Neeson, you could get taken too. Your girl makes a squad supper. Girl makes a squad supper, then she bangs a crew. You'll have to guess who piped her in the kitchen like a game of clue. I said, now she hoppin' out. Now she hoppin' out. Kids hangin' off her stomach like a kangaroo. We supposed to battle in king of the dot. You duck bullets like a matrix move. Find a wet up in a trunk. It ain't a bathing suit. I'll cut shine into pieces. You'll find three Ks in the hood. David Duke. I'll run up on D block like Jada's crew. I said, pick the locks. And this nigga Charlie Clips start changin' rooms. Aim at you. I'm so big, look like I'm playin' pool. Kick back, make your wrist snap. So big, look like they're playin' pool. Kick back, make your wrist snap. I mean, you gotta aim at shoes. It's hittin' boo. Leg. Clips. That's a pay-per-view. Touche. What happened to you, K? The only book this is payback, my nigga.  I hate that. My nigga is about to get rocky. A$AP, my nigga? I'll pull out the chopper, like take that, my nigga. Yo, yo, you can't say that. I said, you can't say that, my nigga. Why not? Cause you're white. So are you. No. You're about to get his candy took. White boy killin' a professor with bullets. That's Sandy Hawk. I get it. This gun bar since the match was booked. Tag team, trap queen. Let that ratchet cook. I already killed you. I'll dig him out the grave.  Listen to me, K.  Now all you do is let the Maddox part, lost to hunger. Ain't seen that T-Rex, DNA since Jurassic Park. You lacking heart. You lacking heart. It's YTG, my whole track. My whole track dropped bombs. I mean, set the date on site. I got a couple forum like match.com. You name Eric, right? So you a nigga with attitude in the chopper? No, the way Eric write, if he had to retard it, he'd do for an Oscar. But if I give Eric rights, you'll think he got abused by a boxer. It'll look like the straight out of Compton cover. Eric right beside an ice cube in a dumpster. We done, we done. We done, we done. All right, all right. That was a good round. That was a good round. Yo, hold it down, hold it down. That was a good round. What you trained him? Like you had to put it work for real.  I came here, I'm freestyling.   I came here with a box on my mind. Act like you know Shumper. Boy, I had that bird out. Act like you know Shumper. Boy, I had that bird out. Quick it in the road runner. Desi if it's hard, Desi if it's hard to reach like my old number.     I told y'all ghosts, oh mother.  I mean, should I keep going? I mean, you shouldn't keep going because the rhymes is mean.  So it's no iron team because if I get stuck. Then I get stuck. If I get jumped. I get jumped. If I get punched. I get punched. If I sit down. I sit down.  And I get up. That's coordination lyrically. We just showed y'all to go back and forth which are emulated as chemistry. But you looking like you backwards. That's your dog. Now you about to see the G.O.D. You mentioned Eric right? Well, with N.W.A. Now y'all gonna need a D.O.C. Oh. He's the same way. But I can chill a nigga. I'm a different Jones. They say the way I spit is like M.D. But now you in a danger but a different Jones. Now load up, pass off him. That's a pick and roll. But if I shoot, you'll see a finger rolled and give it the shine. That's a give and go.  Gun got a pipping nose. He ain't worth it. But I got a T.B. limping home. Dome, I got a grip the chrome. Hit his bone. Spit you homes. But he acting like he's sicker though. I'm gonna play with the kings. I'm like Bibi though. I'm who his ex miss.  Pass the rock. Fitting slow. I still like Beyonce's mom. If I shoot, I won't miss his nose. Niggas keep acting. Pass the rock. Give and go. Oh, I got a different flow. What's that?  I mean, I'll pass rock ahead of the dock. But I ain't dissing no. Shout out to my niggas though.  We just moving different though.  Look at a minute.  Look at you. Radio acting senses. You thinking I'm a freestyle. I'm beating them. I'm a Viking on point. Adrian Peterson. Please, and since you got milled there, we'll put blow in the air. Lance Stevenson.    All right, look. You a bargain Ben Charlie Clips.  Radio's your nickname. You sleep wherever clips stay.  What's NWS? Big T shirt size. Your pop's going to give you that.  Your mama showed you how to crit walk. I said you'll shine.  You don't want no part of me. Pardon me? I got bad manners. The judge going to have to pardon me. Drawn arts degree. Sawed off carpentry. This is the end of the road. It'll turn boys to men. R&B let a couple sing. Carry in the Nina. That's harmony. DNA isn't winning. Positive. Charlie Sheen. He got a bar for me. No, literally, DNAL. He might bar from me. Good with angles. Geometry. Y'all only got bars and schemes. Subtint the target. Pull back to get the point across. Archery. Depart the scene. Or Leo Ho crew dead like the departed scene. I like Ken in a box. That's Barbie's dream. You supposed to stop chess. Heart disease. Let me find that blood clot. Arteries. Y'all fighting? Swing once and get drug over the counter. Pharmacies. Bullets, I got an armory. A million hit like the Carter 3? Well, you'll find a hundred cats in your crib like Carter Dean. Enough flow for the levee to break. One shot to your noodle. Spaghetti and legs are pop-y in the chest like Veterans Day. Yo, what you doing, Chiron? I'm getting that machete to spray. Hold on, what's wrong, man?  I ain't got no cloak. Any time there's felt to be a fight, I look like it's cold out. Man, I'm fainting yourself for it. We like hit man and show up. I miss the first punch. Then I knock them both down. I don't believe you. Nah. Good, good, good. One punch, I just go like this. Anyways, they kind of look like snitches. Well, I got rich parents. They'll supply the bail. Cool. Then I'ma dump the tray like I'm trying to start a fight in jail. Check it. I can teach you how to throw down a scrap with these niggas. Give these bitches so many rights, I'll run out of matches on Tinder. So do your... So do your... So do your white jokes. Call me slim like my daughter's Hailey. In the aftermath, you won't die, but Ken Keniff, he calls me Shady. Today, your name is Ken. It's Ken Shady. I like that. Anyways, get your... Your boyfriend said you were Ken. Oh, damn. I should've. I should've. I should've. What's wrong with your life? Hit man and concede it on a wild note. I heard they got flew to the Grammys. You got a gambling disorder that ruined your family. I mean... Arsenal, he used to sleep on a cold floor. Then he moved to Miami. You got that cold sore from screwing with Tranny. So you're the perfect fit for this tag team round.  And I mean, I can't believe they aren't smart. Because he said, I'll give them the finger roll then give it to Shine. And y'all didn't pause that. So why do you call it... You've given the finger roll then you've given it to Shine. I was crazy, fam. After this battle, you are not allowed to shake my hand. I will freestyle a little bit. I got a couple things to say for again in a while.  You said DNA told Shine his finger roll. Tell me the punchline was, I'm going to make your finger roll.  Well, I got paid in full.  If you really want to play, he going to act like he God. You said something about somebody's on a wild note. I was on a BET award. So they know about it. That is true. Which means that I mean with the rhymes. You rep yellow tape. All that means is that we going to see DNA at the scene of the crime. Y'all acting like y'all nice like the heater spray. I've been had these chips in a bag free to lay. My 40's still looking good and you going to get at least a rate.  I'll make you analyze a clip like Steven A. You mentioned Charlie Sleem. That's the only means that you're going to need aid from DNA. Like he nice talking about pushing you with chess. That got me bored of you. All that's going to mean is that a Queens nigga from Corona going to put you in the coroner.  But I don't want to talk about it and get old for you. Yeah, I got pushed by a nigga that's 17. And oh, I came up that situation looking like a warrior. I invested. You going to jump into this round. What it do, honey?  It's for you, honey. I don't like them. Me neither. That makes two, honey. Strict club. I'm new, honey. Couple bucks, a few, honey. The eighth through is face blue. New, honey. I'm about to slide right through his crib. I'm about to, what you say? I said I'm about to go right through his crib. I'm about to slide, honey. Stop, gun. Right through his doors. Surprise, honey.  I saw you got, honey. That got to be your deposit fee. Now come get this five, honey. It's your time. It's your time, honey. It's your time, honey. Reverse them. I rewind, honey. They only put you close to a G. They get this nine, honey. Oofy out of cause and effect. But this 40-year chilling, nigga. Right, it's more than I read. I got two hammers. Sirona gets caught with the left. The other one, 800. Without calling, collect. This mean the only good for the bodies. That's a butterhead.  That's wonder, Brad. If you act emo G, we gonna dump the lady.  That only means that we gonna fire checks. And leave 100 rank.   John Woon. The last time we seen 100 guns with 100 clicks. And I'm from New York. So I don't want to hear this nerd that's rapping. I can get the 50 cents. I'm the first that's class. So when you get this nine bullets. And Curtis Jackson. I hit him from the left side. I got the right visitation. One call and get him booked. I kind of like reservations. I hit him from the left side. I got the right visitation. One call and get him booked. I kind of like reservations. I think I should pull on him. I don't like hesitations.  Powerpoint presentation. For these lines, when it comes to these lines. You just got a corny swag. We don't even want to hear you speaking in public.  I understand you want to give us bonds. But we don't believe it for nothing. I know you want to be real. But just keep it a hundred. We don't want to hear your line. I mean, because you would be actually cool if you was not a lame. You got no views and got no fame. So the saying is true. Bullets ain't got no name. How you properly dress your jeans. Go up right by your waist. I can see the good in you. He's 50% black. You're 98% white. I don't see the hood in you. You need yourself a hundred bullets. Act a comic. And look at you. Then your main slogan is guns.  Bullets do. It's just one problem. None of those bullets you. I don't got you one bullet. I mean, honestly, I'm lying. But can you name me in your life if you've seen one bullet?  One bullet. Because you're not even in my class.   So what I'm going to do is treat this like I'm in school. I'm going to get bullets to bullet and board and get the...  We're going to grab their bullets and board. You got to get serious. Why do you always look like you're about to cry? Are you in pain or free?  DNA, it's a shame. You could randomly vomit at any given time. Who'd want to be around you?  Genetically, you're the saddest victim. That name was a bad decision. That's like Big T calling himself metabolism.  To be honest, I don't really know what that means. And when I said I'm on track like a choo-choo bell, I don't think that they got it because tracks are on trains. So in a way that's pretty ironic. Nigga, stop it. In England, you literally said I'm rapping it. I'm rapping your father. I don't even know what to say. When you said I'm rapping your father, yours rolled in his grave. I see you ain't got two arms out because you air the tech. Pussy? You got two arms out because you scared the chess. Spare your breath. You should have flipped on stage like Charone battles. You were supposed to bomb on chess like your Rome battles. Instead you got out of there.   Saw chess and the guy was breathless, cried relentless, looking for the fire exits. He bawled his fist and DNA froze like cryogenics. It's official.  The saga unstoppable. He won't be able to watch us rave online. Big T's gun sounds ain't as great as mine. We'll kill him. Big T's gun sounds ain't as great as mine.  Any place. Any member. Rain or shine.  It's official. No. You left Dot Mob for NWX. No. You get a rhyme promotion? You had a right. Nope. You had a right. You know, the professor would leave Big T like the clumps when he finds the potion. You moved the writer's block. Where's your loyalty? You're blindly loafing. For a QP, you'd see shine in your window like the blinds were open. Get your clip.  Get that my Dot Mob or NWX.    Your battles, your battles, he won Freestyle Friday, the March Madness winners. Your battles, I could not watch.  Yo, but we gotta leg up on these squares. Hop stars. I hate when you rock this way. Save it, man. Practice takes. Wave it, hands. Like I'll clap to eight. I'ma spray the can. Honey cake. Coordination stuff with white people, man. Anyways, look, when we think about bars, it's like, yo, I'ma put the bean to them like an eye exam. When they think of bars, like, we should dress up as Wolverine and Spider-Man. But since y'all like that corny stuff, let's get them, Slim Jesus. Oh, wow. That's crazy. That's crazy. That's crazy. That's crazy. That's crazy. That's real time.  That's real time. Look at that. Look at that. Just hold, John. I just tore them up. Look at the road. I said that. Hold on, hold on, hold on. We can bring it back. Bring it back.  Keep going. Keep going. And I really gotcha.  Don't you get the math like Hoffa. So after you're going this, and that's how I'm going, I'm looking galore.   And after this, you really need this. Yeah, shout out Bullets and Slim Jesus. Man, you know what? You know what? Look at him. Because he got a virus. I didn't want to mess it up. I'm chillin'. Yo, you know what? You could have hit my hand. Anyway, you got my gun out of my hand. Yo. All right, whatever. That's it. Yo, you should have warned. That's it. Yo, we're going to just end this. We're going to end this. Yo, we're going to end this.


Welcome to the After Hours podcast, hosted by Harry Haas and James Friedlender, presented by My Investing Club. What's going on guys? We're back with another episode of the After Hours podcast. Today we have Byron, who has been a long, everybody just keeps asking us to bring him on. So I'm finally, we're really excited to get you on here and you can tell your story. So thank you for coming on, man. Yeah, absolutely. Thanks for having me. It's a pleasure. Of course, man. Of course, it's our pleasure too. So lately you've been killing it. You guys don't know, we have like a main chat where people post their trades, their charts and all that. And Byron posts his trades like daily and he is killing it. And he's very insightful into like market moves and stuff like that. I always look forward to his post. So, you know, if you want to give us a little insight, you know, how did you even get into trading?  And kind of take us from there. Absolutely. So thanks again for having me on. It's a pleasure to be part of the MISC family and just learn from you guys and all that. But my journey, so my journey trading wise started about late 2018 or probably mid 2018, I would say. With me for those who didn't see when I was brought on as a junior moderator, like I'm starting a lot later in the game than a lot of you guys. Like I've got a wife, got four kids. And back at that time, so mid 2018, like we were just starting to explore what are different options, ways we can bring more income into the family. And so, you know, I looked at eventually crossed some day trading videos on YouTube. And of course got connected with Tim Sykes. He's the gateway drug. Yeah, no. He's the gateway drug. He's the gateway drug. And actually like it was crazy because I bought his DVD where he goes through like the different patterns of a basic run up, right? And that's some basic foundation stuff from him. And I originally opened like a $1,000 account. And I knew that he had said something about holding overnight and waiting for a gap up in the morning. I had no idea what I was doing. But on like that first weekend, I just randomly held a stock overnight and was just sitting there in the pre-market, like not knowing what am I supposed to do. And the doctor started spiking, probably around like 7 a.m. when the volume started to come in. And I sold it quick for like 800 buck profit. And that was the fish hook right there. It was like $1,000 down, almost doubled it. I'm like, okay, yeah, this is it. And this is gonna be easy. So, yeah, I started trading and you know, had mixed results initially. But actually I'm one of those guys who did things the wrong way coming in initially. Like because I had some mixed results and was old confident, I was like, if I can just load up this account a little bit more, I'll have bigger numbers and be able to push myself forward. And so I actually loaded up some credit cards. Got some debt on me and really blew up that account in epic fashion. I don't know if y'all remember, I don't know if y'all remember the BPTH. Yeah, the best short squeeze in history. Yeah, exactly. Yep, that was the day where I was completely hungry. For those of you who don't know, you can look back at a chart back on like March of 2019. It went from like six to, what, six to 60? And like, yeah, it went to seven. Seven, yeah. In like two days, it had recently, it had failed, I forget what the level was, but it had failed somewhere around like 15, 20 bucks or whatever, like three days prior. So I was shorting into that and just holding and gapped up the next day and ran to 70. So blew up that account and actually took a year off of trading of just like handling that debt, just completely stepping away, but still like I had so fallen in love with it by that point that I was still like for a year without trading, was still studying charts like every day, trying to learn what I could and didn't jump back in until... Now, were you emotionally like, were you okay?   Like I tell my wife, like I hadn't told her this is also husband team, poor husband team 101. He didn't know the extent of which I had loaded up this account. So when that happened, I was like, all right, I gotta like lay everything out there and just let her know like I completely screwed this up. So what was her response? Silence at first. I think that's generally how my wife like broods, she will sort of take it all in. But yeah, it was not the blow up type, but it was just like, I mean, there was that trust that was eroded there, you know, for a while and it was just... It's tough man, it's tough. It's tough when you have a passion for like markets and you have a passion for stuff like that, like anything that's kind of risky. And, you know, it's like, I think we all have girlfriends or wives, they're most people in MIC and it's, you know, trying to explain to them how it works sometimes.  Now, how did you explain that to her? How did you, if you don't mind, you know, how did you kind of get over that fear of talking about it even? Well, it was just like, it was obvious, it was immediately obvious, because it was like in a single day, my account was probably, I was using the offshore, I was using Shirtraider at the time and it wasn't, yeah, exactly, it wasn't quite at like PDT, yeah, I was hovering around PDT and was sort of counting on that money to be able to generate profit to pay off the debt. Well, once I blew up the account, I mean, it was just like, immediately obvious, like there's no way I'm gonna be able to just, I mean, this definitely paid off and I need to be honest with like, where all of our actual funds from working and stuff were coming, we're gonna go into that. And so it was just like, immediately obvious, okay, gotta come completely clean, gotta let her know exactly the extent of what's happened and just deal with it as it came and she's amazing. And so we got through that. Kudos to Herman, huh? Kudos to her, improv, to her first. Yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah. It's amazing. So at this point, so at this point you take a year off, you kind of worked through the debts, get everything going, what kind of brought you back? Again, like I've never, I've never lost the bachelor training, like it's, for those, for any, all of us know, once you catch that bug and, I mean, just what can, what it can afford you. And if there are those that also just love the challenge of training while you're in love, the challenge of trying to execute better and better, sticking to our plans, sticking to a process and challenging myself. So never lost that bug and, you know, just spent all that time studying patterns and sort of back testing strategies and just believe that I had some solid trading plans in place. And then it was just a matter of, I had just raised some money on the side that wasn't part of like our budgeted money to jump back in to the markets. I think it was roughly a couple thousand. And this was late 2020. So from March 2019 to like late summer 2020 is how long I was off. And then was able to find some pretty good success late 2020. And then 2021 just kept building from there. It was my like first year of like real, like serious profitability and just growing and scaling my account. And that just brought a whole new set of challenges, which was, I grew so rapidly in 2021 that oversizing was a problem. Like impulse control, like recognizing that. And that's still the biggest thing I think I struggle with. People think you become profitable and then they think it's easy. They think it's like, oh, yeah. I mean, cause even cause, right, right. Cause even when I've recognized a good setup, what I'm often tempted to do is to like just, I don't, I have to make sure that my scaling strategy is tight. Because if I get in too much too early that I'm uncomfortable and I can't really let the stock fully do what it wants to do before it starts to move in my direction. So that was like one of the challenges started to need to deal with. Yeah, okay. How did that go with kind of like education-wise? Like were you an MIC at like any point then? Like kind of like, when did you join? Were you anywhere else? Like, I mean, you can talk about like really anything on here. So I did a lot of YouTubing and was sort of spinning my wheels there. Really the biggest thing was just like tracking my own like setups that above that observe and just again, again, day after day, just studying charts. Like I've logged so many hours just studying charts and becoming familiar with patterns. And I came across, I think I came across like Alex and Bao a while ago. Like I saw his video when he went up to SMB and it was just detailing some of his early journey there. But I joined MIC last fall, I think. And some of the biggest lessons that have really shaped my training today have come since then. Sizing properly, fantasy orders is the biggest thing that's helped me. Waiting for certain lines and that's really helped me. So I think what MIC has helped me in is alleviating some of those super high bounces in my P&L and also, you know, like a much more gradual incline and have the patience to wait for, you know, we say scalping was the scale of the rest. Yeah. Yeah. Sizing is the best scale for the rest of the year. That's the size of your setups and... I think that's awesome. I feel like a lot of people like, like I like to talk about MIC, especially because a lot of profitable traders will hit me up on like Instagram or Twitter and be like, you know, like, I do make money, but like I want to learn more like can MIC help me? And I always kind of like, lately I've been using the referral of like, because I'm a golfer.  It could be your golfer you are. And it's just such a little tip and stuff like that.  I think most of my DMs as a short bias guys that most people are size too big, they're not letting the stock kind of do, like have wiggle room at work. And, you know, I think, I think seeing someone like you who is successful and does make some good money do that. And people need to take that into consideration in their own trading. And I think it'll make a massive difference. Yeah, for sure. For sure. It's a struggle, man. Those are all fundamental. They're such a, they make such a big difference between even just not being consistently profitable at all to being able to like really start to consistently grow your account, like those small details. Yeah. Those small things. Yeah, what would you say that you're kind of like working on now? Like, what would you say like kind of like, as far as like struggle wise, like what would you say you're kind of working on now? Well, that's, that's definitely one. So the whole, like really, truly trusting my fantasy orders Yeah. Just jumping into stocks because I can or because I have like the cushion. Yeah. To whether it was or all down. I think cutting those law, cutting like, cutting stocks when they go against me and like jumping back in, like being comfortable jumping back in. That's something that I'm trying to consistently do now, like rather than just allowing a bit of the draw down, I'm much, I'm becoming more comfortable just go ahead and just cutting it as soon as it like hits my break event or slightly beyond my break event and it immediately stuffs just like jumping back in. Yeah. That's been like really helpful for just, I guess my psychology of just like being comfortable in a trade and being right. If you know, you got to take paper cuts along the way. Yeah. But I, but you control what I like is that you control it. You know, I see your charts too. Like you control your loss. You're not like, you're not just like scaling to infinity. You're not just like shorting for no reason or longer for no reason. You have a plan and you know, you take those cuts, but like if you take a planned cut, you can make that money back no problem. It's when you take an unplanned cut, like an unplanned bigger loss, it's always bigger. Whenever it's unplanned, it's always a bigger loss than you expect and then you're trigger shy and you won't be able to do it when the time comes. So, I mean, and how long have you been at this again? How many years would this year be? So like, if you like subtract the year off, this is probably what my fourth year of trading. Yep. See, everybody wants to make it in like one year, bro. Everybody wants to talk about, they were like, oh, one year, one year, but like you're on your four and with a year off of studying too. So really almost five. And that's what it takes sometimes is that much screen time to be able to recognize those things. And you know, that's it man. I think that's a huge part of your success too. Yeah. And if there's anything like I could reiterate to people is like, don't try to rush the process because as I was mentioning like in 2021, when I started to like scale and like really grow up to count and build consistency, that also came with that also came those big loss. Like when you're talking about just add, add, adding just because you have like the account size to do so. Like I was telling my tabs, I'm in a tab with Stefan and Vic my worst loss of last year was the six-figure loss. Like and just like ridiculously beyond what anything I had lost before it was on that day when was it Nero? Nero was one of the super, super numbers I lost on or it was in N-E-G-G, whatever one of those low float ones that just like- Yeah. Yeah. Yeah.  And you say, well, maybe let it go a little bit, let it go a little bit. And then it runs like $40.  Like you're not emotionally strong enough because let it balloon to this thing that you're way uncomfortable with. So.  Junior mud. Junior mud, okay. So I like that because you guys all have a similar story. That's what I was asking. You guys have all gone through kind of like the blow-up phase. You've had your initial struggles and like it's kind of cool that you guys are helping each other now. And all three of you guys are trading really well. You know, you guys are all posting charts all the time. Stefan's a beast. He's been a beast for a while. Vick obviously posts like huge P&Ls and you too. So I think that's cool. I could ask you guys for, you know, sticking with it one and two, now kind of being each other support system. Yeah, yeah. I liked that a lot. Would you say that like, like definitely having a taps like helps you a lot more. Like a lot of guys like, they want to like just go it alone. I don't understand why. Like I think for me like, I also have kind of like a long bias like kind of route that I talked to often as well with like a lot of guys who are like kind of growing and like learning. And, you know, I think that as far as like it goes for me, it's also kind of helped me a lot as well because for a while like, I would talk to like James and Tom all the time in the morning and stuff like that. But like as far as like actual training goes like James and Tom and I don't really have the same struggles, you know? Like James is shorting and training different setups and we can talk about it. Like they'll say, oh, Harry, you did a good job or oh, Harry, like good stuff or like good, good this or they'll give me tips too. But like we're not really trading the same setup. So it gets a lot kind of like harder because like James can't relate to getting like stopped out at the, at the low. Just like I can't relate to getting stopped out at the high day or something like that. Right? I think that that's helped me as well. Just kind of like, you know, talk it out, kind of get on some calls with like Joe Angelo's in there, he's a junior mod. There's a couple other guys in there and you know, they're growing, they're kind of on the come up, but like it's nice to kind of like talk to people who are like seeing the same things as me. I think that that helped me a lot as well. So like, did you start to kind of like progress even further once you got the tab group or like how did that kind of work? I would say that like even just like beyond just the tab group, just being like actively monitoring the main chat in general has helped a lot. Just like seeing not only like Vic and Stephens, like you start to get a feel for how people trade when you see their charts and you're able to chat with them. But then obviously like Bow posting all day long and when you guys post and when I'm trying to learn some short strategy trying to learn some long strategy just like the fact that there's this community here where you're constantly sharpening one another just even despite participating if you're an active participant and you're trying to keep up with what everyone is posting and not only like alerting the new stocks, you know, come on board, but just you see how people are actually trading just being in MIC since I joined has caused that process to happen for me. I think it's a lot of like dropping your ego too, right?  So that probably helps you because it's helped like me, it's helped Harry just being in chat, being with people, talking to people. And it's like huge, you know?  Like whenever you write about something, you're like, oh, I feel like this might be a top or you always just, you have good insight into a lot of stocks moving. So I was curious if that just came from charting over time. Do you have any other kind of people that have helped you out or you know, how did you kind of come to have that? I don't want to say intuition, but you really do have a lot of good calls and stuff. So I was curious. I would definitely say the main thing is just charting. Like seeing not only chart patterns, but like volume patterns. Like it's not just the candlesticks, but like how does volume change when a stock is breaking through a high of a day? Is the volume ramping up or is it basically like dead to where you know, there's no interest here. So it's a safer bet to try to short this top or something like that. So yeah, so just mainly just, and I would definitely say that volume has been the most helpful indicator for me. Like learning to learn and study and have a field for what's happening but beneath your chart throughout the day as the stock is moving. The biggest thing for me, I would say. Yeah. As you find, like as far as like volume goes, like it's a lot of like kind of like, like almost like inverse analysis whereas like if the stock is like has no volume and like doesn't break down through a level or like has no volume and we're just kind of consolidating and then we get like a burst of volume. You're kind of like looking for something like that, rather than like we're doing like, would you say like it's more so inverse? Like you'd say that like if we're not doing a lot of volume we should be going lower. So like that's obviously something that you'd want to be paying attention to. It's the same thing. Like if we kind of like break through like let's say high of day and then volume drops off like that's something abnormal. We should be getting more volume and we should be moving higher. Do you kind of pay attention to stuff like that or kind of like, how do you use it? Yeah, yeah. Like I would say like for example, if I'm trying to long and I see like there's high volume in the morning, stock pushes up, starts to consolidate volume, starts to taper off. Yeah. One of the first things I'm looking for is when does that does another burst in volume sometime in late morning, early afternoon come back into the stock to if it does and that shows me that, okay there's still interest in this stock. There's still people monitoring the stock, they're looking to push it higher and depending on how it pulls back then I'm looking to see, does it pull back and still hold above lows? Like does it make higher lows and does it do so with the volume decreasing back down? Yeah. So showing me that there's really not a lot of selling pressure here. There's not a lot of shorts that are beating this stock back down. So it still has a chance to potentially ramp back up later in the day, later in the afternoon or something like that. And so I'll start to look to set some fantasy orders at some of those lower pivots, risking the low of the day, you know, stuff like that. It's cool. That's like, yeah, that's just an example. I'm looking to see how is the volume changing yeah throughout the day? Yeah, I do something definitely similar to that. Like where I'm just like, it's hard with volume because like there's so many different details. Like even when I was trying to explain it, I was like, how do I make this the most simple way possible? But like there's a lot of different volume. There's hundreds actually. Probably even thousands of like different volume like analysis examples where we could sit here all day and just go over, oh yeah, that's a good one or oh yeah, that's a good one. I think that's where the screen time comes in. I think a lot of people get confused as far as like reading the tape goes. A lot of it is just like being able to interpret volume, you know? Where everyone's like looking for this like secret signal but really reading the tape is just being able to interpret volume and just coming up with your own analysis where it's like I can't explain to James or I can't explain to Byron certain types of like analysis because you see it and you're like, it's that right there but it's very difficult for people who haven't spent screen time or haven't spent a lot of time doing it where I'm like, yeah, did you kind of like see that odd burst right there or did you see how that moved that way there or whatever? It's really just being able to interpret volume well and using that to make money, you know? And that's why it's so hard to explain to people who don't have like screen time or they're newer because they're like, I had a guy asking a question this morning, like he's like, how come you said it wasn't a good long overview app? And I was like, well, we're doing a lot of buying. We should have moved higher earlier on and it just was struggling and struggling and struggling to move higher. But it's like, how do you interpret that in like five words? You know, it's very, very difficult. Yeah, yeah, it's hard. But as I say, it's not just the candles like this. Within the candles, there's like a story happening within these two candles that are exactly the same. Like a different story took place in that window. Yeah, exactly. Yeah. I have one last question for you Byron. Jesus, BTTX just talked about. I have one more question for you actually. So as someone who obviously has done a lot of charting and a lot of studying and like back testing and all that and you said you have kids too, you have a family. How did you kind of break it up? How did you study these charts? How did you dive deeper into them and like do that with kids and all that stuff? Cause I know a lot of members say that. They're like, oh, I don't have time to do this, that but it's so obvious that that's what's necessary to be successful in this is screen time and like getting more and more screen time. So how did you do it? Like for you, how did you make it possible? And you know, how did you break apart your studying? I would say. Well, first I would just say like, if you want it bad enough if there's something that you love enough that you're interested enough, like you'll find time to do it. And so for me, like I work full time from home, thankfully, so I'm able to be in front of the screens and stuff, but as a software engineer. So like with me, what that often means is that I can use, I'll wake up probably most weekdays, I'll wake up like four or five in the morning just to be able to try to get some work done for work in order to like have more of my time in the afternoon to be able to sit and trade. And I mean, in the morning and during the early afternoon to sit and trade and stuff. So just sacrificing some sleep, sacrificing some other leisure time when my kids aren't like awake and stuff basically is the time when I can do it. I mean, after hours, that's when I got to put my full time dad had on and got to be with the kids and dinner and schoolwork and all that stuff. So if you want it bad enough, right? You're gonna make it happen. Exactly, if you want it bad enough and just constant exposure to, I would say just even if you only have like maybe an hour or two or three a day to allocate towards it just like constantly being in front of the market constantly trying to just familiarize yourself with how these stocks move, the different variables you need to account for how like why if you were expecting a certain stock to react a certain way and it doesn't like starting to really try to understand all the contributing factors of like why did the stock not behave the way I thought? Okay, let me take a note of that and we found that away and all that stuff. So finding the time, if you want to do it you'll find the time to do it. So yeah, I think that's really important where like for me, like when I was starting to get like I'd say like quote unquote good, like I wasn't like I am now, but like I was starting to find some success when I was kind of in university.  And I also think that like, would you say that your process went from like I'd say like a P and L based oriented process to like a process process where you're like you start to go from like caring about making money and you know, big P and L and like maxing out like the credit cards to have that massive P and L would you say you kind of went from there to like more of a chart based process after that kind of year of studying charts? Yeah, I mean, definitely. I mean, I've just, I've just, I've had that mindset so long of just wanting to, you know grow as quickly as you can.  And I've been scarred so many times from that. Like I'm, I definitely, I guess the type that needs to put their hand on the stove and I've burned my hand on the stove so many times that you do just eventually get sick of trying to chase profit. And just, it's just a, it's like a relief if you can just consistently, even if everything isn't like huge numbers just consistently growing in the right direction. Yeah. And so because my goal has sort of shifted to that where I just want to be consistently trending towards my ultimate goals. Yeah. Like where I want, you know what I want for my family what I want to be able to personally do with my wife just as long as I'm growing towards those goals and then the speed at which I get there doesn't really matter. And so that's what's, that shift in focus is what's helped me to say, okay then I really need to hone in on what are those little things that I keep doing that are the reasons why I take three steps up two steps back three steps up four steps back five steps like I can just take one step or two steps forward and then even just plateau and then eventually move forward. Like that's where process really comes in like just minimizing the things that you're doing that are killing yourself. And that's where like keeping a journal is like really important, you know like a lot of people, like for example like I know some long traders that message me and it's like the same mistakes every single day. The most common mistake I see from like longing is like people trying to long broken charts with no volume where it's just like fading and they try and catch the bottom year try and catch the bottom year try and catch the bottom year.  Yeah, yeah because what you're really doing is like you're multiplying the amount of times that you're seeing certain patterns like you saw the chart while you were trading it and then going back over you're seeing it again so it's like you're doubling the amount of hours that in terms of just trying to log hours and trying to log experience whatever the more that you go back you're really like multiplying your experience and just like paying more attention to those little things that you like I said, like those little things that you're doing that they made all the difference in the world and yet we, they're the mistakes that we'll make repeatedly and so we're finally just like stubborn enough to say, okay, I have to change this. Yeah, I like that. James, do you want to say anything? I know I like was kind of like I know you guys are coming. I think that's probably a good place to kind of wrap it. I mean, he had ended on a good note there. Yeah, no, that's great. Yeah, no, I think that was solid dude. I was just listening. Honestly, I found myself just listening to you guys talking. Yeah. Hell yeah, man. I like it. So perfect. Yeah, so thanks, Byron, for coming on again. Yeah, thank you. Especially thanks, James. I know we were going to do this in the evening, but afternoon freed up because your back went out or something like that.   So it worked out good for, it worked out good for all of us. It's not good for us. All right, perfect. Perfect.