I want to talk to you today about Ruby Macros, which is this system that I created for enabling deep metaprogramming with Ruby. Now the idea is to be able to manipulate your syntax trees at parse time and change them pretty much in any way you want. If you grew up as a C programmer like me, maybe thinking of Macros as this kind of macro, a C preprocessor Macros, this is not the same thing really. It's sort of the same general idea, but the C preprocessor is very limited in what it can do. It's a fairly simple textual substitution scheme. It can't, the language in which you write macros and C is not turning complete and you quite quickly run up against the limit of things that you can do. What I'm really talking about here are Lisp macros. Lisp has a very powerful macro system and that's what I'm trying to emulate. It's difficult to get to the level of complete integration with macros that Lisp has because of the nature of Lisp. In Lisp, code is data and data is code and that's just a really natural flow between the two. In any other language that's not Lisp, that's basically impossible to do, but I try to get as close as I can. I think I got maybe 90% of the way there. Here's an example of a really useless macro which adds two things together. This shows I had to invent several new syntactical constructions in order to achieve the effect that I was going for. This shows all three of the new syntactical constructions. First of all, we have this macro keyword. The keyword macro introduces a macro and macro definitions look syntactically just like method definitions. In fact, in many ways, a macro is a method. It just runs at parse time instead of at run time. Basically, it looks like a method definition, but instead of def, you have a macro. Inside of the macro, typically, you will have a form. That's this parenthesis thing, but it's got a colon on the front. A form is a way of quoting your code. I'll explain it more in a little bit more detail in a couple of minutes. For now, let's just say that every macro should have a form inside of it and that form should mention the parameters of the macro up here. Those parameters have to be escaped using the third of the new syntactical constructions, the form escape. That's what this carrot is. That's a unary operator. What it does is it allows you to break out of the form. Anyway, this macro is in a whole lot of use. What it does is just inline the addition operator, basically. An expression like this, which is calling the macro, would be turned at parse time into an expression like this. Now, how does this work? There's supposed to be some arrows there, but I think they ended up pretty faint. Anyway, what a macro does is it returns, it runs at parse time, and so it does not have access to all of your regular Ruby objects. It can't manipulate your arguments as objects per se. It manipulates them symbolically instead as what are called S expressions. I think S is supposed to stand for symbolic. And S expression is basically a parse tree. Same thing. What a macro does is actually it returns a parse tree, which is then inline directly into the code at the point where the macro invocation occurred. In this example, we'd have a macro right here, and that would get substituted with these two things that were returned in an S expression by the macro over on the right side. Now, macros can also take arguments. Again, the arguments are S expressions. They're not regular Ruby objects with regular values. Normally, for a normal function call, Ruby would evaluate what is A plus B and come up with some object and would pass that to the method. But in a macro situation, you cannot do that. You don't have access to A and B yet. They haven't been defined at parse time. So instead, you get a parse tree. You get an S expression for A plus B, and it gets passed as the argument there, and then the argument ultimately gets used somewhere in the macro in a form escape, typically. Now, let's talk a little bit more about forms, because forms are pretty important, even though they seem kind of boring in comparison to macros. So I've got an example of a form here in the middle, and I've put it between a string and a proc to sort of illustrate the concept that a form is kind of midway between a string and a proc. All three are sort of ways of quoting code. A form is like a proc in that the contents of it are actually parsed, so if there's like a syntax error in it, you'll find out about that at parse time. However, it's like a string in that the contents of it are not turned into instructions. They're not code yet. They'll probably become code eventually when you use it for something. But for the time being, what's inside of the form is just data. It's just a tree. So here's that same form again, and here's a representation of the tree that you get out of that form. Now, you should look at this as kind of like a yaml data structure. It took me a long time to come up with this method of representing my trees. In fact, I had to get help from Roger Pack. He's sitting way up on the back there. And so this is actually a pretty clean way to inspect your trees. What I had before was a lot more ugly. So basically, this form turns into a tree that represents the code inside of the form. At the top level, we've got a call node. The actual class is call node, but I've left out all the extra stuff that you don't need to know about, like the node at the end of the class name. And it has a name. That should be print instead of puts. I guess I didn't update that. And then it also has a list of parameters, and that list contains a single string node and the data in the string is hello. Now, here's an example of a form escape. This ultimately ends up creating the same form as before, the same as expression. But it shows you, illustrates how to do a form escape. I said that forms are kind of like strings. So form escapes are kind of like the string interpolation syntax that crunch curly brace things. And basically, it allows you to escape out of your form back into regular Ruby mode temporarily. So what's controlled by the form escape operator is actually interpreted at the time the form is evaluated. And its contents are placed into the form at that point, kind of like the way macro expansion works. Now, here's an example of a more realistic macro. I think this was the first macro I wrote. You're all probably familiar with assertions from test unit. This is an implementation of assert as a macro. But this assert does a few more things than normal assertions do. So, for instance, we're getting the condition that's being asserted as an S expression here. And then this part is checking to see if the condition is one of the known comparison operators. And then if it is, it's picked apart into the left and right sides of the comparison and what operator it was. And we construct this nice error message here, which is a little complicated to explain. So I'm just going to show you how that works. Is that big enough? Can everybody see that? Now, before we do anything with assertions, we've got to set this debug variable. And then, you know, say I have a couple of variables. I can do an assertion like this. And you know what it will be. We expect that to be true, so nothing happens when you run the assertion. But what happens when an assertion fails? We get an exception. And the exception has an error message. And just like in test unit, the error message tells you what was on the left and right sides of the equal sign. We expected on the left side an A and on the right side, there was a B. On the left side, there was a 1. On the right side, there was a 2. But the other thing that this is showing you is it's actually showing you the symbolic form of the left and right sides. So it's telling you that, yeah, what you wrote on the left side was A and that value was 1. And on the right side, you wrote a B and that value was 2. That's something you can't do with a method-based assertion. You can't tell it what... You can't get it to inspect the image of the condition that's passed to it. Then the other interesting thing that's going on here with this assert, you know, notice I got this effect using regular cert. I didn't have to use assert equals. Using a macro assert, you don't need the assert equals, assert not equals, assert greater than all of those, you know, dozens of crazy assertions that TestUnit has. You just need one assertion, assert, that's it. And you can use regular syntax inside of assert. You don't have to use some kind of special operator for equality. Now, the other thing I'm doing here is the whole thing is only enabled if this debug variable is set. If debug is not set, basically the assert returns nil, which does nothing. If a macro returns nil, then what occurred at that point in the parse tree is it's turned into nothing at all. There's not even a call to a method that does nothing. It just vanishes. Now, so basically you can disable your assertions. Now, there's not much cause for doing that in unit tests. I don't think that would be very useful. But assertions are useful for a lot of things besides unit tests. Some people take assertions to a great extreme, and there's a whole paradigm called Design by Contract, where assertions are used extensively. I don't recommend going that far, but it is useful to be able to place assertions in your regular code and have expectations in your mainline code that can get checked. It's also nice to be able to turn those off in production mode, so you're not getting the cost of those extra checks. Now, let's talk a little bit about the syntax trees and the formats of those. Basically, we've got a tree structure. Here's an example expression, and this is the tree that it would turn into. At the top, we've got a plus node. Its left side is an A, and its right side is the star node over here, which is left and right sides. This is just like an XML tree or any other types of tree data you might have to deal with. Most of you may be familiar with ParseTrees, but we had a different library for creating Ruby ParseTrees. Ruby ParseTree or ParseTree are the most well-known ParseTree implementation. I wrote my own ParseTree. I consider the output of it to be greatly superior to Ruby ParseTree because Ruby ParseTree is trying to emulate the output of ParseTree and ParseTree is basically a hack that reached into the interpreter and pulled out some data structures from it that were never intended to be publicly accessible. The internal ParseTrees used by the interpreter, and they're just fine, I'm sure, for the interpreter, but they've been munged a little bit. They're a little more distant from your original source code than you'd like, and they're kind of funky. Unlike Ruby ParseTrees, red ParseTrees are actually object-oriented. The nodes are object. There's a node object, it has a bunch of subclasses, and nodes contain other nodes, and that has a number of useful properties. For instance, the subnodes of a node have names instead of just numbers. In ParseTree, if you want to go from your some node that you've got to a subnode of it, you have to say node bracket zero or node bracket three or something, and you have to know that, yeah, three means the rescue clause or something in whatever node you're looking at. In red Parse, you can say node.rescue or node.params, node.name, instead of having to deal with all these numbers that they're not so meaningful. Finally, red ParseTrees actually are very close to the original source form of the code that created them, whereas Ruby ParseTrees have been manipulated a little bit. For instance, with Ruby ParseTrees, rescues are handled in a strange way where there's multiple nodes that are nested together. In red Parse, the rescue is one clause that's attached to various other, the various types of nodes that can take a rescue. In Ruby ParseTrees, parentheses, if they're present, have been eliminated completely from the resultant tree. In red Parse, the parentheses are a different node and you can use that if you need it for anything. In Ruby Parse, operators are all turned into calls for you, so you cannot distinguish a call from an operator if it's one of the overriding operators. In red Parse, there's a separate operator type. I used to have this big description of all the node types at this point in my talk, but what I decided was it's actually better to show you some examples of some ParseTrees. You can use this red Parse command if you have red Parse installed to parse something and show you the result of it. Let's just look at a method call, for instance. We've got this call node, it has a name, it has some parameters, some flow control. There's an if node and it has subnodes that are called condition and consequent, else ifs and so forth. How about a method definition that will turn into a... Uh-oh, what did it do wrong? It's not how you define a method, is it? It turns into, you know, a method node which has a body that has things in it. Are there any other syntax examples that anybody wants to see what it looks like? There is this long section... Did you have one? Oh, a round baz, okay. Like this. Okay, so that one looks just like the other one because it's still a method call. If you do another set... You will end up with a parent node in the output. Notice that it's taking a little while to run all these commands.  That's something I hope to be able to fix someday. So yeah, we got the parenz here that turned into a parent node down here. Now, there is actually more information in these parse trees if you really want them. You could turn on this verbose mode and it tells you the positions of things and all kinds of funky attributes like if there were parentheses in the function call and stuff like that, which mostly you don't need to know about and it's just extra useless details. So, that's enough of that. So, I talked about how cool Ruby macros are. There are some problems. As I said, the red parse is slow and because it has to pre-process everything that's got a macro in it, that means the startup of a system that's using Ruby macros is going to be slow. It has to parse all those things using my slow parser. If you've got a file that has macro definitions or anything like that or uses macros, even if it doesn't define any, that file has to be imported into the interpreter using this special version of require, macro.require. You can't use the normal require. That's something I hope to have addressed fairly soon. It would be nice to be able to scope macros to be able to say, I'm defining this macro within this class and so only search for expansions for that macro within the class. Right now, you can't do that. All macros have to be declared in the global scope and are visible everywhere. Finally, if you're familiar with Lisp, Lisp has this thing called macro hygiene. Basically, if there's any local variables defined in the macro expansion, you want those to not interfere with local variables in its caller context. It has to rename the variables for you in this weird way. I haven't implemented that yet. It's a little bit tricky. All macros at the moment are unhygienic, which is slightly dangerous. Now, there's some other sort of advanced features of macros. Macro can take a block. You can pass a block to it. Again, it's an S expression and you access that block using yield keyword, which doesn't have... yield does not have the same semantics as you might expect within a macro. Incidentally, this macro is one that allows you to make changes to local variables within the block, which will be... and those changes will be hidden from external callers. Macros can also have receivers. You can access those with this receiver pseudo keyword. That's not the way I really want to do it. I think I'm going to change it so that you can use self instead. That will probably make a little bit more sense. Oh, and this is the sort of R-spec-y version of the assert macro I showed earlier. Now, here's a macro that I'd like to write, but I haven't written yet. It would be nice to be able to take a big long pipeline like this where you've got a bunch of these functional operators on enumerations, like select and map, that you've stacked together this way and stick the pipeline attribute in front of it and have it turn into something like this. A single loop, which does the same thing, but doesn't have all these blocks and stuff in it, just as a single loop body should execute faster than this would. I have another couple of interesting macros to show you. Do I have time? I think I get time here. I don't want to show that one first. I want to show this one. This is a loop unroller. It takes the body of the loop and multiplies it. I think currently I'm using four as the loop multiplier. Your loop body, if you've got less than four iterations through your loop, it'll just be expanded into four versions of your loop body. If you've got more than that, there'll be four versions, a loop with four versions in it. Because Ruby has a bunch of different types of loops, there's a number of special cases in this. There's probably more I can do here, but right now all I'm trying to implement are the while and until loop types and the times loop.  I'm not going to try to explain all this code, but notice this macro is about two pages worth of code. It's kind of complicated, but it's not too bad. You can actually do a lot of stuff in not a whole lot of space with this. It continuously surprises me about Ruby, how much really cool stuff you can do with not very much code. Something you thought would be really complicated and it ends up being something that will fit on one screen. My other macro that I really like, I just got this one working recently, this is an inliner. If you stick the inline keyword at the beginning of a method call, at the beginning of a method definition, we'll turn that into an inline method, which is basically an inline method, it's sort of a specialized version of a macro. So how this macro actually works is it turns your method definition into the equivalent macro definition, and then that is expanded by a subsequent stage of the macro processor. So I think I've got enough time I can actually demonstrate how some of this stuff works. So this is how you would declare an inline method. Let's give it a parameter. Let's let it do something simple. That's actually created a macro for you in the background called foo, and then you can invoke it like this, and as you can see, it has the same semantics as the equivalent method would have. Now, maybe I cheated, maybe I didn't actually implement an inline macro and just using a regular method call, so let's show you how that works. So one of the features of macros is this macro.expand method, which lets you see what your macro definition or expansion or form or whatever looks like when it's turned into regular code. So foo of four, let's see how that expands. It's turned into, I forgot I don't have history. It's turned into this parse tree, and we could try to interpret that, but what I like to do is just unparse them which takes a parse tree and turns it back into a string, and as you can see what I've ended up doing here is this foo got inlined into the method definition, and the whole method got inlined into its caller. There's some extra stuff going on here. It's a little bit clunky, but basically it's an inline method. This is something that, as far as I'm aware, nobody has done this before in Ruby. Maybe I have time real quickly. I can show you the unroll working as well. Sometimes the parser is kind of slow. While we're waiting, does anybody have any questions they want to ask? Yes. It mutates it twice. So basically what you would probably want in most cases is you'd want to have that side effect happen only once. But there may be cases where you do want the side effects to happen more than once. That's something you need to be aware of when you're doing this. Incidentally, that's currently a problem with my inline macros. It doesn't handle that case properly. Inline should preserve the original semantics of the method call. So it should be evaluating it once and storing it in the variable and then using that. Any more, any other questions? Yes. It should be a complete parser for Ruby. As far as I'm aware, there may be a little corner or two that I haven't discovered yet. But it should parse the complete Ruby 1.8 language. Some of the new 1.9 constructions I can't do. At the moment, it's not possible to use macros to create new types of tokens. You have to use the existing token definitions. I wrote a tokenizer as well, and it's fairly easy for me to extend that to new types of tokens, but probably other people, it's not so easy. That is a feature of Lisp. It has these things called lexical macros. It'd be nice to be able to do that. I think I'm out of time, Mike, is that right? Okay, thank you very much, everybody.


This week on Destination Polaris We pack up All that good on the top and head for Washington State on an overlanding adventure Where we camp sub-zero I hope it's not that cold tonight and uncover a Chinese secret China wall What's this about?


Hey, what's up guys today? We have a special guest on the show. This is one of my first students one of the first coaches that I helped back in 2015 and his name is Jose Gamara and Jose is the owner and director of Suda Soccer Academy. It's based in Wisconsin and And I can't wait to interview him. I can't wait to have him share his story And this is a great interview for you if you're either just getting started or if you've been wanting to coach full-time Jose has a really cool story and we're gonna unpack that here in today's episode So sit back relax and enjoy the episode. All right. What's up, Jose? Thanks for being on the show today I've been looking forward to this for a really long time and I know we got in contact. I think it was around 2015 So we're just gonna get a year. Yeah. Yeah, it's It's crazy. Yeah, it's 2019 now. I Know a lot. Yeah a lot has changed for you. I know a lot has changed for me, too Like during that time But what we're gonna do here is just kind of unpack Your story We'll talk about you know, where you started where things are right now But one of the questions I always have for coaches when I interview them is like just tell me about your childhood and Like when you started playing soccer and just kind of like back in the in the young days Wow, you want to go that back, huh? Yeah My childhood well, I was born and raised in Peru to begin with I I didn't really move to the United States until I was 18 Gotcha. Yeah, I was 18. That was nine years ago already.  I was that kid that Would just go in the parks and just start kicking the ball really Yeah, when I had nothing to do there was no smartphones back then really Right, that was what was fun somehow I've always been You know playing the sport just seem in really involved with the sport even even when I I didn't I didn't really have much room, you know to play soccer.  So I would just go and play on I'm a true and That's kind of when I realized there was a need for a you know for good soccer programs around the area where I live in variable Because I made a bunch of parents that wanted their one of their kids playing a plane Then again, there was no Academies there was a I think there was one club around the area for all, you know So that's when I decided, you know to start Helping out really without it. I wouldn't even charge people any any any any kind of money You know to just train their kids and see where that would take me because that's something I always wanted to do as well Right. Yeah, that's that's one of the questions I had was and it was very similar to me when when I first started I Did everything for free. I just wanted to to help and yeah, and I've seen You know a lot of coaches now when they start I Don't want to say every coach but a lot of coaches out there when they do start They're they're just trying to make money at the beginning and then they see that that's hard to do and then they just quit But with with that mindset of wanting just to give and help Really what it does is it it allows you to meet a lot of parents. There's no pressure and you're just doing it because you want to help and I know you're still That's that's reason why you're still in business because you've been wanting to help rather than take and and I know that's that's a big problem that I know some coaches have when they first start and And I know that's that's how you started and I know when you were younger. So when you were back Growing up obviously you played the game all the time. Did did you see yourself when you were like a kid? We did you see yourself like wanting to coach or did you find that out later on when you when you moved here the US? Yeah, I see myself to become a coach. You said I'm sorry. Yeah, yeah I've always thought about it To be completely honest with you. I Remember tell myself, you know, if I if I wouldn't make it to a pro league, I would I would have probably go for coaching Right. Was that something you wanted to do is play a pro? Definitely Gotcha Did you was that something when you got to the States? Were you like trying to do that? No, it was mostly when I was younger though from From, you know, I I really I I can't even remember when I first started playing but I I really enjoyed playing the sport and You know, I tried out up until I was 16 17 What I basically didn't get recruited by any club and back at home and you know You got you have to get a job. You have to start going to school. Mom was pressured. Mom was always on my ear about, you know going to school and I Actually moved up here as a exchange of student. Oh, okay You know, but nothing to do with soccer at that time that that was mostly the time when I like stopped playing really when I was 18 up until I was 21 22. I didn't have Anywhere to play really, you know, right? So how was it? How was it when you first got to America? What was that feeling like was it? weird did it feel like Completely different life definitely a different life. That's for sure, but I Don't know. I was young. I adapted pretty quick. I guess gotcha Um, the language is always a big thing still Right. I mean sounds like you speak really good English. Oh, thank you, man But I get better every day, you know, we're anything you do, right? That's funny How did that that's a question that? You know, there's another there's a couple other guys I've talked to that came from different countries, but Like how hard was that learning the language? I mean, I still learn it every day There's new words that I literally learned every single day, but I guess it wasn't It wasn't as hard for me because I I grew up in I grew up going to a private school, right? and We would have about three hours of English every Every week Gotcha.  You know, right compared to someone that lives here. That was the main thing for me to break that That shyness I guess because you know when you know you have an accent when you know people's don't even understand What you're saying because your accent is that thick that was the biggest thing for me to overcome that That barrier, right? Even though I spoke the language, but you know right when I first got here my accent was was thicker than now and There's people I wouldn't know what the hell was I say? Right, it was funny man. I have a funny story. So this was before I met you, but I Went to Portugal Okay, I went by myself I actually went with a friend, but he was only there for a couple days and I spent some time there in In a city called Lisbon Right when I landed I was so naive I thought everyone there spoke Spanish and And I grew up like my mom was a Spanish teacher. So I Grew up like understanding it. I could speak it really well and right when I got there I was like, oh, everyone's gonna speak Spanish. Like I'll be fine, but they all speak Portuguese and different yeah, and I found out to like right when I got there. I was in the taxi and I started speaking in Spanish the taxi driver and He like just stopped the car and like told me to get out And then I was like what and then I started talking to some people and they're like, yeah No one in Portugal likes to speak Spanish. I was like great They don't like speaking Spanish. Yeah, yeah, and they said a lot of the people that I met too said that they don't Get along with anyone who speaks Spanish. I was like what? That's crazy. Yeah, and I was like, all right. Well, I'm not gonna go talk to anyone then But the next one in English. Yeah It was funny So what one of the questions I like asking to because everybody has a different answer What was the first? Like job That you had like after you got to America Like what was the one of the first things that you started doing to make some money? I I was doing housekeeping for a little while. That was the first thing I ever did Gotcha after you did that did you what other types of jobs? Did you have it after that? I just I started working on a few restaurants here and there and I Realized that, you know, there was more money to be made by serving and bartending, right? So I did that for a last Up until I first met you I guess I After I met you I obviously took me a little while to start getting you know things running on the stuff, but For about five years. I did I that's all I did serving on bartending. Gotcha Gotcha, and when you were doing This might be kind of hard to answer it But when you were doing the bartending Stuff like that When you would get done with your day, would you be like man like I? Want to try to do something else or like what was your thought process went like after you did every single day? Really that what you just said that that was every single day after I'll come back from work Even you know even on the good days when you're making quite some good money, right? I'll just go home and be like, you know, I You know this this is definitely not something I I Even seen myself doing forever or like I you know, don't take me wrong. It's not that I You know that I look down at that job or anything, but that was something I didn't really want to I didn't really enjoy doing Right, you know, it was paying the bills, but that was about it right Gotcha and What what was what do you think for you was the thing that Initially drove you to be like, alright, I want to start this soccer thing on the side So like I obviously you were doing bartending at that time But was there anything that was that just made you be like, alright, I need it I need to put myself out there and just try to do something Yeah, when I Really when I when I'm just a couple parents that got together and asked me if I wanted to You know to help out with a team of kids And I did obviously I was just coaching and we would not train we would just go on the weekends and play And you know, I realized that there was people that you know wanted to do that and I Obviously grew up in an environment where I would always play soccer so my parents took me to Academies camps and you know, I played club my whole life so So I know what you know what what then How how important is For kids to train since they're young and that's what I started doing it That's when I started doing it back then right and I realized, you know, there was a need for for good coaches There was a need for good soccer programs and I really that was my thing I really wanted to to show people that this was You know, this was something doable around here, right? And I wanted to help the kids around here because they really love this board I want the one the few kids that I met they really love playing it and they were just having a blast You know, even though we're losing every single game Remember, right, right there. They were having fun. They're learning Yeah, I just brought back so many memories Right Seriously, that's that's kind of when it clicked Right, yeah, I know it's funny man. I know for me one of the most fun years. I had I Was in college and I was coaching this team and they're they were terrible But like everyone showed up they they were all eager to learn and I just remember like going to games and we would be losing like five or six zero and In my head like at the beginning I would get so frustrated because like I'm competitive and I don't want to lose But I realized like, you know at the these kids Like technically they have gotten a lot better Because they've put in some work and they're still further behind But I just remember that just being a fun year even though we lost But it showed me that like man if I can put something together for kids That's fun. They can learn like if it really helps them then I know I've done my job because a lot of those kids I Know that you know if I was really hard on them if they didn't like coming to practice. They probably would just quit and And I know a lot of those kids I haven't kept in touch with all of them because I mean that was like 10 years ago But I know a lot of those kids ended up going to plant high school and stuff like that and And I know that no matter like how good or bad the players are if they're having fun and They respect you and they show up and they work hard Like, you know, they're getting something out of it and as a coach that makes you feel good too Because you're like, all right, like that makes me feel respected at the end of the day because they're coming and learning for me Mm-hmm. Oh And so I know again this this is one of those questions where I Could talk about it for like five hours on my end But when you like the day you officially started your business Like what was going through your head that day when you're like, all right, like I'm gonna take this for real This is gonna be a serious thing Like explain that feeling that you had like that first day when you did it Well, let's start with I Think there was two official days that there was the first time when I when I just Burn it out some some piece a bunch of pieces of papers and I went around and put them on laundry mats and gas stations Just offer in a free camp a whole free weekend camp. I remember I Just I haven't met you back then. I just wanted to start do something. I just really thought this was something that could work and So nervous.  Who was I gonna meet? What kind of people was I gonna be training? Right? So it was pretty chaotic, but You know what I would probably do it again if I have to go then, you know, just just to just to see how you know How much more structure I needed at the time, right? So how many how many kids showed up to that? I remember there was about 15 or 15 kids Well, that's all different ages though There was some some of them were six years old some of them were 14. I remember All kinds of different levels and yeah, I was pretty chaotic on my end trying to run drills with that big of a group and Yeah, I was it was fun, but definitely Definitely a little crazy But then I set up something after I talked to you I set up What I what I ended up calling a summer school Mm-hmm. I Remember talking to you setting setting up the website setting up the payment And yeah, and I launched a summer program. I opened up 10 groups With each group being You know being confirmed by two ten players Right, you know different age groups. I separated but separated by gender, you know girls and boys and And yeah, I opened up ten groups and Mostly all of them filled up Right, that's awesome. You know and it was it was crazy to me because you know for me at that time Opening up that kind of program was you know putting my putting myself in a situation where I even though I Didn't know if they were all gonna fill up. I you know, I had a stop working because this was a Monday through Friday thing basically and Yeah, Saturdays, I remember having a lot of stuff going on back there And I I was coaching a team that I had committed on already So what I'm going with this I basically was I knew I was not gonna be able to work at you know at the restaurant, right? Right, but it ended up working out because you know just on that program. I met basically all the families that I still work out with up to this day and You know, it obviously made me a decent amount of money So that's basically where everything started, right and so The day that you like went all throughout town and you you put those I guess flyers out. Yeah When you did that Like because I did something really similar when I started but When you were doing that like were you like man? I hope Kids come like to this like what were you thinking? Were you were you just like? Kids better be here or like did you put any pressure on yourself or you just like I'm just gonna go try this I Was trying not to put pressure on myself, but it was hard, right? It was you know, there was a lot of mixed feelings Oh, not wanting to fail like I I read quite a lot about you know Not wanting to fail is the main thing that you have to overcome life. You know I and You know, I knew it could I knew anything could have happened I knew I could have just probably got one kid probably nobody would show up, but you know after overcoming that like After basically putting up the flyers you overcome that fear and you know, you you're just you just you have to do it after that Right, right. There's a lot of mixed feelings. You know, I was There was a lot of adrenaline running through. I was I know I was really Was really hoping it was gonna work I guess mm-hmm And it did Yeah, you had people show up Because I know I know a lot of people out there a lot of coaches when Because I would say most coaches who listen to this podcast. They're in one of three categories. They're either They have a job they they want to quit But they they haven't done anything about it yet And then there's the coach that has started but they're doing it like on the side And then there's the coach who's been doing this full-time and they've been doing it full-time for a while they want to go the next level but I Know a lot of coaches when they're doing a job and they're like, oh man I want to do this soccer thing or this basketball thing or whatever the sport is They have the time to go around their city to post a flyer or to talk to people or to do something on Facebook But a lot of people hesitate because just like you said they're afraid to fail But when you do it it automatically makes you overcome it because once you do it It's like all right. Well, I have to show up because if there's kids that show up today And I'm not here and I'm the one that looks bad Yeah, then you then you're never gonna be able to do this right right and so I know Again, this is one of the questions. I've asked someone recently and and I know like I can remember the feeling I had when this happened But what was the feeling like I know like after we we worked together for a couple months and We got your site set up and we talked about payments and Setting up subscriptions and stuff like that But what was the feeling like when you know after you got all that stuff set up when you got your first big client who signed up for that type of program Like did you just feel like man like I Know I can do this full-time Like what was going through your head when you when you had those systems in place and you had that first committed client That that was it like, you know, I Right there and then I knew this was something that I could do. I knew it was doable and there was See that was the first program I opened and it was a whole three month program So I knew there was way, you know, there was so many more programs I could have opened like a Just because of time now, I don't I don't have the time to do it all but I could have a you know Straightening program speed and agility program These are things that were going through my head at the time and still through to this day, you know, right?   I know I could get really as many kids as I want. That's everything Basically, yeah, because after that, you know, yeah, you're you're not even thinking about like About okay, who's gonna show up or anything? You're thinking about what kind of programs I could have opened, you know, right? And I knew every every one of them would have probably draw kids from maybe the even different sports for condition and all that but right You know, I there then again, there's just There's just so much you can do with the time you have, you know, right? Because then I realized I was also that first summer. I had every single group that I had was training twice a week So, you know, that meant for me to be there five days at a time. I remember Monday through Friday, basically All day Right. Were you pretty dead on Saturday? Yeah, and you know, that's another thing.  I mean, I was tired. My energy was not the same and I also felt like I Wasn't giving the kids, you know, what I could the My everything either, you know, I I could I know I could have done for a little better on some specific days But I was just so tired after after a whole three months doing all that, you know, right? Yeah, you probably like didn't even want to see a soccer ball. Did you for a little bit there? Right. Yeah, man, I'll never forget that. I know for me This is like in 2000 late 2013. I had this summer where It was it was like so crazy, I had coaches that were working for me, but I also had Myself I had like around 40 sessions a week and it was Monday through Friday and Basically did like eight sessions in a row every single day I was terrible at like trying to schedule like it was just all like eight sessions in a row And then I did that for three months And I remember at the end of that I was like I Was really reconsidering like coaching because I was like man, like I just don't know If I can do this like and and then I realized well, you know I have this set up in a way to work like I have to do everything Shouldn't be set up that way And also I had to go back and and change my pricing change the commitment level There's a lot of little details that happened when I got to that point, but I Know for you like if you had to go back, I know you probably wouldn't change anything about that But but now you know you can leverage your time better And I was just on your website before this interview and I was looking at the winter programs that you have set up for the different age groups and Like for you though, this is one one thing that I've wanted to ask you because I haven't talked to in a while, which is like yeah What's what's like the main age group that you train that that's part of your academy Is there like a really popular age group that you like to work with? That I like to work with usually my older kids my own older group of boys I have a U-14 group of boys. So they're all about High school. Yeah, they're almost to high school because You know, they're most some of them are 12 and 13 year old still most of them are there. I think in middle school still right none of them has it's 14 yet, but That's the group I enjoy the most then Yeah, all the groups I guess because they're not you know, then They start getting a little more right They already have the foundation they They're already serious because they're still playing You know you can probably make the sessions more intense They can handle more Yeah, totally get it What's the age group that you've found to be the hardest to train I Don't know the hardest, but I'm you know the younger groups younger groups. You have to have a lot more patience You know, you have to be careful with what you say that for with the little ones, right? So those are yeah, but I could see you could I guess you could call the hardest groups Seven eight year olds. I I am done trying to train a Five and six year olds. Oh, yeah, I can't do that either It's a little too much for me I mean, I'm I think I consider myself a nice guy and stuff, but then when you know, I Don't I don't like not to be When when I'm talking and not there's all these kids not been not been any attention Then you only have like the one minute times time frame where you know, you can get their attention and Right, it's too much. Yeah Yeah, that's what that's something I quickly realized when I started training kids was some of the first kids I started with they were that young and I was like, man, I just can't I cannot get their attention And I always thought like they didn't like me and I wasn't entertaining enough because the way I am right now It's the same way. I am all the time. Hey, yeah, I'm not this like hilarious guy That's gonna go entertain kids No, I feel the same I make sure I tell my my all my players that I'm not here to entertain you I'm you know, yeah, we're here to here to train and yeah and get better And and I know that was so difficult for me that those age groups but it also taught me to be more patient just like you said with the kids because You know every age group is so Different especially like boys and girls that are between the ages of like nine and thirteen They're so radically different and and that's one of the things. I know you said you said Like in some of your groups, you'll separate them to where it's like boys only or girls only Are you still do you still have it set up that way?  Yeah, they're more comfortable They're more comfortable. That's what I was looking for. See I still I'm still learning You got it so This might be a tough question I like to ask it though For you personally Like what was the hardest thing? That you had to overcome With with your business.   I think it's just only like 20,000, right?  They're like, well, I haven't started because my city's too small And I can't wait till they hear this interview because like you're proving that wrong And I know that's a that's a logical fear, though It's like wow, I mean this there's not enough people That would want to do something like this but But I know that That's a that's a real thought everyone would have even if they live in a bigger city if 100,000 people Most coaches will still think that um and I know for you like The the thought process of trying to get started and you know Putting yourself out there and stuff like that Once you did that. Did you did you just feel like you had a lot more confidence? Like did it just give you a lot more confidence just to get started?  You don't you don't need that much right and how How much more confident do you think you are now? Compared to when you first started your business A lot more I mean just even maybe because I you know, like I said, it's basically the same family that keep coming back And you know, plus I I'll get like one or two new families, but they they already know about the academy They already know about who I am Because I the one thing I don't like doing anymore is hiring coaches Right, so any any program that I start I I make sure that I will be there, you know, if I have to have someone come help me out for one session maybe or you know, that's a different story, but I I that's the one thing I don't do anymore because I did it and it's it's not the same. So any program that I open it I I do it myself, right So families know who I am and they you know, like you said they Before they go they they they had already paid they they had already committed to the programs that I do So they yeah in a sense they you already know they respect you already know they respect the work you do That's why they're signing up. Right Exactly, that's big Right, and I know too like When you go to bed at night, it's like, all right, I have these families who are committed I don't have to worry about them paying They're not paying them at the field. They're doing it online.  Like at that point when you were probably thinking about man, I want to start this thing or I want to do something different Like what would you go back and tell yourself knowing what you know now? Should have started earlier Right Yeah, just um If I would if I could go back, I would have probably tell myself to do it because I this is a thought I had for A few years before I before I set up the first thing, you know the first uh free camp that I did and Probably would have told myself to look check out check out your site Right and how did you because that's what basically helped me the most man. Just having the the whole system set up right And how did you Like when we first initially started talking is that how you found out about me was on youtube? How did I find out about you? I was just looking for sources online really to be honest. I just went on google and At the time that was like you said that was three or four years ago almost but uh, there was no no No many resource not many resources available, you know, right about this kind of business at least or not that I found of right Uh, I came out. I came across your website Yeah, that's right. Then it then it took me to youtube videos then um next week I I was contacting you we were on the phone and I got the book and yeah It's kind of how it went down. Yeah, man. I remember our first conversation um Because I I'll I'll actually never forget this because you were talking about how Like you were wanting to like really get started with it And I remember I asked you a lot of questions that I asked everyone still which is like Well, like why do you want to do this? like What's the real reason? And and I could I could instantly tell over the phone that You are doing this for the right reasons and I remember you telling me this you were like There's no one up here in my city who's doing anything like this and I want to be the one who does it I don't know if you remember telling me that but I just I I I do actually because that was the main thing. There was nobody doing it. There was no No structure academy, right I wasn't even thinking on forming a club. I remember talking to you about that. I do you're the one that you're the one that talked me about a kind of Not not to go down that road and right. Yeah Yeah, yeah, and I could tell That on that call you were like really genuine about just like wanting to help kids And I remember dude, like I've obviously never told you this but I was with my brother Steven and he was right next to me when I was on the phone with you and He was like, oh, who was that and I told him and and I was like dude this guy Like I know it's probably going to take maybe a couple years, but like he's going to be really successful Because he's going to do something that no one else is going to do in his area And if someone else does try to do what you do, like They're going to have a really hard time competing with you because you already have the The best program up there and you you could have that for really long as you want, but I remember I told my brother, Steve About you and I told him yesterday that we're going to do this interview and he was like, oh, yeah remember when when we were talking about you, um, this is really cool man to see that you You did something that so many people are unwilling to do which is like go away from the You know safe route and and I talked about this on another podcast with another coach.  I want to help more kids and I want to create this thing That I can do because I like it. I like helping kids And you already did that and like I would tell you if I talked to a hundred coaches today over the phone Even if they've watched some of my youtube videos Uh, and if they haven't started yet, maybe one will actually start their business 99 will just go back and you know not do it because they're afraid um, they have all these limiting beliefs and ultimately like They just they don't take action And you did that and it's really cool to see where you're at now Because I know that was we talked about four or five years ago um And just to see that you've stuck with it and I guarantee you there you probably have so many stories of Things that have happened over the last couple of years That have been good that have been crazy that have just made you learn more about what you're doing But ultimately that's how you grow your your business and how you grow yourself is by just going through the experience and If I was sitting next to a coach right now who just hasn't started his business yet and He was like you you know six seven years ago Like what would you tell him To go for it. It's doable. It really is you know Even if there's there's somebody else already doing it regardless of what the situation is You know you you can put all the excuses in your head, but If you don't try it out, you know You're never gonna know right exactly awesome, man, so I asked every coach this too Where do you think your business will be in in like five years from now? Like have you have you thought that far away from I definitely have I think um um The the academy itself I I know for sure it will just keep getting bigger and You know, we will attract more committed players every year and um, I definitely want The one the one problem like I run run into though. It's the field situation on during the winters, right?  There's only about three schools around here uh And the civic center that has a field, you know, and there's basketball programs That's the one thing I run into there's there's a lot going on for me to To be able to rent fields as much as I want in the winter, right So I definitely want to have a facility of my own like, you know, um Basically a skill development facility and I know in five years that's that's kind of a Goal I put for myself, you know that I will the the business will own something like that Right, and you know, then I can have a lot more kids are in the area and I can you know There's there's there's so many more things I feel like I can do if I had a field available year on right For sure. Yeah, and I do know too um A lot of coaches that live Like in the midwest or in the northeast or the northwest because it's obviously it's a lot colder up there Like I live in texas and yeah, I think it's cold when it's like 60 degrees But uh, but I know that's a that's an obstacle. It's like, you know Because a lot of coaches will they'll do something in the summer or in the late spring and then When it starts to get cold, they just most coaches just stop their business And I know you've obviously had to either rent indoor space or negotiate space at those gyms But I know if you had to just Go back into time like on day one when you first started your business like What what do you think is I don't know. This is kind of hard to ask sometimes but What do you think is The outside of you know, the fear of failing and stuff like that What else was really just locking you From beginning like was it was there anyone that was in your social circle that was like, hey like don't do it Or were they like, oh, that's a stupid idea or Like did were people around you like supporting the idea that they wanting you to do it? Or did you even talk to anyone about it before? Yeah, um To be honest No, basically nobody that I talked to in my circle of friends really thought really thought that would work Right. So what that makes you think?  I'm sorry.  Who's going to pay you to train soccer around here and Right, you know things like that. I mean, I was obviously probably in the wrong environment. I was I was working at a restaurant Right. Do you still do do you still see those people or no? um No Right. No, really. I mean I have I have some of them on facebook and stuff but no, I mean I guess I've been caught up with what I'm doing and you know, not paying attention to it Not paying attention really to I don't really I I thought I don't really have time to you know, like to Right many more many other things Right, right And it really is though I get home and after you know after after training for a few hours even You you are tired not not not you're physically tired. You know, you are planning on things Right now I'm planning on my summer programs already You know when once the spring hits the one thing I started doing with the whole with the with the academy is that um, I don't know for how long I'm gonna keep doing this, but um I also Offered a coaching service now for clubs Okay, cool. I didn't know that Yeah, that's something I I don't have on the website yet Gotcha, but since last spring I offered that to you know, so during the season. I'm pretty busy I I had to travel about an hour away from from my from where I live last Last spring and I have to do it again this fall But this fall I got, you know, I got hired already by an order club to coach two of their teams and So I guess I'm pretty occupied man. And on top of that, I have I I still do the you know, the skill development programs year-round right basically, right and And Here and there I try to have the the one-on-one sessions, which is something that I I think I kind of want to You know go towards now Just because of the time commitment with the other stuff.  That's awesome. And I mean you have You have a lot going on and It's just so cool. Like I love talking to people like you because it's so cool that you've You've made that decision To just be like, you know what? I'm gonna do it and if other people are telling me not to do it I'm just gonna want to do it even more And yeah And that's really the opposite of how most people think though like most people we're gonna go ask their parents They're gonna ask their friends whoever they hang out with and If you ask someone who doesn't own a business they're always gonna tell you not to do it That's just that's really just the way it goes and and so I know I've kind of already asked you this but If we just kind of like rewind even even a year ago so if we go back to One year ago, how much how much more do you think you've learned about your business? Just in the last year just like to how to how to value your time I know you mentioned that you're not bring on any other coaches and stuff like that So I'm assuming you've made a lot of changes in the last year But like how much more do you think you've learned just about you and your business in the last 12 months? A lot, you know Each day that goes by you you learn Even how to talk to parents, right, you know, you're you're learning something every day that goes by That's the way I feel You know because there's a lot of things that come into place And you're not even talking about the quality of your practice itself You know you're talking about things outside that right That's where that I think that's where I needed to learn the most right because I was I was really shy to talk to And I you know anyone that reads your book A lot of us are probably on the same page, you know anyone that wants to start something like this You are shy to talk to parents.  Not many not many people's is willing to do that Right Yeah, so in the last 12 months, man, I uh I've learned a lot. I I really have like I like I told you, you know, I don't I don't bring in new coaches now I have one or two guys that You know would randomly help me and the families that I coach already know them Right. It's basically what you know when something crazy comes up for me I have a session today and You know some some of the family gets sick or I have to go outside of town and The one thing I don't like is canceling practice So I you know, I would probably call one of these guys to Come run practice for me for the day and I'll just pay him by the day Yeah I don't I don't I don't do any more like that. That's that's the one thing I I quickly realized was not going to work out for me Mm-hmm. Yeah, and I've I've transitioned the same way man. It's probably something you don't know about me It's I I mean I used to have 12 guys that worked for me and we had I mean An unreal amount of kids that were in our program at one point and It got to a point where I My role was It was so far away from soccer. Like I wasn't even training kids anymore It was I'm just dealing with Managing people Yeah And I realized at that point I was like man this It really isn't fun. Like I wasn't waking up happy like that. I have to go Like refund this parent and deal with this problem because this coach didn't show up to the session Or this coach didn't show up to my camp. So like I mean there was a lot of problems I ran into and and I've learned since then that you know Personally, I just I need to become better at leading But that made me realize, you know back then I was like man, I'd rather just help coaches Who like me that want to do their own thing? They want to get started and that that was really once I started taking this more serious, which was helping more coaches um versus just building out this Empire here in my city where we have like hundreds of kids and all these coaches that I'm trying to manage that It just wasn't it's just not me. It's not my personality and And I know if I didn't make that decision I would have never been able to talk to you because I was way too busy trying to do 500 million things before you came into my life um but yeah, man, I first like I really appreciate you coming on here and And telling me everything and just being transparent and I know I can tell you man There's gonna be a lot of coaches out there Who were in your shoes?  Everybody has obstacles And everyone's kind of have to get started at some point And only those who stick it out long term the way you have will will succeed At the end of the day um, and so what I want to do man is I At the end of every episode Um, I always ask questions where I'll ask you a question and you just have to give me a one word Answer so it's it's just a one word answer. So first one Is who is your favorite soccer team? Madrid Madrid gotcha. Have you ever seen them play live Never Gotcha. I think they're coming How far are you from Chicago? I'm only like three hours from chicago They have came the last couple times that they came to chicago to play. I Was working gotcha Yeah, dude, I watched uh It was so funny how it worked out. But when I went to lisbon when I told you earlier um, I had no idea that Uh, there was any games going on at that time and I was reading the newspaper and it said that portugal was playing Sweden and a woke up qualifying game and it was in lisbon Like all right this same year on aldon is latin. Yeah. Yeah. It was it was crazy man ronaldo's Like he's he's always been my favorite player, but like just watching him live like I just could not believe how much better he is than everybody else Like It's unbelievable. So yeah, if you ever have a chance Um, I know he's not on my drew anymore, but Um, if you ever chance to watch him It's crazy, dude. Um, yeah for sure one of my favorite players all the time. Yeah All right, cool. Here's the second question What do you think you'd be doing? if you weren't A soccer trainer like if you weren't running your business, what what would be the occupation you think you would be doing instead I'll be running some more kind of business for sure. Right, right That was always my thing. I always like thought about having my own thing right All right, cool. And then the last one here is What does the word success mean to you A lot of failing a lot of failing failings Right It's funny hearing people's response to that but That's that is the same response. I would give is I mean because you're not going to be able to succeed unless you fail a lot true Like I have yet to meet any successful person Who who has never failed like it's Virtually impossible. And I know that's if we had to really recap our talk That was the thing you talked about a lot is like just overcoming that getting used to it And doing it more because the more you do it the more you're going to learn All right, cool man. So what I'm going to do also is I'm going to post your website And stuff like that under this interview so the other coaches can go check out What you're doing, but is there anything else you want to add? Before we go here Not really coach. I'm honestly just wanted to thank you for For getting me help me getting started back then and Yeah, man, keep doing your thing. You're awesome And I know you have a lot more people to help just like just like I was I I even know people around my town and You know, some of them I I talked to some of them. I direct them to you. I but then again like you said Not all of them go for it. Right, you know, but thank you man. I really appreciated you. What do you do? That was the biggest resource I found online and It's what helped me helped me back then to to get started Right away, I guess. Yeah, that's awesome, man. Now I I appreciate you and And again, man, I'm really proud of of you and what you've been able to accomplish A lot of a lot of coaches want to be where you're at um But you know, they they got to get started just like you said and Again, it's really cool that you're able to come on here and and share your story and I know it's going to be really valuable for For the listeners To hear everything that you said so What I want to do man, I know like right now we're in March today's March 1st but I would love to have you on here um In exactly one year from now Yeah, so so at that point Yeah, 2020 it's weird to say that 2020 But uh, it'd be really cool to to have you on then so We can talk about, you know, where you're at then between, you know today and at that point Because I would love to do that and that's going to be the thing I do with all the coaches that I bring on here is I want them just to Come on here share their story and then a year from now have them on again. So you can talk about how you've grown Uh, what you're doing, um over that year, but uh, yeah, I mean thanks again for for coming on here Uh, I really appreciate your time and again. I know it's going to help out Thank you for having me though. Yeah, you got to send me uh, can I save this interview too? I'm I want to share it on


If you want to make your marketing easier, one of the ways is to narrow your niche. Instead of saying that you help everyone with any kind of problem, which means you've now set yourself up in competition with somebody who solves one particular issue for one particular type of person, when you say you solve everything for everyone, you've now put yourself as a competitor to everybody else, right? But when you narrow your niche, you are now becoming someone who can be a referral source, a referral partner, and a collaborator with many other types of service providers. So for example, if I say that I can help anybody with any type of business with their marketing, all right? Now I'm setting myself up to compete with business consultants who help Fortune 500 companies and I'm also competing with business consultants who help small businesses, right? I don't need to compete and be in opposition with these two types of business consultants because truthfully, I only serve a very specific type of business. I tend to serve people who are coaches or therapists or people who have a more spiritual message that they want to build a business around. And I only help them if they care about a more authentic type of marketing. I don't want to help them do the more traditional marketing that can feel pushy to them, right? So that's an example. So what about you? Are you saying that you serve all kinds of people with all kinds of problems or can you be more specific about what type of person you help? And what type of problem you help them with, okay? So let me give you a couple of categories that you can narrow down in terms of the type of person. So what age range do you tend that you best serve? Yes, your modality may help people who are 18 and may help people who are 80, but as you get more experienced serving people, you'll find that maybe you really enjoy working with people who are in their 40s or working with people who are in their 20s or working with people who are in their 60s. And if you just say a single decade, 40s or 60s, there are plenty of people that you can find who are in that decade. So age range, a particular decade is very helpful to narrow your niche to. Maybe it's a particular gender, maybe you really best help men or you really best help women. If you have a case, then say that. There are plenty of women in their 40s or men in their 50s, right? That's still a huge, huge audience that you can serve and there's going to be enough clients for you. Or maybe it's the professional background. You find that your ideal clients tend to be from a particular industry or have had a particular type of job. If that is true, then say that so that they can identify themselves when they look at your website and say, oh, that's me.  Maybe it's a particular stage in their transformation that you really do well to help. So for example, a client might have an entire life cycle of transformation that they go through from suffering all the way to living a life of their dreams. Where in that entire life cycle do you find that you're most skilled in helping? Because if you can identify that, then that means you can now have lots of potential referral partners. So if you help people transform in this particular part of the life cycle, then you can partner with people who help transform people in this particular life cycle and this particular life cycle, you're here. You now can partner with people who serve people who are here and people who are here. Does that make sense? So the narrower you become in your niche, the more referral partners you have and also the better a job you can do at getting to know that particular type of person and solving that particular problem and the more skilled you become, the more specialist you become and therefore the more well known you become for that particular specialty. And like I said, the less competition you have and actually the more business you'll probably have. Now as you keep serving people in that narrow niche, what's going to happen is that you'll find yourself broadening over time, but let yourself broaden your niche after you've proven yourself successful in serving a narrower niche. Because when you market yourself serving a particular niche, what's interesting is that people who are not quite in that niche will also ask you if you can help them. It's the most interesting thing. It's kind of like when you are sitting in an audience and someone is speaking to an audience. Even if someone is speaking intently to somebody else in that audience, you also resonate when they're speaking intently versus somebody who's kind of just kind of glazing and kind of speaking in general to the audience. Do you see what I'm doing? I'm just kind of speaking to the entire audience here and you don't connect as well with that as if I'm just speaking intently with one particular person. So same thing is when you can narrow yourself and speaking with one particular type of person, ironically you're going to get other people who are just outside that niche will ask you, hey, can you help me too? And you can say yes. You can say yes and try your hand at helping someone who is slightly outside your specific narrow niche and you may find that you serve them equally well as also, then eventually you can broaden your marketing to helping that second niche of person. But if you need business, generally speaking, it's more helpful to narrow your niche so that you have more referral partners and you can get more well known for that particular thing before you broaden out. So I hope that's helpful. I'm always open to your comments and your questions and go forth and get more business by narrowing your niche.