Hello everyone and welcome to the general after you I'm proposing that I don't share my screen Because there's not a lot of context on the slides anyway The The things I talk about are in there. I first the engineering engagement survey And one comment there was I have a clear understanding of GitLab company objectives But I would also appreciate more Explanation on why company has objectives like this. For example, why is all the DevOps important? Even though it's almost impossible to get it right. This is very ambitious and a risky direction. I think that's an Awesome question as I'll try to answer that and I really appreciate people asking additional questions or Arguing with with what I'm saying So With GitLab we went from just version control to doing both dev and ops and What we're seeing in in the DevOps world is that There's an explosion of the amount of projects that companies have due to the rise of microservices and That for each project you need more and more tools It's no longer enough to just have some code under version control. No, you also need tests And you need to check the quality and you need to have a linter and you need to store your secrets and On and on and on There's so much things you need to run a successful project you need Running a project without monitoring and error logging and without measuring the response time in the client It doesn't make sense all these things should work And it can't What's happening now in the whole world is that people start a project and as it gets more popular they add more and more things but That's becoming less and less acceptable if you have an Application that consists of 10 microservices. It's not that you can say oh well Let's add logging as one of the microservices becomes bigger or when there's a problem No, when there's a problem you need the right information immediately you need the metrics you need to tracing you need to logging It's not like measuring response times is optional because a lack of response time in your microservice might might affect another Application or the another service or the application as a whole So you need to set up these these tens or the descents and tens of tools for every application That is just too much work. So with auto DevOps, we want to want to prevent that now Are we there yet? No, like auto DevOps Even the Mitri can't use it right now because it doesn't do database migrations. So we're gonna solve that Doesn't even do HTTPS automatically. So we're gonna solve that there will be lots of other things to solve But the end goal is to make sure that we can run get lab.com With auto DevOps, so all the different services that compose get lab.com should be deployable via auto DevOps And that's gonna take us a year to get there and maybe even more than a year I'm not sure it will be done by the end of 2019 What I do know is next year will have a couple of services on there like version. Okay, calm and other things We'll keep pushing to have more and more services on there and That is the future because Otherwise this this is what every company needs like in all the companies people are creating more services and it's just it's breaking down It's too much work. There's some reports that say that and enterprise companies some programmers are programming only four hours per week Not per day for hours per week. The rest is filled with meetings with with toil. We've seen companies where You have to There's there's like a Process to deploy something that's so long. It didn't fit on a a single wall Like it had to rep almost around the corner was 27 steps or some steps Consisted of seven different service now tickets That's that's what we have to solve. We're in a unique position to solve it because get lab is an opinionated Product an opinionated application. We have we know what you're deploying We know how it works. We know where the logging will be etc So we should we should help and that's why auto DevOps is important Ralph you want to verbalize your comment? Can certainly do that the explosion of project simply means that you you want to have pipelines for all of them But whoever set up a pipeline with kind of gluing all the tools together will have figured out that it's a complex Thing to accomplish and and therefore auto DevOps gets you from zero to at least one pipeline in almost no time So that's the value of it Yeah, there there will be customizations But over time it should be less and less and if you follow best practices even for complex apps like get labs You shouldn't need any still have ways to go like I'm super looking forward to Multi-project pipelines doing that better Brendan you want to verbalize your comment? Yeah, I just had a little Flashback not a positive flashback to you know the last job that I had I got hired to as the first kind of director of DevOps for a government contractor and For this federal government program that brought together three contractors and 15 unique apps There was like a like a 15 page word document on for each deploy You know copying this jar there moving this thing over there making sure this setting is correct So I was just saying that that is the real world and a problem that is not easy to solve But but one that we should I think it's ambitious of us, but important for us to be focused on solving Yeah, and and actually that the number of steps are just going up and up and up That the only thing we can do is automate the steps So make sure it's not humans not humans who have to check the metrics not humans who have to revert it that the complexity Will be there and then what we demand of apps is going is going up So so complexity will only keep going love the green screen by the way a nice pop-up one cool Another thing I care a lot about is the importance of velocity and Eric made a nice commit to the handbook which I which I love we We are unique in that we can Outshape the rest of the industry and that's our most important competitive advantage We're Open core so we can we can incorporate other people's contributions and not slow down But that will be a constant struggle as we add More and more teams like for example, we added a quality team and They've done Mac and team has done a great job like get a lot of the comics so much more reliable The application as a whole has so much higher quality But frequently the burden is on the developer shipping new features to make sure that they pass all the gates so as We grow it's very natural for companies to slow down to get focused more and all these other things that we also have to do so a Thing I'll keep doing and product will keep doing and engineering will keep doing is keep pressing on the importance of velocity and Finding what the bottlenecks are and solving them and It's important because I've seen a company slow down if companies Really reduce their shipping rate. It's almost impossible to get back up again It's what we're doing now is almost a natural natural thing is to slow down and if you go back to a natural state of everyone Doing too big of a things not iterating not shipping frequently the natural state will be That and it will be it will be very hard to get run back up again So that's why we never have like a book fixing release because if you lose that pressure for to to To move people ahead to ship new things it it will never come back and you'll stay at that stage for the for the rest of your company John had a comment. I think it's about the previous thing, but John. Want to chime in John may said Just want to say that, you know, we're starting to see this this impact. Yes, it's getting crazier, but you know, one of our one of our customers Just said the other day and they're presenting on this in Atlanta for us But they were talking about how they use GitLab to just make all that chaos go away and Automate things and now they're actually moving things to to conversational development They've kind of gone away from what Jira's doing and they're bringing everything to the merge request because things move so fast inside GitLab, but they that's the point where people come together. So what you talked about Really about a year and a half two years ago about conversational development was right on because that's exactly what people are seeing It's a paradigm shift on how they process things I have another customer that very very large Customer said, hey, we went from two week releases to six times a day now. We're on a mission and go to 20 minute That is what conversational development is all about and making customers do that Only way you can do that is to simplify and we're doing that. Well, so good job. We're getting there. Great job team Awesome. Yeah, and I think I think with concurrent DevOps, although it's new to us and it doesn't feel comfy yet I think we'll see that we're spot-on about people Not not We can't afford to just hand it over over like a baton people have to work or currently and I think I think we'll see over time that that That that message will start resonating Joshua, you want to verbalize it? Yeah, sure. I was just gonna share some experience on my last company actually where We were pretty successful. We had a user base grow We were shipping pretty fast but as we grew as a user base grew we we heard the feedback as GitLab does that things are sort of breaking here and there and You know, maybe consider taking a longer time to Ship things and take more care And you know, I think the easy answer is just to say yes and maybe slow things down have longer cycles more testing And the harder answer is to really look and see, you know How you can address those concerns about losing your velocity and what you need to do to invest in the process and the automation but you know, we slowed down and It was it was really not fun and we and that ball just keeps on rolling and it's so hard to try and to try and recover So there's always like a rash totally rational reasons to go slower But it really needs to end take a hard look and invest and Figure out how you can avoid doing that while still meeting the other obviously customer goals you have So, yeah, just thought I was sure that might Thanks, Josh and look it's From the start of GitLab the very start we people argue that we should have a two-monthly release cycle But I'll never double never have a ship as much as we do now So the shorter we can get things the better and sometimes it's really encouraging to see a conversation For example, we had a conversation about feature flags and at one point it was going In my opinion the wrong way where every new feature would need to be a feature flag That would mean that first ever release with a feature flag in it and then the next release you deploy it And then you remove the feature flag. It's a lot of extra overhead for every feature we ship So that was meant slowing down, which is not great We should have feature flags, but only for things that are likely to break Then we Started thinking a bit more about it and someone proposed And feature flags can be used to ship things after our merge request window or after our merge window after the 7th or the 8th When we're no longer merging a feature flag can be used to Ship something that you're not totally sure about But with feature flags, you can at least turn it off if it's needed So instead of going slower, we would be able to go faster and I think that was a great great turnaround There's a comment from Lucas. You want to verbalize your question Lucas? Yeah, I mean there was an exciting announcement by sourcecraft that they're open sourcing their software So I wanted to ask when we are going to incorporate source graph into GitLab or But it seems like I have to read up on hack on news and read your comments and the comments of source graph CEO Yeah, yeah Source graph just announced they're open sourcing it Source graph is a code navigation tool So it looks into wholly the abstract sent X tree of the code understands the code and allows you to navigate between it and It's the there's a couple of startups that do this I think source graph is the best product on the market right now as far as I can tell And they have an a protocol a language server protocol that I think they contributed to Which allows you to plug it in anywhere? I Think it's really an amazing product. I think it's great that the open source it It's great that they choose the Apache license instead of like a GPL and going for a dual licensing strategy This means that we can ship it as part of GitLab and I think It will make product developers more productive There's a monocoe plug-in for it. So we can add it to the web IDE I think the really interesting thing is to add it also to our code navigation. So when you Navigate to a repo you look at a file that all these These pop-ups are available People that I've talked to to that use for example browser plugins to achieve the same effect where most of them were enthusiastic about it So it seems that it's a big value add and it's amazing that they're open sourcing all this This value. So I think it should be something that we Have in every version of GitLab for everyone and it will make a huge difference I'm really excited about that apart from that the CEO Quinn is also a great person and and I If I squint between my eyes a bit, I think I detect a few inspirations That that GitLab gave them to to do this and I Think it's it's it's great. It's it might be the power of open source that gets their product more distribution this way Very excited for this Cool slide five is about ubiquitous language You'll see me talking Frequently when you see me Arguing for something it might be that I want to want to standardize on terms. I want to define terms and That's because as a company goes communication gets harder. There's more concepts in the organization floating around And the hard thing is just understanding each other when you have One word that means multiple things is going to generate confusion And when you have really long words that explain things people are going to use part of that explanation a part of those multiple words and then not have something clearly defined and I've seen it and it's super wasteful. It's unnecessary. So as a As as our management and leadership, we got to make sure that we have ubiquitous language that things have a definition that's clear that is mutually exclusive that is comprehensive and Many times you'll you'll see me either trying to make search a definition or try to enforce it and sometimes it's Things but you can argue how important is it what's the difference between a team and a group and a company and get labbers I think it's important to have those things straight that when you talk about your team It's always clear. It's the team where you belong to with a common With a common manager and that we talk about a group It's something else can be a stage group can be a director group, etc When we talk about get labbers, it's people all the people at the company Talk about the wider communities to people not working at the company, but part of the get lab community, etc Number six is Why if something is in the handbook is When you change it you go to handbook first, but before that James has a remark James on a verbalize it Yeah, I was just saying there is a cost to these well-defined words But when there's a more general word you can say oh, yeah, my team was doing this You can have a conversation where you're thinking about something else The well-defined words mean you have to kind of stop and say my function was doing this and kind of interrupt interrupt yourself to use a specific word, so I'm kind of I kind of dislike these and I'm the same with grammar though So I'm probably not everyone like I prefer it when there isn't a rule You could just say what communicates most clearly rather than most precisely Yep. Oh, that's it. That's a good point. It's it's and it's it's accurate For example with teams and groups. I think we tried something else be first and it was so unnatural that Martin Said look I tried this and it's not working So I'm very sensitive to that if people actually tried something and it's not working great. Let's change it Maybe team is one of those things where we should not Try to just pin it down because it's a general word But in that case we just retire it from our from our official vocabulary and every time you use team people know it's ambiguous and it can mean anything and But then group is defined and then we need to find another word for team I really tried to do that. I couldn't find one So if you have one great, I'm open to changing it So you can use team for freely and that's some some of the words We just kind of give up on like they're they're so ambiguous when I forget the definition, right?  So As the company gets bigger there's more of a burden on you as a writer to make sure you clearly express your thoughts If you're with a group of seven people Yeah, the burden should be both on the writer and the reader as the company gets bigger should be bigger and a communication is Wrapped by like a hundred people a thousand people There's more burden on the writer to clearly express their thoughts So it's different if you're calling with one person I'll care less about the definitions If it's a team call you're addressing the entire company There'd be more enforcement of the definitions If games if you want to respond then feel free Yeah Yeah, that makes perfect sense. And especially the thing about being more flexible and smaller groups Yep, and feel free to call me out on that like Sid this is a small group don't don't be I Don't focus on that too much numbers slide number seven Atlassian's new terms they forbid benchmarking Apparently Atlassian doesn't like when people benchmark their tools and publish about it I don't think this should be Gitlabs policy We like people benchmarking and I encourage people to read that hacker news thread because there's some some great Information about how people perceive Atlassian's products and in that in that friend and Jamie was kind enough to on Monday immediately change our terms and we now explicitly allow benchmarking which I think probably makes us the first company in the world to do that It wasn't wasn't needed strictly, but we wanted to make a point and Go ahead she's I Know we are going to tweet about it I saw your slack, but I think we should think about how to get that word out even stronger It's a differentiator from other companies from a marketing perspective I'm happy to discuss that, but I think everybody should retweet The tweet that'll go out on the benchmarking ability But I think we need to look a little bit more. How do we spread this word a little bit wider? Well She's it's called everyone can contribute so for free to write a blog post all the materials is there all the links are there So just just get a blog post out the tweet is here. It's already went out 19 hours ago Quick suggestion on this. Do we also want to just request that people publish those and how they did them So one of the things that always comes up with benchmarking is what you did and how you did it So not that it's required, but perhaps we ask hey If you benchmark, please make sure you publish how it's how you Replicate this right like please please give these details so that everyone else can follow up with you Some I doubt we'd get anyone playing that game necessarily with us, but that's historically always an issue around benchmarking So it might be worth us just being clear on that if we can yeah I think that's valid. It's I think it's like security Vulnerabilities like you can disclose them without giving us notice. It's your legal rights to do so But please don't please give us notice so we can we can prepare Mitigation for for for everyone else. I think it's the same here. I think Since this is a confusing situation I think right now saying we would prefer if you publish how to reproduce your results I think that would lead to confusion and these these things are confusing For example, the first iteration of game. He was to forbid benchmarking because that's what people naturally do so I think in order to have Clear communicate like a clear statement about this is just to allow it and not to put the burden on anyone If we see a proliferation of benchmarking that is not reproducible We can always say hey great if you publish benchmarks, you're not required to but please do make them reproducible. I do think in In programming and developer tools people tend to be way better about this than in some other branches of Software that I've seen benchmarking like there's a lot of smoke and mirrors in I don't know database benchmarks or stuff like that, but I think that I Think it's getting to a point where you have to have a reproducible test suite and Things like the call me maybe series about databases like the reproducibility of that is just amazing and I Think that you almost look a bit silly if you have a benchmark that doesn't reproduce and people will call you out So I don't think I don't think we have to say that. I think we just say hey, we do allow benchmarking and publishing them I'll pull churned in with quick versus quirky if you've renamed the binary and It ran different things like that and and benchmarking so far hasn't been a problem for us every time There hasn't been a lot of benchmarks and every time someone found something like we should just improve it I can tell you right now what get lab is not doing, right? We use too much memory. We should go Gently should not load the complete reels in the word solving than a giddly one-to-one We need a multi-threaded application service. So we don't consume that much memory However our response timings like the timing of a request are greatly improved especially around merge requests because that's now No longer all server dependent It's a proper view app and those timings are weighed down like first paint and things like that are much much better than a year ago Which is very important number eight Yeah, it was just a fun thing. I saw Chaos engineering or failure injection testing seems to be taking off. I think it's another thing that It's kind of hard to set up unless you would use auto devops in which case we can do a lot to make it work out of the box We're 27 minutes. I thought this was really fun I think this general after you was an example of everyone can contribute things everyone for leaving comments and then Speaking speaking up when asked to verbalize them appreciate that I'm glad to see it doesn't lead to a reduction in the people commenting in the chat So, thank you very much. Have a great day. Bye


Man, this is the divisional round. I am playing the Detroit Lions, going to Detroit. Played this guy earlier in the year, he beat me actually earlier in the year. And he was pretty decent. I mean, I played a bad game on offense, I believe is what happened. And listen, why is Lord of the Homes pants? I don't know what's up with this. I like that, I like that. I mean, 1960s home, I like that. I like that look, let's get it. But anyway, yeah, he beat me in the first round, or in the regular season. So we gotta get a little bit of revenge, man. Thank you guys for all the overwhelming support y'all got for the CFM, man. I'm really trying to keep bringing these CFM games to you guys. Right now it's like, they ask me what temperature it is. It is probably like 50 degrees. I may be lower than that, it was cold.  That's the worst feeling. But when your hands are cold, man, you just put them under your armpits or put them on your nuts or something like that. One moment for a little bit. I'll just put socks on. Let me know what the game like mine too loud. It's a little loud for me. All right, that sounds good for my level. But like I said, thank you guys for all the support you've been giving the CFM. It's been popping, big strap and dominating. Man, I drafted this team for the future and they're really starting to play well now though. So I'm definitely, definitely excited for this team. And we'll see what we can do in these playoffs. But I come out here to get a stop early. This guy was a runner. That's the one thing I do remember about playing him was he was definitely a runner. I'm gonna put Cam Wake right there. I'm gonna put Lonnie Valentina and just to put Daniel Hunter in the little linebacker. What are you gonna put? All right, I like everybody else. So big nickel, let's do that. Because you got, I don't know why. I've been running big nickel more in the CFM than I had in regular Madden. Like I really had that. I don't even run that that much. But in the CFM, I feel like it's my best option. Like even against this, like I really don't know what he's gonna do with this. Fully expect to run here. There you go, Christian Wilkins, Miles Jack. That's Robon Smith. That's what I'm talking about. That's a good job there, boys. Yeah, I'm using the just defense. I like it. Lot of three, four. Big nickel, one, four, six. I gotta start playing down in distance smart. Like, don't go to one, four, six. So he needs to pass, because these kids will run on it and they snap so damn fast sometimes, man. But we're gonna stay in the big nickel against that ace stuff. Definitely gonna make him pass on me, man. You know? The one thing about my team is my secondary is weak.  I feel like everybody everywhere else were pretty solid. I'm like, gosh, third and whoa, just over it. So who is this Stephon dude? What route was that? Oh, that's a pass before. All right, all right, all right. Yeah, my secondary is the sound loud right now. It's kind of loud in my, I lower it a little bit. The noise is messed up. I just, how about that? A little better now?  Are y'all hear it? Damn, it's bad. All right, hold on. I'm gonna fix it. I'm gonna fix it as best I can really. Because that's what I mean. I don't want to be like that. It sound bad, Chad, sound bad. I'm being this. I'm worried about the audio. I gotta pay attention to the game here.  No, maybe I do. Take it three and be proud of yourself. Just the playoffs, kid. Take it three and be proud of yourself. Yup, yup. All right, yeah, I switched. I fixed it up a little bit. I think it was just doubling over. That's all it was. That one play beat me. I'm cool with that one play. I'm cool with that one play. Yeah, I'm cool with that one play he got. I can overcome that one play that he got. Let me just keep trying to lower it a little bit. My bad for the sound quality. I don't know, it's been sounding pretty good so far. Ooh, look at that.  Oh, my man got cut blocked. Okay, man, I'm cool with what happened here. We gotta go ahead and get some points here, boys. That's all we need. I'm playing conservative. I don't really have anybody that can really juke crazy anyway. Nice catch right there. I might've had the post, but the post was going right back into the user, or right back into the deep middle, so they didn't really want to force that post. I know I could go the corner out eventually. Oh, thank God. Goddamn, that safety plate tough right there. I'm telling you, the CFM zones are different. They really are, chat. Let's go Shark Week! Big time play by him right there. Come on, man, this is why we pay Agent Peterson, though. I'm telling you, chat liked it. I mean, my fullback literally went and blocked absolutely nobody. Dilo, what's up, what's up, what's up?  I don't know who this, what hero this guy got to detackle, but that's two plays in a row, absolutely blurred. App, just instant blur. You cannot run like that, man. Like, that's just killed this whole drive. First thing going to one, we just instantly blurred. And then I get a, mm, what do we do here, chat? What do we do? I'm going for this, man. This is why I'm dubbed out W, though. We're gonna make some adjustments here. I don't even think I have any backup linemen. I do, let's put Schwartz here. Just for aggressive, aggressive. That detackle will not blur me again. No, we good, we good. We just not going to get blurred by the detackle again because I put my best linemen out there. Well, maybe we are. This is literally, let's go, Adrian Peterson. Let's go, AP, run over him. That's literally the best detackle of all time. Who is his detackle? Adrian Peterson told me he was ready for the playoffs. Carry him in the end zone, kid. Physical football. And I think I missed the extra point because I'm worried about the chat. Well, I put my best linemen in center. Like, come on, man. I don't know who he got a detackle. He just three plays in a row.  No, it's not Aaron Donald. Aaron Donald has the star on the left. I feel good about that, though. I feel good about getting points. I know missing that extra point was bad. Yeah, I know I got to get off aggressive, chat. That's a good reminder, thank you. If I don't let him run, he can't beat me. I'm telling y'all that right now. This kid is not good enough. Let's go, TJ. Why throw people out the way then? Why don't you? There we go, nothing there. Let's go, no huddle me again. Run this shit-ass off in some more. Run this shit-ass off in some more. Split close. Let's go, man. That's not gonna work anymore. That same nut-ass play ain't gonna work. Find something different. Find something different. Big bully. Nope, nope, nope. TJ, why?  Peterson, tell me you ready. Tell me, tell me you ready for it. Play it or play it, pimp to pimp. I think you shoulda punted. Chat, you feel me? Play it or play it, pimp to pimp. I think you shoulda punted. Play it or play it, pimp to pimp. I think you shoulda punted, chat. Let's go, Peterson. He told me he was ready for the playoffs. All conservatives. Oh my God, why am I missing extra points? Get in there. There we go. Now we can't run. Now the water gets up around his neck. When the water gets up around his neck, they start drowning. Telling you, they start drowning. When the water gets up here and they gotta breathe through the nose, they don't like it. They don't, I'm telling you, chat. When the water gets up there, they don't like it. Telling you, they don't like it. They can't pass, man. The Neil Hunter, man. This team is just geeked, chat. Like just geeked. This is the bummiest offense in the nation, for real. TJ, why? Telling you, we got these animals, boys. We got the animals, boys. The Neil Hunter, I'm telling you, I'm T.O. Oh, I lost to this guy. That's the worst part, chat. Like I really lost games to this guy. Couldn't be me. You know what time it is now. It's a reason we drafted Adrian Peterson. I'm gonna spotlight the D-tackle, man. I can't have this dude just blurring my best O-line. Like, bro, this is the best, bro, this is the best D-tackle in the world. Dude, he is that dude.  Holy, every play? Jones? Dude, every single play. I can't run a dive at all. That's nuts. Not even, I mean, I put Mitchell Schwartz there. I mean, Mitchell Schwartz, not the best run blocker, but holy hell, man. You know, like Inside Zone, I'll tell you that. You know, like Inside Zone, chat. He liked dive, but holy hell, man. That was... Is it Hicks? Bro, he's killing me. That's one thing, I mean, I wanna target running back. I wanna target more, better DBs. And I wanna target interior alignment. I like my tackles, but I don't know what it is. Dive, normally pops for me. All right, now this guy's, now the water's really up close to it. Now the water's biased. He gotta get there. You get these kids having a pass. Kiss the baby, chat. Kiss the baby. Kiss the baby. Gun spread. Oh yeah, now it's gonna get dark for you, kid. And they're still running. They're still trying their best to run. They're trying their best. They're trying their best to run. Hey, hey, King, what I saw out of you in that playoff game, ain't no year, year, year. You better learn how to pass.   My team younger than yours. And good now. It's nice throw by my man right here. It's just a nice throw. Just a nice throw by him. My corners are shitty.  What do I need corners for? That's my, like, what do I need corners for?   The Neil Hunter. Take a timeout after that. A lot of balance for me, yup. There we go, save me a timeout. Take it there and be proud of yourself, man. Come on, chat, round of applause, man. YouTube, put a round of applause so another field goal drive by this guy. Dude, I really lost to this kid, dude. Like, sugar white gaming, what's up, man? I appreciate the sub, man. Thank you, man. Okay, I'm gonna be really, it was four from four and you were running the ball, like, you gotta take the training wheels off. That ass, man. You play the game enough to be good at it, man. Like, I swear that cut block animation is not, I don't really see that that often. All right, this is the ball game right here, boys. Look at the ball, the half. Yeah, there's definitely comp, man. Ooh, wait til we get a skate artist out here, boys. Wait til we get the artist. Wait til we get the artist out here, man. Then, because you think you didn't have to draft the quarterback. That's why your quarterback is bad. Big strat. I am playing CFM, this is CFM Division. We are in the final four. No, what are we in? The final eight of the NFL season. Yeah, I know. I'll get there, I'll get there. I'll get the superstar, dude. I'm winning every award in the world. We had a CFM draft. This is a fantasy draft, where we all drafted every player in the NFL. You can watch how I do. If you wanna check out my YouTube, you can check out every game. My draft, you just gotta go back far enough to get to the point where going over my draft and things like that. You can have that. Let's roll upon Smith, kid. The Neil Hunter. Four sacks for the Neil Hunter, man. You talk about these goons just getting after it, man. God, what type of hit was that, Ronnie?   I should have stayed on it. I really just trusted my mid-read there to make a play. I mean, now this kid just got lasers on. He just got lasers, like, I hate to do. Damn it, man. There it is, Christian Wilkins. Get in on the party, big fella. Get in on the party, big fella. Yeah, Dre, well, I mean, there's got a good history of a lot of people, you know what I saw. I'm gonna try to keep it rolling throughout the year, man. But I honestly feel like my teams won't be too good that they're not gonna wanna play anymore. Like, people like King and these other guys are in the way. I'm like, no, I'm good. I don't wanna play. I am running the world. And any of my offense, defense, specialty teams, you can find matinterf.com. The D-line don't play around. Chatted don't play around. That's why I drafted them, man. You guys can check out my whole draft, too. But who I picked, too. I feel like I had the best draft in the class. I feel like I made one mistake in my draft.    That was such an easy pass. I really should have double teamed. That was bad, Chad. That was really bad. I should have double teamed, but I prepared like he was gonna blitz.  We know how to, know how to. I like what I saw, know how to. Ronnie Harrison getting close to losing his starting spot, Chad. Ronnie Harrison just been letting me down, man. Ronnie Harrison just, I could have had better stick on that play, though, but I could have definitely had a little bit better user on that play.  God, leave that pic. Just like, cause you know what makes me mad? This kid, now he feels like he got it. He's like, all right, I need one more stop. You know how they beat? Yeah, Ronnie, Ronnie, Ronnie letting me down right now, honestly. This play has not been good in CFM. I feel like the zones cover it in CFM. I'm still on double team, man, because I'm not getting three man rushed again. There it is, saying when I double team Aaron Donald. I mean, that's good. That's football. That's how it should work. Can I get a man on the detection one time? Yeah, I would have rather took Derwin over. Looking back on a Derwin over top of Julio Jones would have been a better pick, really.  Like, I need you to catch the football, man.   Catch the football. Damn it, man. I mean, these dudes are just, that was a terrible pocket right there. That was just terrible. Oh, man, my offensive line, I really need to switch my tackles, like I did for my offensive line, because what's his name is getting me killed? Mitchell Schwartz needs to be on the left to get Aaron Donald. Yeah, that's what I should have been doing. I'm like, that's right, don't chat. Or he said, Skimbo not playing 2K. I mean, he still got blurred right there. Skimbo definitely not dedicated. Go agent Peterson. Agent Peterson told me he's ready for the playoffs. And he ain't lying. He ready. I almost wanted 2K, but I want more. I want more XP. Is that bad?  Big dots. Shark Week.  Whoa, child to see who in the chat, man. Where you been at? All right, we've been trying, we've been playing a hell of a program and stuff. Bro, because he thought he was the number one seeder in NFC, that's why. Bro, Dabby, he thought he was the top team in NFC. That's what people think they're the top team in NFC. No. The only thing that the only weakness I have, my secondary is not that good.   God, just throw anything. God damn. All right, kid. Like, bro, we're not even running routes out here right now. We're just throwing the ball.  We're throwing the ball. Snap throw. TJ.   Tell you, get anybody to like fourth and 20, just any play. Don't run any play in a book. Any play y'all got, run it versus me on fourth and 20. Any play you got in the whole book, run it. I mean, God damn, boys, we'll be on the ground right now. I can't lie. This dude, Stephon Diggs, is kind of frying me right now, chat, Jesus. I mean, dude, I swear, my players just don't hit in this mode, man.  I mean, this is the best play in the world, huh? I'm disgusted that he scores points. I'm just disgusted that he scores points, man. He just disgusted that he scores points, man.   Like, dude, oh my God, somebody help me and show me how to get escape artists on CFM.   Oh my God, man. Like, that was the worst. Like, that was the worst dropback at a war or try to escape of the whole world, man. Come on, get off of that. I mean, dude, I'm just not used to not being able to scramble.  Like, that's just brutal, man. It's just brutal how bad he is at scrambling because he doesn't have a Pokemon ability. Like, oh, that's just brutal. That first play was just killed the whole drive.  Yeah, I'll get all the traits. I'll get all my traits. Gun bunch.  I'm not gonna lose this game. No, all I gotta do is play somewhat smart. That's all. Oh, I didn't think he'd drop it. I just wanted to touch him down. That was a pick six.  Somebody gotta tackle, man. I feel like my team don't hit it all in this mode. Denil. Denil has five sacks in the playoffs, boys. Proud of him, man. I really am. Tackle, Melvin. That's all I need you to do, kid. I mean, we in the jungle. I feel like he's lagging like a motherfucker right now. Somebody hit him. Thank you, man. He didn't snap throw anything. Yeah, exactly.  I want them to tackle a little bit better.  Yeah, that's going to work out well for you, kid. God damn. I know Chad Dalrys wide open. I know, I know, I know.  I'm playing like 400 games with Michael Vick. All right, this is the one thing I used to, like, holy hell. I'm just really not used to my quarterback not being able to move like that.  I better be a first down.   Niko, why you gotta be weird? I didn't play that good on offense this game.   Well, Agent Peterson just disintegrating people. I think we actually have a pro game to play. I just need him to get, I just need escape artists like tomorrow. I'm so bad without it right now. Yeah, Tyree definitely got the A-Rod release. It's not that I'm bad. It's not that I, it's just I'm just used to it.  But we move on to the NFC Championship game. I believe we're gonna play with the winner of T Davis or this door, the Falcons. You know, that's all. Just gotta keep playing smart. Really just stop the run early. People can't, people can't run. They can't play. They can't play the game. Tell you all that right now. People can't run. My team could stop the run. The thing is, I'm telling you, I'll play somebody that could really pass, which I haven't played anybody that could really pass. Well, Mimi, with the residents, he was killing me just because he could pass. You know, and I haven't played anybody else that just can really pass like that. Because my secondary is Buns. It really is Buns. My safeties are slow. That's my biggest weakness, really. Frost deflates way over Froot Loops. No, I don't got the same receivers. My receivers are tough. I wanna picture a freaking Tyree Jackson in one of these, man. Man, they never give me a picture of Tyree Jackson. Oh, they're gonna go Adrian Peterson, man. He spoke to me. He spoke to the coach. And he had three touchdowns that game, dude, three touchdowns. Tyree, I didn't have a great game with Tyree. He didn't throw any picks, though.  Adrian Peterson didn't carry 21 yards, three touchdowns. Tyree had three for 28.  Valdez had two touchdowns, Shark, 90 yards, Julio. Nobody really went off on my team. Really, that game was all about my D-line. Look at this, eight sacks between TJ White and DeNeal Hunter. I mean, I don't know if anybody else got enough of this. Oh, yeah, Wilkins got one and Blair got one. I mean, that was the game right there.  Good game, Bully. Good game for sure. Yeah, and that's, chat. That's why I drafted TJ White, DeNeal Hunter. That's why I drafted, I think they were like two of my top five picks, you know? Yeah, that's what I normally do, I take, but it's tough to, I should've went through the, oh, I'm bad for that. And then we go, this the only players we can update after the game? Oh, man, that's rough. All right, yeah, I don't have a running back, King, because I have eyes and I don't need to run every play. You know what I'm saying? Agent Peterson, my team is young. Finesse move, plus two, hip power. Can I get another ability? I mean, well, we got 99 Finesse move, isn't it, shouldn't I get like, is there another ability I can have? Is this just it? I mean, he really is a monster at all. Like, he really is a monster.   My team is younger. That's my left tackle of the future right here. He's not that good right now, but as you saw, he was getting blurred by Aaron Downer. That's why I do that one thing. Give me two, plus three pass block for Ness, not bad. He's star development, that's why I drafted him. Eight through pass block pretty soon. I hopefully I can get him up a little higher pause. Yeah, I might get a running back. Running back doesn't matter that much. Really running back to me doesn't matter that much. You know, when we talked about my team being young, let's take a look, YouTube, let's take a look. Cause you guys killed me.  They said it wasn't good. Tyree Jackson, 83 overall already, 21 years old. 97 throw power, all his throwing is up over 80 now. Like, look at that. He's a stud, period. By the end of the year, after I get all my awards and all that XP, he's gonna be a 90 overall. Halfback, I don't have a running back.  Yeah, I don't like Brandon bold and Josh. I have bums that running back. Yeah, I don't really run the ball. I just want him to get an end zone. That's what agent Peterson does. Why receivers? Look, we have 25 year old Brashad Paramin, 95 speed, star development. About Angela Valdez, scantling. Got him to 94 speed, six fold, 24. DJ Shark, six four, 22 years old, 94 speed. Of course we got Julio, the savvy veteran. So that's where my youth is right there. Then defensively, I mean, look, the Neil Hunter is 24. I'm saying he's already at 95 overall. That's 24 years old. He's gonna be here for a long time. My right end, TJ Watt, 24 years old. He's gonna be here for a long time. My detac, Christian Wilkins, 23 years old. He's gonna be here for a long time. Cameron Wake, he's a veteran. He's teaching me how to pass, Rush.  Miles Jack and Roquon Smith, absolute animals, man. But the one thing I did realize, the one thing I did realize is that I don't, all my XP when I do my training goes to my D-line and my DB. So these guys really haven't gotten that much better. Or Roquon Smith is gonna win a linebacker of the year, but they haven't got that much better. Next year I might go, because my D-line is so geeked, I might go secondary and linebackers, you know. But then defensively, Melvin and Melvin, Melvin's gonna stay around for a little bit. He's tall, he got decent speed. He's not terrible, but these other guys are all placeholders, really. I mean, DRC will see how fast he is, see how much he slowed down, but these are really just bodies right here. My safety's are young. Justin Simmons is 25, he's at 88 speed. He hasn't been that great, real low zone. Oh my God, he's got really low zone. Blair and Ballantyne are like my users. I mean, Blair is actually a monster. 6-1, he got hit power, 90 speed. We got Lonnie Ballantyne. They gave Lonnie Ballantyne a point of speed, so he has 93 speed now. Ronnie Harrison, I'm telling you, man, he really is about to get cut, man. You know, like, because he's just so slight, he not making plays out here. Like, his play recognition, his zone is 83 is not bad, but 91 hit power, that's why we got him, man. Yeah, I'm not worried about AP retiring. I'll pick up any running back to run the ball, really. To me, that doesn't matter.  Was it Akeem Hicks? Dude, he was just do-do. Yeah, that's what was. He got to have 94 block shut, 95 strength. Dude, every time he just do-do, do-do. I looked at his team before the game, I didn't think it was that good. Obviously, Aaron Donnell's probably one of the best players in the game, is one of the best players in the game. Brandon Graham is really good, too. So his D-line is solid.    Ass linebackers. Kendrick's maybe deep. Deron Lee isn't terrible. Secondary, Jason Verrett, Trey Wayne's. I feel like Trey Wayne's not a bad project to have, really.  See, these dudes suck. I much rather have Rashad Melvin than 5'9", 5'11". Even Jason Verrett, I'd have Rashad Melvin over him. Even, maybe even Trey Wayne's, just because, well, Trey Wayne's is pretty good, though. Just because he's fast. I feel like them dudes suck.  Like, they're just, they're just there. Tyron Matthew, I think he sucks, too. Just because he's so small, you know? And I really didn't think, oh, his old line was good. See, he has Staley, bro, he has Staley and Bakhtiari, and my D-line was getting after him. Tight end, he don't have a tight end. Why are receivers? Diggs was good for sure.  He didn't have a running back.   Move Ronnie to outside line, but no, Ronnie's not gonna play. I really should start Redwine. Just put Redwine out there and see what happens, man. At least he's fast, you know what I'm saying? I like Ronnie, because he had to start development, so I wanted to use him.  You know what I mean? Like, Ronnie is just 6'3", he's just, I feel like I can get away with him being slow because he get hit, and he just, I'm just really not start, I'm really not getting hit, so I'm really not hitting people. Yeah, we're gonna get King. King is in the chat. YouTube, if you're in the chat, if you watch these games live, Twitch.tv slash dub-dot. King said his team is good. Keanu Nill is a beast.   I don't know, I like big people. I like big DBs. Monte Nicholson's a goon. Apke's a goon. That's two goons. He didn't really improve him that much, though.   Trayvon Mullen. I mean, he don't look that bad. Steven Denmark looks tough. Yeah, them two dudes look kind of tough. Darius Phillip, eh. I'm a big height guy. I really am, because like height and speed, that's why these two dudes, Mullen and Denmark look tough. I mean, I would have, Desmond King, you can kick rocks with a 5'10", 89 speed corner. Yeah, kick rocks all the way off the field.  You have KJ Wright on the team.  D-Tackle, Dexter Lawrence. I thought he was the rookie guy. Yeah, he wasn't bad. I kind of wanted to pick him, so he might be tough in the future. Yeah, he got some decent reigns in his young. Yeah, he's pretty decent.    Quinn Williams, obviously gonna be pretty dope.   I've never been a look at his jump rating. I've never been a jump rating matters type of person, ever in my life, ever. I think I hate when people say that. Jump. Cause this is the thing. It's not like one corner has 95 jump and one corner has 85 jump. Like, I feel like that's point. Like, I feel like that's dumb. Like, I've never been that type of guy. You got a good right tackle.   Jordan Milado, that's a goon. That's a goon right there. I'll tell you that.  Hawkinson is probably pretty decent.  When you run heavy panther, you need seven tight ends. Why are we serious? We got Hollywood Brown. That's a tough one. The rest of you, they mean rightly not terrible.  Rest of these dudes suck. You could have anybody. Halfback, we have girly. Chris Carr, I mean, dude, this is how many running backs you need when you run the ball.  You need seven running backs.  That my man literally has no quarterback. Like, he doesn't have a quarterback that can play. Like you have no quarterback that can play. The thing about the quarterback position though, is that you can find quarterbacks in the draft. Cause not everybody's gonna draft a quarterback. I care about agility a little bit. How is this team even close to mine? Like this team is not even close to mine. I literally, I do have the best team. I had the best team. Like I said, the only different, my secondary is not that good. It's really not that good. And I don't think it's terrible, but it's not good at all. It's just makeshift secondary. That's all, but it's gonna get better.  Oh, the trade does have the best defense. I feel like I had the most balanced team though. Like, the trade didn't make the playoffs. So he not getting any extra. He got Fitzpatrick and Xavier Howard. That's tough corners. Tanker's least tough. Like that's already better. This is already better than the Bills. Then he got Harrison Smith for shot Jones is slow, but he's definitely good. Harrison Smith's a superstar. Then he got Montreux, Meander. I mean, I got a good secondary for sure. Jerome Baker, Jerome Baker is decent. Khalil Mack, that's top five defensive player in the game. Then he's got a Indomikingsue, Gerald McCoy. Like he's got the old veteran. Then he got Kaleis Campbell, like the old veteran dudes. But then on offense, he got just got Jaquine Grant. And he really got, he has Brandon Marsh. Like he has Dolphin. Like these are all Dolphins receivers. Devontae Parker, Jaquine Grant, Brandon Marshall. They're all Dolphins. Then we go back to, I mean, he got David Johnson and Marlon Mack. I mean, that's a good two running backs. But then we got Josh Rosen.  We got Josh Rosen with his 89 throw power. Yeah. Well, I'll try to tell you, it was really about eight good players. And when you get to play the king who just runs the ball in fourth and seven, I mean, with Easton Stick, I mean, that's nice. How do you have King, right? This is my thing. And you too, I'll tell you. King wants to run heavy handed, but then draft the quarterback. Like King isn't set. Who was your first pick? Who the retirement home, Kwani? The Bills or the Jets? Let's see what Kwani got. Kwani got Cam Newton, who's an animal. I'll tell you that right now.  Christian McCaffrey, who's an animal. I'll tell you that right now. Christian McCaffrey's an animal. I saw it again. He's an animal. So you got an animal running back, animal quarterback. Y receiver, Deshaun Jackson, got 94 speed. Oh, that's two decent Y receivers.   Kelsey was a monster. I mean, the offense is, I'll tell you right, the offense is good. The offense is good. Trent Williams, or he's a little old, but he's gonna hold down that left side.  Everson Griffin's a good player. Me's a little old, but he's just solid.    Shazier, Shazier. Gary Johnson got 89 speed. If Shazier is half the player he is in CFM as he is in Mutt, he's an animal.  Corner bad. Xavier Rose is solid.  I'll tell you that right now. At corner.  Sean Williams is solid though, because he could tackle. He got 80 zone, like 85 hip power. Yeah, McCordy's good. McCordy's really good actually. 92, McCordy's really tough.  Look, 32, 27, 28, and cornerback is old. Marcus Pete is the only one. Yeah, this team is old. Shazier, yeah, this team is old. My team is tough. J-boy, we showed a Titans. I really, I honestly feel like I had the best team in the game really. Leonard Williams is a horse. Jonathan Hankins is kind of horsey too, but Leonard Williams is a horse. Let's see, do I have a D lineman on the Titans? Shaquille Barrett, then he's pretty good. Nothing special.  You better have some pass rushing linebackers.  Gilbert, Ulysses, I can't lie. If my man's name is Ulysses Gilbert, it's kinda hell. I don't know who he is. He's a little short, but I mean, damn, I'm not mad at Ulysses Gilbert. Brandon King, just fast, bums. Darius Leonard is a good player for sure. It's about an 83 block shot. He's a good player.  Ramsey, Kyle Fuller, I mean, that's two tough corners really. That's tough.  But you know, they're good players. Ramsey would, I mean, Ramsey's gotta be one of the best players to draft, really. 24, Jesus. Free safety, Nickerson. We haven't been free safety. Jesus.  Gatford, what I was gonna say.   Here we go with another runner with a shitty old line. Five tight ends. Look, you runners have five tight ends and seven running backs. Everett's a dog.  Alshon Jeffery, I could put him in the run block. Calvin Ridley got 94 speed now, that's tough. I like Alshon Jeffery for his run blocking. Darius Geis, and we have Sam Darnall. All right, you lost. You lost Sam Darnall in the quarterback. These are the people, you should have picked Darnall over Tyree Jackson. Now look at, my throwing ratings are better than his.  It was you guys that said don't take Tyree Jackson. It was you guys, it was you guys. But anyway, YouTube, that was the vision around we will have the NFC Championship. Probably tomorrow, I'll upload this, man. If you don't have your notifications set, set them both on YouTube and on Twitch so you guys can be ready to watch these games live.


Alright yo's, good everyone, Nick Smith is back, welcome to a new episode of the Indiana Pacers My GM Series. We just completed the 2016 NBA season, we won Coach of the Year and we got Kamala Anthony one of the executive of the year but we are Kamala Anthony. I wish you could have two types of people as one can be your My Career Dude and one can be yourself because mellow I like playing him as my My Career but I want to have myself in the My GM Series so you can't do that unfortunately in 2K so yeah you gotta pretend that we are Kamala Anthony but defensive player of the year Deontay Jordan, most improved was actually to the Toronto Raptors Jordan Valentunas, we went 61-21 and so since we got Coach of the Year and executive of the year we should be good in this season, in going into a playoffs is what I'm trying to say, going into a playoffs we should be good because we got the guys to do it, we got the guys to score, we got the guys to play defense, we got the we got the bench dudes that can do work and Amanda Moudier, these guys are based, Ben Simmons it's his first year already in the all NBA 3rd team which is crazy, all defensive team, Dwight Howard still makes the all defensive team which is pretty crazy, all rookie team, easily Ben Simmons he won rookie of the year but check the other, my man check the other putting work, all rookie second team should have been all rookie first team but he's you know not starting so you can understand why and look how many guys Boston has, I mean it's crazy the Boston Celtics in this series they got like three rookie of the years sorry not three rookie of the years, three rookie second team guys then they got you know the defensive player of the year Dwight Howard or no all defensive second team or all defensive first team, no he's in the all defensive first team, Dwight Howard for them is in the all defensive first team so the Celtics are looking good in this series, I'm not even gonna lie but maybe they'll be champions next season because I'll give you a hint, they're not champions this season okay but yeah we're facing up against Chicago in the first round so to be honest we might not be NBA champions either because of the balls, well do you see that? I'm gonna leave that in there for you guys so you guys can laugh at me and post mean comments in the comment section but no seriously the balls team it's not great right but they got Jimmy Butler an 88 overall almost a 90 overall and we got an injured Demar DeRozan who is out for one to two weeks and probably won't play in this playoff series he would be guarding Jimmy Butler and he and you know Butler would probably be guarding Demar DeRozan and that would leave Paul George open or if you know Jimmy is guarding Paul George that leaves Demar DeRozan open so they worked well as a one-two punch but we got a we got a win game one all right we're at home right now it's the first game of this NBA playoff series as an Indiana Pacer in the 20, 2017 my bad I was calling I mean it's the 2016-2017 season who cares let's see who wins and it's us now we win the game right now we win the game offer just a just a good team effort we shot pretty well 19 points to Paul George and I think Eric Bledsoe and Butler dropped 30 for the balls but now we're in game two 17th April 2017 let's get this win let's get let's get a win man we need to go up 2-0 right now unfortunately the balls are just breaking away at this point we're trying to fight back but every time we score they just score double and so they end up taking this win 99 to 81 so I guess it's a good win for the balls not too great on us and Paul George dropped 18 with Eric Bledsoe dropping 19 points Paul George shot a terrible percentage and look at Jimmy Butler he went 14 for 26 so he literally just carried the balls dropping 38 points that's that's Jimmy Butler for you 5 for 7 from downtown the series is tied 1-1 so now right here it's game number three game number three you know game number threes are important right now either you go up 2-1 or you go down 2-1 nobody wants to be down 2-1 because if you win the next game you're down 3-1 that's mass right there I'm a genius okay what can I say but we were winning this whole time but the balls came back and actually took this win away from us Paul George finally had a game over like 20 points he dropped 26 shot you know 50% but my bad I don't know I should have hopped in this game or something but Jimmy Butler dropped 27 carry the balls once again and so we're down 2-1 we cannot be going down teams in the first one it's the first round series second of all it's up against the balls that they don't even that good like that they're not anything crazy I mean they got Jimmy Butler but they got no D Rose no power Gasol no pretty much a really messed up joking though he's old and not healthy and now we're down 3-1 even PG is playing well I don't know what the problem is I guess it's it's the guy it's the other guys it's on my side it's Eric Bledsoe it's no Demar de Rosen and so we are down 3-1 we need to win this game right here or we will be eliminated and I know you guys to be waiting on some gameplay so you know what we're gonna give you some gameplay in this in this one all right so it's game number five okay we got a win game number five we can win game number five then we don't face well we we we face elimination which are from you know wherever we we are now but let's hop into the game we're only up by one point one and a half minutes left and look at the that's how we start this game that's how we start this game with a slam dunk by mirror kitchen a layup by Jimmy Butler it's all good I go all the way with Paul George right there I was a weird ass lab I never done that in this game and then we play some great defense forcing a double team and yeah it's a backcourt violation by Moe Williams Eric Bledsoe was a just too quick for Moe Williams so we go with that easy slam dunk and oh my goodness not in my house okay and are you ready for this PG oh my good he just sucked that grubby right out of the building but first of all the block on the other end and then the duck on this end I mean that was insane the boy you don't even my boy but McDermott got posterized okay if I ever seen a posterizer that was a posterizer oh my goodness welcome to your Kodak moment whoa what a slam right there PG you better get hyped now even I'm hot right now he gets a quick steal on the other end the Sun White side is running the flea he's actually pretty quick I'm naming a lie he's pretty quick what maybe not in real life but in this game I was surprised when I when I was running up the court right there he gets this rebound off a mirror titch miss and we win game number five which is pretty good off a Eric Bledsoe dropping 29 6 and 7 with two steals PG he got a double double shot really well from the field well Sun White side went one for six with only two points and then on the other end Jimmy Butler play 23 43 minutes 23 points six rebounds and five assist the owner he's telling me force a game seven okay I'm like you know what I will force a game seven let's do this two three let's tie this series up because we are not being eliminated in the first round okay I don't mind if we get eliminated in the second round because I got some moves to make in terms of Eric Bledsoe or a Sun White side or Nevada Rosen but somebody's leaving his team if we don't win a goddamn championship because I'm not happy with the way that we're playing especially because this is the first round we can't be losing to the Bulls in the first round so we do force a game seven and we will see game number seven in the next episode if you guys want to see game number seven smash the like button to show your support if we can reach 400 likes I'll post game seven immediately and these are some other teams that made and the reason I said Bulls won't make another Bulls the reason I said Boston won't make it to the end to you know they won't win the championship at the start is because I got kicked out first round as well hope guys do a video I'm out peace


Hello, it's Weyland Chao and this is Law of Contract Formation, Module 2A, Part B. In this module, we will look at what is an agreement and then look at what is an offer and the various rules regarding offers. To have an agreement, we must have what is called a meeting of minds. So we have a meeting of minds where, firstly, one person or one party makes an offer to another person. And that other person accepts all of the terms of that offer, which results in what we call an agreement. By having an agreement between the two parties, we have what is called a meeting of minds. To help us understand the rules of offer and acceptance, we will be using a scenario called Daria and Jamal. In this scenario, Daria and Jamal are classmates and friends. Daria is thinking of upgrading to a newer laptop computer. One day, Daria says to Jamal, I need some money for a new laptop. Do you want to buy my Apple laptop for $500? Jamal says, I will buy your laptop for $500. So what has happened here? Daria has made an offer to Jamal. Jamal has accepted that offer and therefore there is an agreement between Daria and Jamal. What exactly is considered to be an offer? The legal definition is that an offer is an indication of a willingness to enter into a contract on certain terms. In our scenario, Daria made an offer by indicating a willingness to sell her Apple laptop computer for $500. The terms are that what was being sold was the particular laptop, Apple laptop that she was holding, and she wanted $500 for that laptop. The offeror in that situation was Daria. She was the person who was making the offer, and the offeree was Jamal. He was the person who was receiving the offer. To have a valid offer, it has to be communicated by one party to the other, and that communication may take a number of different forms. The most traditional form, most formal form would be a written document. If instead of having a verbal conversation, Daria had sent an email to Jamal offering the laptop for sale, that would be written communication of an offer. But in that actual scenario, the communication was done orally or verbally. There was a verbal conversation between Daria and Jamal. Now communication of an offer can also be done by someone's conduct. For example, when you go to buy a coffee from Tim Hortons, the offer is being made by you, the customer. When you put money in your hand and offer it to the cashier, that act of putting out the money is considered to be you making an offer to Tim Hortons. Let's now make a few changes to our scenario. We still have Daria asking Jamal, do you want to buy my Apple laptop for $500? But Jamal now says, maybe, can you let me think about it? The questions that I'd like you to think about are, if Daria says in reply to Jamal, sure, that's fine, but let me know by noon tomorrow. What happens if Jamal accepts the offer tomorrow at 12.01 p.m., like one minute after noon? The second question is, what if Daria had said only to Jamal, sure, that's fine, go ahead and think about it, but does not set any precise deadline? To help us answer those questions posed by the scenario, let's look at the rules regarding the life of an offer. In other words, how long is an offer valid for or when does an offer get terminated or die? An offer may die due to a number of different reasons, and we'll look at each of them in detail. The first reason is due to the lapse of time, the second is a revocation, the third is death or insanity, and they could also die because of rejection, and lastly, it can also be terminated by way of the making of a counter offer. The rule is that once an offer has been terminated or it's dead, the offer can no longer be accepted after that point in time. An offer can die due to the lapse of time. The lapse of time could be a specific time specified by the offer or. So once that specific time is over, once it's lapsed, the offer is dead and can no longer be accepted. In a situation where the offer or has not specified a specific time or deadline, the rule there is that the offer is open for a reasonable period of time, and then that begs the question, what is considered to be a reasonable period of time? So the answer to that is that it depends. In determining what's reasonable, courts will look at the specific subject matter of the contract, the nature of the agreement, or the volatility of the market price of the item being sold, and also what is the usual practice in the industry. Let's go back and consider the scenario questions. If Daria says, sure, that's fine, but let me know by noon tomorrow. What happens if Jamal accepts the offer by 12.01 pm tomorrow? The result is that Daria's offer expires at noon, precisely at noon. Any time after that, there is no longer any offer to accept. So at 12.01, there is no offer for Jamal to accept, and therefore no agreement has been formed. The second question, what if Daria said only, sure, that's fine, and did not set any specific time or deadline? Since Daria did not specify any expiry time, her offer is open for a reasonable amount of time. What is considered reasonable will depend on the circumstances of each case. Let's say, for example, in this case, we know that Daria needs to sell her computer as quickly as possible, so that she can use the money to buy a new laptop that she desperately needs for a class that is about to start very soon. So in that type of situation, what do you think is reasonable, one day, one week, one month, one year? Under that fact, based on that fact, I would say that a reasonable period would be shorter rather than longer. There is no one right answer, as long as the answer can be supported by facts, which indicate the reasonableness of the time period. Let's change our scenario once again. We still have Daria asking Jamal, do you want to buy my Apple laptop for $500? Jamal says, maybe, can you let me think about it? Daria says, sure, that's fine, but let me know by noon tomorrow. And now, Sean, another guy, a third guy, third party, overhears this conversation. Without Jamal's knowledge, Sean offers Daria $600 for the laptop. So what can Daria do, and what if Jamal had paid Daria $5 to keep the offer open until noon tomorrow? Let's now look at the rules about revoking an offer. An offer can be revoked anytime before acceptance, anytime before it's been accepted, on communication of the revocation by the offeror to the offeree. So as long as it has not been accepted, an offer can be revoked at any time. The second rule is that even if there is a specified expiry time, in other words, a firm offer has been made. The offer can still be revoked as long as it has not been accepted yet. So you can revoke it before that expiry time has come up. An offer, however, is irrevocable if the offeree has paid something, something of value, usually money, for the offer to remain open for a period of time. So we call that an option. So Sean has made a better offer. What can Daria do? Daria's offer to Jamal can be revoked anytime before noon tomorrow, which is the deadline that she had set for the offer to expire. She can do that as long as Jamal has not yet accepted her offer. What Daria can do is she can contact Jamal to tell him that she is canceling her offer. Then Daria can then contact Sean to accept his higher offer. Now what if Jamal had paid Daria $5 or any amount really to keep the offer open until noon tomorrow? If Jamal had paid Daria any amount to keep the offer open until noon tomorrow, the offer would be considered irrevocable and therefore cannot be cancelled by Daria. So what that refers to is an option. So Jamal would have purchased an option to buy Daria's laptop for the or at the $500 price.


I can't walk on music. That's very exciting So I think up. Good morning. Thank you all for coming to my talk and thank you for that very kind introduction I submitted a talk to word Campeja in 2019 and getting that talk accepted was one of the most exciting moments for me professionally that I can recall and This has been a long time coming since the talk that I Submitted though. I think has benefited from a little bit more time to bake So now that we've actually had all of these fine organizers put this whole conference on a second time Hopefully this will be a little bit more relevant for the present day Actually, let's get a round of applause for the organizers It's enough work to organize a small local word camp much less the regional one much less doing that one twice so My talk in 2019 will 2020 was going to be called the past and future of the WordPress rest API and it was going to be a Retrospective on the work that we did to add the API into core to write the plug-in and To acknowledge the things that we think went well the things that have stood the test of time as well as the things that have maybe proved to be either mistakes or issues that we have to work around and As I was reflecting on that topic that I came up with previously I realized that I had been saying basically the same talk for a long time I had started when we were advocating that WordPress needed a rest API to be able to take our data and Flow it out into different applications and that has happened We have enabled page builders and we have enabled static site generators. We have enabled marketing integrations But the most important thing that the API has done is of course become the foundation for the block editor And the block editor is the future of WordPress. So I think that I'm actually asked the organizers yesterday to change the track of this talk from rest API to development because Increasingly, there is no development in WordPress that does not at least in some way interact with the rest API It's how we get the data one of the ways we get the data from the database in PHP through to the JavaScript on the client and I think it's very important for us to have Consistent understanding of the best practices for using what's in WordPress core So if I may be so bold as to retitle my talk I'd actually like to talk about getting the most out of WordPress in the sense of actually getting that data out of WordPress as easily as possible So if you are comparing what I'm saying to the description on the schedule You might notice that I have a laundry list of topics there that probably would take four talks to give in full and We're going to have to reduce the scope a little bit to focus on two here today So the goal of this talk is to talk about API performance and to talk about how to get faster responses And then to look at schema, which is one of the key Architectural concepts we have inside the API which I believe plug-in developers might find useful there is a lot more that we are not going to get to cover and I would invite anyone to ask me questions about any of the other topics that we could be discussing today in the hallway track at The party online after this and also I'm honored to be going on after a Documentation team lead because that's the most of the work that we need to do and we need to collaborate Between the Gutenberg plug-in development team and the core Committer team to really improve how we describe these patterns for people in the community to be able to use So with that out of the way Let's talk about performance anyone that stuck around for this talk because they didn't want to see Alan talk about performance next door I'm sorry. It's a very very important topic in the project right now If you've been paying attention to the development of the last couple of releases One of the major topics has been how do we get WordPress to operate as quickly as possible both in terms of Rendering the site that the viewer sees on the front-end, but also how do we make the block editor very quick? How do we make the experience of using WordPress as an editor efficient as well? and Unfortunately Partly because it's easy and we'll explain why The thing that I see the most is people taking WordPress rest API data and Looking for the biggest bucket they can find They want to find something that gives them every possible piece of information at once Everything everywhere all at once is a great movie. It is a terrible data architecture process So let's take a interface that any developer in the room or watching on the live stream. Hello Is going to be very familiar with we're going to replicate the core WordPress loop the list of recent posts in A application that's driven by the rest API The most common way that I see people do this is that they hit the posts endpoint Which is where the post live that part makes sense and they give it this embed parameter, which we'll talk about in a moment It's not a lot of data. It's a hundred and sixty kilobytes and that takes a little over five maybe six seconds to download on 3g and maybe one to one point five seconds on decent Wi-Fi and That embed parameter is interesting because if you look at a resource in the API The posts the terms the users they're all separate This is something that sometimes frustrates people when they're looking for that one bucket that holds everything But the way that the rest API works in the way that many APIs online work is that they separate resources And those resources have links. So in this case, there's a link where The author of a resource has its own address and you fetch the author from that address in a second request And what in bed does and the reason that everybody? Uses it move this up a little The reason that everybody uses in bed is that it takes that extra resource and it sends it to you in one nice single HTTP request So going back to our example, that's what we're doing here We're getting the 10 most recent posts and we're getting every single term taxonomy author Featured image every other object that is linked to those posts It sounds really good, but let's think about it. Let's compare that to how we build a theme in PHP We're asking WordPress give me everything that you know about and then I'm only going to use the excerpt the date That's very inefficient Fields is the thing that I most regret not launching the rest API with There's reasons why we held off and waited until a later release to add this parameter But there is a parameter underscore fields Which you can add to the query string for any rest API endpoint and This will restrict the amount of data that is sent back to the user So if you take a pages response and you say I want the id link title and excerpt You get only those things and you don't get anything else This lets us fetch only what we need We only send and download the information that's necessary for our application and we as the developers know what that's going to be The controllers in core actually don't generate the data that we don't need and that makes it much much cheaper to compute Which can actually save hosting costs in addition to saving battery on the devices that are downloading your data The way that that works in core and one of the first takeaways for any plug-in developers in the room is That we have a function rest is field included. We have core code built into the rest API controllers Which lets us understand what fields have been requested and then we have this utility function Which will compare a nested string to the list of fields that the user has requested and it understands things like well Maybe I wanted content raw because I am rendering the block editor But I don't need the rendered version because the block editor edit screen is going to do that for us So let's skip computing all of the content. We don't have to generate dynamic blocks We don't have to run any filters on the content We simply skip it because it wasn't asked for If we apply this fields property to our example, we have the same posts endpoint We're still embedding, but now we're restricting the data to only the fields that we actually need to use to render it out This brings our payload down from 160 kilobytes to 60 kilobytes a 60% improvement and It makes it take about half as long We're beginning to see a lot of improvement That's going to be beneficial for both our users and our server So take away number one Please consider doing this when you're writing your own endpoints support fields so that your developers Anyone that's using your API or if you're writing something that gets the data consider only asking for what you need So that you're going to be as That's weird sorry about that got distracted by the search box So that your data is coming back to the clients as fast as possible Now now that we have only the fields that we need let's go back to that embedding It sounds very appealing to say give me all of the related resources that I don't have to make additional requests But we don't use a lot of what comes back. There's a comments that get embedded There's information about other resources. Maybe a plug-in has associated some other resource with posts And so when you're embedding you can specify a list of Relationships relations author WP term, which is one of the custom ones that we define replies Or we can use fields to filter that as well the syntax on the top is a little bit easier Now if we apply this and say I still want my posts, but now I only want the author term in the media embeds We actually do continue to save additional data. We've lost another 16 or 18 kilobytes and we're now at about 75 percent less data than we started with But you'll notice it's actually not much faster than it was before and And the reason for this is that embedding itself is very inefficient It's duplicative if I am getting the data for my own personal blog I am going to be the author for all of those posts in the Jason in every single post it will say Author K. Adam white over and over and over again if we G zip that it can be sent very efficiently But it still has to be decoded and parsed and queried again and again there's also no way to limit the fields on an embedded response the way we do on the posts themselves and If you have a high-scale site, you're gonna have an SEO plug-in You're gonna have an internationalization plug-in these all add data to rest resources And so you might be taking away a few kilobytes of data by using fields at the top level and then adding another megabyte of data by embedding the wrong resource so The other final and probably most important issue with trying to get everything in one big bucket is what happens when things go wrong Because as I said you can end up with responses that have very very big data Embedded within them and that can cause timeouts that can cause errors and that can cause out-of-memory exceptions And if that doesn't work you just have to try it again from the start you have to start over from zero We can do a lot better than this by using the API in a slightly different way Everybody is scared of this we don't like HTTP requests. We try to concatenate our scripts We have trained ourselves over the past decades so well to want to minimize the number of times we ask the server for something But HTTP has improved our servers have improved Many things have changed that make it much more efficient these days to try to get over our fear of Sending multiple requests There's a gist that I've put up at that URL and these slides I've tweeted out the link to them where I walk through this actual example, but Maybe we can get only those posts. We don't need to embed at all We'll get only the data that we need and then we'll look at what categories are used what tags are used We'll build a list of only the IDs for each of those resources that we need on our page then We'll send requests to the categories endpoint and the tags endpoint saying I want my users But please only give me these two or I Need these tags, but all three of these posts are all in the same category word camp Asia So I only need that once If we do this We actually have a situation where it maybe takes two Three four hundred milliseconds to get that initial set of posts But then we have all of the information we need to start all of those additional requests in parallel at the same time and depending on your infrastructure, they can all run and complete very very quickly and Your application only has to wait for whichever of them takes the longest So if you have a bunch of tags, but only one category and only one author and you fire off all those requests at once You're gonna have most of that data ready to go and then as soon as those tags click into place at the end You have the information you just render In this example when I was doing testing prior to this talk It gets things down to 500 300 milliseconds Fractions of that one and a half seconds on fast Wi-Fi that we started with If you're getting a 60 to 80 percent speed boost and having to generate Encode send decode parse and render only 3% of the original data That is a huge huge performance win for every part of your application And it ends up rendering exactly the same screen. We wanted to have at the beginning if We're writing that PHP theme. We just call get the thumbnail. We don't say Please give me the entire dump of every unit associated with this post in the database and then I'll take the one we want There's no reason why we should continue using the API in a different way than we've learned We should be using all of the other core interfaces and WordPress so Takeaway number two Consider it. There's going to be some situations where the application that you're building or the environment where it's running Meek makes having a number of small requests more difficult But consider it test it benchmark it Tools can help make this easier to one of the frequent complaints that I hear as people hear me say things like this and say But that's a lot more to manage I don't want to have to write a middleware layer to assemble all of these pieces together and We actually already have one in Gutenberg. There's core data selectors that are designed to hit and target individual endpoints There is some base functionality in get entity record, which is a very low-level selector within the block editor Which is capable of understanding and processing fields. We can expand this we can make these Foundation more smart and able to work more for us and even simply by using the block editors data selectors out of the box We're going to be doing things mostly in the right way a Related concept briefly is to try to avoid per page 100 We all want to get all of the data for application And we want to know how many we want to be able to render out all those things very quickly when the users clicking through results But it is almost always faster to request multiple pages of data and assemble them than to get one giant request And also if you start combining this with embedding that is an absolute recipe for out-of-memory errors and timeouts Talking about profiling who's familiar with query monitor All right, that's a very small percentage of the hands in the room So everybody else this is the one if I can be generous enough to offer us homework Please download and install query monitor it is a plug-in by John Blackburn who I'm really honored to work with human made and It is the de facto wordpress performance tool it gives us the ability to look at all of the templates that load all of the database queries all of the cache hits on a page and Get reports about what's slow and understand why And for a year and a half we've been able to do that for rest endpoints. I actually didn't know about this until last year I'm still really really excited that we finally can do this, but if we Authenticate a rest API request because you don't want everyone on the planet to be able to understand the performance of your application And then use this envelope parameter Which says to give you additional data about the headers Suddenly we have a wealth of information About cache hits database queries how many database queries which ones were slow All of this information is exposed on every single rest API endpoint if you ask for it And that lets us look through Things we can do the profiling I was doing earlier where we simply use a stopwatch or the developer tools to time How long rendering a page takes But then if you won't realize something slow You no longer have to just accept that you can actually dive in and you can learn exactly what's going on And you can fix it so between Trying to acknowledge ways that the rest api is built to handle parameters like fields There's been a couple other times so far and it was running theme yesterday a contributor day around Understanding how core does things and why There's some things in the core rest api that we wrote in a wordpress way In the derogatory sense. We didn't use namespaces There are certain types of code that we could have tried and we could have used in core if we had been writing it from the ground up In the php7 php8 era We built it six years ago now over that in fact and There's some things that we probably should just accept Well, this looks like the rest of wordpress But there's also a lot of concepts in there that are very valuable fields being one The other and the thing that i'd like to use the remainder of my time to talk about is schema If you're not familiar schema is machine readable documentation. It's also human readable, but it's more intended for the machines There's a standard called jason schema, which we follow in the rest api And this is actually one of the areas where I do think that our documentation in the rest api handbook is quite good. So excuse me If you do go to developer.wordpress.org Slash rest api. There is a page about schema. There's actually also a page about embedding and linking which I would recommend Plug-in developers consider reading through But the schema is a description of the data that can occur in a particular Endpoint a particular meta field or a particular Registered rest field And the difference between register meta and register rest field is another talk which I hope to be able to see somebody else give some time but The way that schema works with all of these is very consistent You give a schema property when you're registering your route or when you're registering your meta field And you tell it what the type of your data is going to be You can tell it what the defaults are going to be You can tell it that you always should expect an integer You can tell it that this will be either a bool or a string Maybe it you know the same way we would annotate a function. This returns an array of items or it returns null if there's an error By writing out our schema. It simplifies the validation. We can take our application and we can build Things assuming that the data is going to be the type that we want Consider how many times we take a string and we check to make sure that it's a numeric string And then we convert it from a string to an integer And then we pass that integer into a function and then when the result of that function comes back And we have to make sure the array key is set We spend a tremendous amount of our time in wordpress coercing values changing data changing the types of things And the rest api is built to make sure that things come to you in the format that you want And the format that you always expect if you use a schema It's also something where you can access the schema for anything if you go to wp jason What you're seeing is the schema for the entire rest api And you can get that for any individual endpoint for any method That lets us get access to it on the client. We can give it to our block editor plugin We can give it to our static site generator and we can say Here is what this data is going to be shaped as and there's also tools. There's a javascript library called ajv Which let us validate that data So if we're building something on the client if we're taking in data and rendering Form that users will use to give us information that we're going to send to the rest api We can check to make sure that all of the types in our object are correct before we send them And then we can show errors immediately to the user if they need to change something without having to wait for an error from the api There's also work That timothy jacob's who's the current one of the lead maintainers of the rest api has been doing around Generating interfaces based on schema if you have a fields called priority And you know that it is going to be a string that is one of several values You are able to write code that says Let me take that my application in the block editor sidebar is going to read that schema And automatically know that because the type is an enum a list of values It renders a drop-down You don't have to write that drop-down. You don't have to hard code those values Although I think you probably should Register it in a way where it has internationalized labels But there's slides here that are linked both in the url at the bottom and in the qr code on the side from word camp new york From a talk timothy gave about this. It's a very very powerful pattern for plugin developers Because if you're building a framework for other engineers Take something like acf They know what shape They can provide you a form to create But then if they do that in a way where if you make a text box That gets registered as a text field on a schema Then they can use that same information to give you a consistent interface across it in different places I'm not actually sure if acf takes advantage of this, but it's a very powerful Concept for anyone that is building something for other developers to then build on top of So we could still continue to manually check our types. We could write custom validation code. We can Return cast to int if is numeric string one more time Or we can take a little bit of time to read the documentation around these schema documents Learn how to write them and add them to our application in a way where it's going to not just make our lives easier But also be a first line of defense against the api receiving garbage data from other people We do like to be able to just automatically trust wordpress to reject bad things And it's obviously only the first line of security to have a schema But it does assist with your validation and with your sanitization in the in custom endpoints Final concept for plug-in developers if you are taking the time to register a schema is to cache it Because you have to compute that object that jason document that you send back And when we first launched the api We realized quite quickly. I think it was actually alan from next door who flagged the ticket That we were doing this over and over again, and it was causing A lot of slowdown. We were repeatedly creating the same object every time we were rendering a bunch of posts in a response and by simply taking The generated value and storing it on the controller as this schema Then we can return it once it's been generated once without having to continually recompute it So if you're building an endpoint for WooCommerce or a translation plug-in or anything else You're able to Generate the schema once store it in a way where you can get access to it over and over again And when we did this in core there were certain endpoints that got 40 faster No, just moved it up so What have we covered today? We've talked about a couple key takeaways around patterns that we should follow if we're fetching data composing multiple requests Building our own endpoints in a way that they support the fields property by using the rest is field included Understanding that we can make multiple requests to linked data to be getting that same information more efficiently And then we can use query monitor to profile all of these requests and make sure that things are working the way that we expect We can also write schema when registering our routes to make our validation our ui generation And a certain degree of our expectations around the security of requests. We receive more reliable The running theme is that there are some things in WordPress core that we find to be pretty Useful patterns and have really been excited to see them take off in a lot of the big plugins in the space There's also a lot of things that we do in WordPress core that I would like to see more plugins Do we're having a very interesting conversation right now with the WooCommerce team about Improving the way that fields is supported on their endpoints because if you're running a big e-commerce site you want to be able to get that information quite quickly And there's certain scaling problems that we've run into on some of our projects It's an area where we can hold each other to account if you're building a plugin for a clients If you're using a plugin that you've gotten from the plugin WordPress.org site See whether or not things work the way you expect if you add fields Maybe it's a smaller response, but is it returning in the right amount of time? That's an opportunity for us to work together to collaborate and to make our tools able to increase performance The performance team within the WordPress core project is doing some incredible work But I think there's an opportunity for us to step up as plugin authors And I I do actually spend most of my time building agency sites rather than working on core So I'm certainly committing to this myself as well To write our own code in a way that's going to be as efficient and as secure as possible And There's a lot of topics we didn't get to cover today. So do please catch me in the hallway track I'd love to talk about some of the confusion that we've had around context over the years I'd love to Explain some of the things we found when you're on a website with 500 000 posts that you expect to work And then suddenly that tags drop down just Doesn't work What tells what puzzles you what would you like to know about about why the rest api is like that? If you can raise your voice either here at the conference or online Then between the developer teams the document documentation teams and the community as a whole we can improve the resources that we provide around Building these tools in the patterns that they were designed to be used And I think we're right at time, but if you'll permit me one final thought I'm very guilty of talking about the rest api a lot It's something that I've had very identified with me personally I've been honored to work with a lot of the people that were the lead developers of it when it was first created And I'm realizing that probably the degree to which we've talked about it as its own special thing has hurt The community as a whole to understand use and feel like we own it So just as yesterday I asked the organizers to switch the talk Track of this conference presentation that i'm giving today from rest api to general development We have a lot of skills in the wordpress community. We do have very high level understanding of rest api best practices php best practices css best practices I think that we should be out there sharing those things outside of our community in those very special modes There's very specific domains But I also think that I want to do a better job of not talking about rest api best practices Not talking about rest api performance, but calling it what it is It's block editor best practices. It's block editor performance That's the foundation that we need to have to be able to work together as a developer community to build the next couple phases of the Block editor and to do it in a way that's going to make the web a lot better for all of the people that rely on this program Thank you