 Awesome panelists, we're going to talk about plug-in development today. Mike Jingle, I'm going to start with you because I've known you the longest. I would say you're like one of the kind of early patriarchs of the WordPress community here in Atlanta. You definitely kind of kick some stuff off here in Atlanta. And a lot of ways kind of started us so where we are here today with WordCamp and all these awesome meet-ups. Mike runs the coder skill which is a cool thing. You started getting people interested in actually WordPress, more plug-in development, less necessarily user meet-up stuff. Naomi, you run the GEEK, or the Gwinnat meet-up space, is that right as well? Sorry, I also participate in a place called GEEK Space Gwinnat which is a maker space in Gwinnat and so it's all the Gs that are a little confusing for me. You're a mother of two, is that right? Just one. Okay, she's not that crazy. Not that crazy. And you actually have presented here a couple of Atlanta WordCamps and have gone around in some other regional WordCamps and talked. And I met Naomi when you're starting the Gwinnat meet-up and so it's cool to kind of watch what Naomi's been able to accomplish over there. And Patrick, I know nothing about, he's from Denver, so I'm just right. Is that right? That's right. I'm going off. Just like starter profile stuff. It says he's a yoga monkey, so maybe there can be an opportunity for some demo of what that means. And also product manager at WooCommerce, so that's an e-commerce thing in here. Right. We're a press e-commerce platform. Very cool. Guys, if you guys have any questions of the panelists, I'm going to try to get some of my stuff into the end. And then we'll turn it over to y'all's questions as well. Sorry for crossing in front of you. I got to get back to my notes. So I guess the first thing, question I have for you, Patrick. Another thing mentioned on your Twitter profile is that you also make sound effects. So is that something like you do, like, audibly verbally? Is that something you could demonstrate just quickly to kick us off? I could try. You know the water drop thing? Where you like, wow. So I like sound effects. Very good. You probably can't hear them in the back. I'm sorry. I'm not. I don't know how to project that. I do like sound effects. Okay. Very good. Thank you. Thanks for that. So just to kind of quickly get things off, I have this idea for kind of just a couple rapid fire questions. To each of you, let's just kind of go, we'll start at the end with Mike and just kind of let's go as fast as we can for a minute. Don't repeat yourself or anybody else and try to keep it as short as possible. So a couple words at the most. What tool could you absolutely not do your job without? One more. PHP Swamp. Next. A debugger. A debugger. Thank you. GitHub. What? GitHub. No. Mike, back to you. Slap. We're going for 60 seconds. Slap. Okay, thank you. It's funky. Okay. Being stock for deploying things. Fager. Virtual box. Atom. Which is the code under? Composer. Yeah, there you go. Text it. Text it. One more. Close this off. Let's go with Travis CI. Okay. So next question I guess is, I'm going to start with Naomi. So just to kind of give them a little context of some of your most notable plug-in developed as the Strikes Gravity Forms plug-in. Would you say that's probably one of your most adopted plug-ins? If you could just kind of talk about briefly kind of some of that, not so much why you created the plug-in, but kind of where you're at with it now. What maybe are some of your challenges and specifically through the context of developing extensions for existing premium plug-ins. Could you just kind of speak on that? Okay. All right. So, um, excuse me. So Gravity Forms plus Strikes, that is the main product that I work on now and really it started because I was doing client work and it was for a non-profit and they had a lot of members who were not maybe so technically capable. All right. And so the PayPal flow for taking those memberships was really painful. All right. Because it's like, okay, how do I know that they're making it through, that they're making it to this other website and then they're making it back? And that everything is doing what it's supposed to do. So I had heard of Stripe and I'm like, okay, that looks cool. And then I had finally found the perfect use for it. All right. Because as you know, Stripe, it does not send people away from your site. All right. It keeps people right on your site. So I needed it for Gravity Forms because that's what we were using. So I asked the Gravity Forms guys to make it and they were like, well, you know, we're not going to get to it right now. And so I'm like, well, I need it right now. So you know, up until that point, I had resisted going back into programming. I have a computer engineering degree. And so as part of that coursework, we had to know how to program. I had resisted it. And I said, well, I'm going to have to test this off. So I took another extension and kind of reverse engineered it to use Stripe. It was using authorize.net. So I reverse engineered it to use Stripe. And I said, well, hey, you know, I wanted to contribute more to WordPress, but I said, well, hey, maybe this will be useful for somebody. And so I just made it available, put it on the WordPress repository. And about 24 hours later, someone had sent me a $50 donation and was on the Gravity Forms forum saying, please, you guys, we really need this donate. And let's help keep this plugin going. So three years later, people are still donating their $50. And the plugin is still going. Of course, it's gone through a complete rewrite. And really what I did was I resisted it for a while, but I listened to what the customers were asking for. All right, so it's actually turned into something different than just a regular Gravity Forms payment add-on, as you know it. So I would say that was definitely one of the challenges. There was a customer that they kept pushing and kept pushing and kept pushing with money, all right? And so please, we want these features, all right? And so I said, OK, you know, I finally gave in and went ahead and built it. And I would say those few features have probably kept the plugin going and propelled it for the amount of time that it's been going because it was what people really wanted. So I would say that's one thing you need to listen to the customer. And once I saw that, I said, this is good. So I started asking customers, hey, can we just, 15 minutes, five minutes, please, I just want to talk to you. I want to hear from you. So another thing is, I would say another challenge is the WordPress repository, all right? I hate to say that. It was not supposed to be a paid plugin. It was just something I built and I put it out there. And so being on the WordPress repository is both a blessing but also you don't get to know who your customer is and so it's like flying blind because I have no idea who these people are and, you know, of course it's against the rules to, you know, try to find, you know, try to contact them through information that's available on their site. Go ahead and say it. It's a curse, too. Please, please, I can't tweet it once you say it. It's a challenge. It's both a blessing and a challenge as with, you know, most things in life. So, yeah, that has been interesting and, of course, the review system. For any plugin author, that is definitely a challenge, all right? Because, you know, that's kind of, I guess what you live and die by. You know, people come to see your plugin and they see bad reviews and, you know, you don't quite, you know, get the voice that you would like to but, again, it is a blessing but it is a challenge. So that's just something to be mindful of. Was there anything else? Oh, and so you said, so what is it about building something that is built on top of another platform? Of course, people will tell you, you know, never do that. I mean, when you look at it, we're all doing it in some way. You know, strike. You're using strike for payments. If strike goes down, then what? Okay. Even if you're using PayPal. If something happens with PayPal, then what? We're all using these kind of third party systems and putting them together. I was reading an article the other day talking about how, you know, Uber is kind of, it's a transportation company without any vehicles, all right? Really, they're a software company because all they're doing is taking these APIs and then kind of matching them together and creating a service for all of us to use. So it is a challenge and I would say for anybody who is thinking about doing it, choose the right platform. I lucked out, okay? I really did. I just happened, you know, Gravity Forms was popular so I use Gravity Forms and it just happened to be that it's a great platform for doing that sort of thing, all right? There are a lot of users. There are a lot of people that are hungry, you know, for extending it in many different ways and, you know, the people are generally a, you know, a really good customer, okay? You're not going to find too many bad appers, okay? Now, of course, you'll always have some. I'm not going to say there aren't any, but I have been blessed. So I would say choose the right platform if you're going to build an extension on top of someone else's. Another thing is make sure that they are friendly, all right, to third-party developers because some platforms don't want you to. Look at Twitter, all right? Look at what they did with their API. I think LinkedIn just got rid of their API, all right? So make sure that they're friendly and that they want you building on top of, you know, on top of what they have. And also make sure that they don't mind you making a profit off of it, okay? Because that's another thing that may say, well, I don't want you selling an add-on for, you know, my thing. Maybe they want to do it all themselves, all right? So just make sure that, you know, that they are friendly to, you know, to you building on top of their platform because it's just not worth it. You know, life is too short to try to fight with somebody or something like that, so. Thank you. So, Patrick, kind of a follow-up question to that from the other perspective as with your work with WooCommerce, you guys obviously also utilize a number of kind of third-party developer-driven extensions. And I noticed that you also have ninja forums on your plug-in repository profile. And I think they kind of similarly have a kind of an extension model. And if you could just kind of talk about it for a bit, as specifically from the WooCommerce perspective of kind of encouraging people, and maybe on Naomi's note about, do you encourage people to build onto your platform and to extend it and to profit from it and all of that and just kind of run from your perspective or something like that? Yeah, good question. So WooCommerce is a platform. It's a very extendable WordPress plug-in. It's just over three years old. And when we got started, it was the right plug-in at the right time, and we really encouraged people to build extensions. And in three years, we've gone from having zero sites to having 400,000. And I think that's mostly because everything's open. Anyone could do anything. If there wasn't a strike plug-in, you could build it. If there wasn't an authorized net plug-in, you could build it. I think allowing your plug-in to be extendable, to build a platform that other people can build on is the fastest way to grow. And now that we're three years, it's a little bit different. We won't... I feel like year one was the Wild West. We're like, when are you able to plug in and build it? Go, we'll sell it. And now we're much more conservative. We spend a lot more time auditing code. And a lot of people that don't know how to use GitHub were like, we'd love to work with you, but this is a requirement. So yeah, we use extensions now, our own sites. If you guys want to release your own plugins for free on WordPress.org, that's great. But stuff on our site goes through a pretty thorough review process. We still do work with some third parties. We probably do about half the extensions in-house. And so kind of switching gears a little bit. Mike, I know that most of your work is kind of more on the, I would say, more enterprise at this point level. Our type of plug-in. It's a little bit different mindset of I'm gonna try to release a product that's being really targeted and sold to the end consumer versus kind of working in some of these other systems. I'm particularly interested if you can just kind of talk about some of your experience kind of on that side. And maybe tell us a little bit about something that is kind of off the beaten path in terms of what you would normally think of a plug-in to do. First chance I had to cough. The, what I like to do also when I'm doing that is ask or show of hands to get kind of an idea of what people are interested in here. So let me go down the path and say there's a, when you say plug-in development there's probably four or five different kind of things that you might mean in terms of plug-in development. We'll start with WooCommerce. You might want to build a product that you would then sell. You might want to build a plug-in that you then do what Naomi did initially which is give it away. Which she then evolved into a paying version of that plug-in. You might build a custom plug-in because the client comes along and says I need a store locator. So you go build a store locator for them. And then what we have evolved into doing is building what, I don't know how many, how many of you are familiar with MU plug-ins? Let's use plug-ins. So we use MU plug-ins as essentially the base for our site, or for a site that we build for a client. And then pair that with a theme, a custom theme. So of those different things who is here to want to learn about how to build a product? Just a couple. Who is here to want to learn about how to build plug-ins to distribute to the WordPress repository for open source purposes? A few more. One guy keeps raising his hand. And then we want to just learn about plug-in development so they can build custom solutions for their clients. So about two-fifths and two-fifths, right? I don't know what else to say on that one. Well, I mean on that note, I think they all do have some kind of commonalities. There's some structural things that really all good plug-ins kind of need. And so, you know, if you want to focus on one of those specific kind of avenues, and that's fine, but in general terms, what are those core functionality, those core things? I don't know if anybody knows this, but just in case you don't. If you modify core, you shouldn't be programming. So the whole point of WordPress architecture is at least from an extensibility standpoint is to empower as much extensibility with zero modification of core. And anybody who's been programming in open source for a while probably already knows that, but if you're new to the concept, it's really, really, really a bad idea to say, oh, well, it's only one line of code that I have to change here in core. And you do that, you deploy it, and then WordPress auto-upgrades to the next version, and now you're kind of screwed. So I probably need a little bit more specific direction to know where to head. So, well, let me kind of change gears on that, because I wanted to go somewhere, but I don't think we're going to get there. So in regards to specifically kind of APIs and following the WordPress way, if you could just kind of maybe tell us one, what is kind of your favorite, if you will, if you had to pick just a single API to spend a lot of time with, which one would probably annoy you the least? And at the same time, like, what has that specific API kind of enabled you to now do in your development? If you need to take a minute. Let me pull up two. One, probably most people know WP Query, because you can do for, I mean, that's the crux of WordPress is being able to pull data out of the database. So along the lines of what would you spend time spending a lot of time learning, it's learning WP Query, actually learning how to build SQL. So one of the things that I ended up doing when I'm using WP Query is I'll pass in the arguments and then at the very end, after it's returned the object, I'll go to the request property, grab the SQL, pop it into my SQL editor, make sure it runs and returns the data that I was looking for. If it doesn't, then I'll tweak the SQL until I figure out what I wanted and then I'll figure out how to translate it back to WP Query. I use a tool, I'm on the Mac, I use a tool called Navicat. They also have it on Windows and on Linux. There are tools that you can download and pay for, but if you're doing anything professional, don't get in the mindset of, well, I have to use everything that's free and open source. It's like if you're billing $50 an hour, buy a $50 tool that's going to make you that much more productive. So that's the one thing that I learned to spend a lot of time. The one hook that I really pushed for and actually got much to describe a few people on the core team was and now I can't remember do, parse request. So WordPress has URLs that are context free, meaning that you can look at the URL and know exactly what it's going to do if you understand what the rewrite properties have been set to. But a lot of times you want a website where you don't have for example the post-type slug in front of it. So I'll give you an example of a project that we're wrapping up right now. We're doing an internal site for Coca-Cola for brand standards. So for each of their brands I didn't want URLs that said this site slash brand slash Coca-Cola. So the do parse request actually allows you to go in there and fiddle with it. And last WordCamp I gave a talk on advanced URL routing and it's actually called hardcore URL routing. So if anybody's really interested in that topic you can Google that from last year's WordCamp and figure out how to do it. Any of you any kind of favorite APIs you want to add to that? I mean API obviously. Hooks are wonderful. Since I consume a lot of APIs in my work the HTTP API is really great. It prevents you from having to know whether the underlying system has curl on it or not. So it handles all of that beautifully if you need to interact with any outside system. And then a recent favorite of mine is the WP database API. That's really cool because I don't know if you know it or not but you can actually use that class to connect to other databases other than the WordPress database. So it's pretty cool. Let me start with the least favorite is the settings API. My people. So if you ever build something to be extended by someone else write something on top of the settings API like if you want to add a WooCommerce setting it's easier than adding a WordPress setting and it goes in the right place. But I think for favorite API I'm in love with the Customizer right now and I'm trying to move everything I can from like weird checkboxes and settings pages into the Customizer where they can see it. So if you want to have your shop page as the home page or your WooCommerce shop page on the home page you should just do that in the Customizer and all of a sudden see all your products on the shop page as opposed to having abstract checkboxes in the back end. So it's a little bit tricky to do but you can do some cool stuff with plugins in the Customizer. Alright so switching gears in terms of testing one of the things that there's I think a lack of in the WordPress community is really a good solid test driven development but it's kind of challenging when you know I know for myself and probably speak for a lot of other people can you just talk a little bit about your kind of if you do testing test driven development and if so kind of what are some of the challenges so far that you've had with that and how do you kind of manage that? Let me just start. So my biggest challenge with test driven development is getting clients to put the budget toward it. So consequently we've done far less test driven development than we would like to because the projects that we tend to work on are our so what our focus is is we don't actually build sites for clients we build sites for agencies who then deliver them to clients and so when we get a project it's at the 11th hour it's got to be done now because the agency waits to bring us in until pretty late in the process so I don't really have a whole lot to talk about technically I'll let others talk about the technical but getting the client to appreciate the value of it is hard. I would say going back and now now trying to add test cases to old plugins especially old plugins that are kind of large that's probably that's probably the one thing that's been the biggest challenge for me especially when you know you're still learning proper WordPress development practices or just proper practices period you know don't have a function that's a thousand lines long you know don't you know things like that you know they don't lend well to you know to writing new tests so now as he said finding the time to go back and now refactor this old code to be able to you know to be properly tested sure so we use we have unit tests for WooCommerce and we have Travis CI on our GitHub and I think that's all we have for automated testing we're only at about 22% unit tests coverage which isn't great uh WooCommerce is massive and so we're rewriting a lot of stuff to be able to use to be able to use unit tests it's worth it but I wouldn't honestly if I'm starting a brand new premium plugin I wouldn't do unit tests unless you know you're going to have a ton of people using it it's just a lot of work I just wouldn't start like I I like this I think I think you need a very lean so as soon as 100 people buy the plugin as soon as you know people are going to keep using it and buying it then do unit tests I wouldn't I wouldn't do it day one so there's definitely an argument for unit tests it's called test driven development where you define your requirements in your test so I would I would definitely I'm absolutely going to take ejection to that no no I've got projects that never see the light of day they're only used on my own server at home and they're 75% I mean I'm not a 100% unit test guy but to as an expert to tell people that are getting into development don't do unit testing it's okay to accept technical debt you'll pay the interest until you can bother some other time the PHP community spent 5-6 years teaching developers as they're coming up to start with unit testing because when you do that you have a lot less technical debt now understand your argument I face that one I'm not arguing against the unit test I understand I've been in your situation and yes sometimes you just can't get clients to pay for it but especially if it's a Greenfield project I don't usually start with I'm not test driven development but I always have unit tests on 50-75% of it just so that when I go to screw something up later on this setting needs to change I know something else will work I want to interject something here and that is for those of you who don't know who's talking here it's Cal Evans he's a luminary in the PHP community so I'm not pointing you out to embarrass you I'm pointing you out to he's an authority in the space well thank you obviously there's some great area so we'll leave it at that so talk to me a little bit about it you got a question in the back let's start going comment the only thing I'm doing right now to give back to the WP community is to review plugins that work so please do that because that really helps people who are reviewing oh this was my word that really helps the question I had is is somebody new to are going to start trying to do plugins development what is a good hello world plugin what files would you need to change what's the general process for creating a simple hello world we have our dollar well I think I'd like to maybe take that question a little further he said what's a good hello world so I'm going to direct this quickly to Naomi I know you've taught before at the high school level was that right or college level and you taught web development there is that correct program so introduction to Java so if you were to think about that day one what would you take a new plugin developer someone who has never written a plugin in their life they could probably tell you that cooks and filters exist in a tackle box what what would be your first project for them so I would say before you write a line of code read code read good code that would be the first project would be to read some good code so maybe would that be how do you encourage people to read code would you just say here's a plugin like go read this plugin or would you give them maybe here's a plugin that's got a problem go find the bug what kind of assignment would you give so I mean github is awesome but I would have a plugin in mind just a simple plugin they're trying to think of one a very simple one I think there's a user switching plugin by his name escapes me but he's a well known guy in the WordPress community so a simple plugin one file maybe a couple of different files start there look at the structure look at what he's doing alright and then kind of ramp up to maybe something like like easy digital downloads alright which is huge but the reason why I love easy digital downloads is I've learned so much by reading by reading Pippin's code just looking at how he structures things I wouldn't necessarily do it the same way but when you look at different people's coding styles look at how they've solved different problems it helps you then when you sit down to write your own code and so for me I mean everybody's learning style is different but then for me I would take a project that I want to do something that I need something that I want and then I would start so it wouldn't be I guess some hello world it would be something that's useful but that's just because of my personality before I started writing plugins I was hacking plugins so I would use a plugin on a site and I would need to change just a bit of functionality and so I would hack it to do what I needed to do and so that's kind of how I started getting in saying okay I'm just going to develop my own plugin we're kind of talking about moving into starting these plugins and creating my first plugin so if you were talking briefly about the planning process what do you do before you ever go to write a single line of code what is your process for figuring out what your roadmap is before you ever go into that could you just speak that out a bit so let me just start with I write a lot of my blog and just as an example all the posts that I think are really popular no one ever reads and all the posts that I think are throwaway posts become the most popular posts to my blog so we have as a creator of blog content and plugins but as a creator of blog content I have no idea what is going to be popular and so before you invest a ton of time into building a plugin always release a beta of version 1 make it light, make it simple, make it fast and just do 60, 80% of what you think before building a massive e-commerce solution just have a buy button or not even a cart just a buy button once you're at, it's nice we're at scale now with themes we have an ideas board and so we have 2,000 ideas for e-commerce can you please do this, do this, do this last them have 2 or 3 votes a couple of them have 600 votes once you get to that scale it's really easy when you see 600 votes to build that product before you get there for unrelated projects I've just put stuff up on my blog and say hey be really great if WordPress did this if you wanted it to do that please and after 15 emails I built it I think you need to you need to hear from users that they want it and before you spend a lot of time building something you need to validate that's a good idea so we're very lean of themes we want to make sure that idea is valid before investing a lot of dev resources in it yeah so I'm going to kind of go closer to the question that he asked that I think he asked which is more like from a technical perspective how do you go and build the plug in and so let's say that it's not a product this is great because we've got different perspectives from a product person is thinking well should we build it or not and somebody is building it for a client isn't thinking should we build it or not because the client says build it right so from that perspective I don't have a good way to point you to it and I'm not sure I would recommend reading other code until you actually get into working with other plugins building plugins because I'm not sure you're going to understand what you're reading until you actually bump into those problems I tried to write a blog called Hardcore WP for a while and all the posts are still up there and I was trying to build up from the beginning and I found that as a blogger I'm the type of person that goes super in-depth into something and I just never I just couldn't find the time to continue that there are some things up there that they might have, my thinking on it might have been involved since then but it's there's some posts up there about how to structure a plug in but I'm not so much wanting to point you to that because I really don't care if there's traffic up there or not but more to say that there is a very small amount of here's how to build a plug in and then a very large amount of what are you doing with that plug in because what you're doing with that plug in is going to determine which hooks you use and that's going to take you down a path this direction is vastly and wildly different from this direction so as far as what it looks like I've come to believe that that you really need to use classes to wrap your plug in in and your add action and add filters should be done inside of a method we call it on load a lot of people will either say I don't understand object orientation so I won't do that or other people will write how to write an object oriented plug in and I'm going to challenge that both of those are wrong really all we're talking about doing is using a class to wrap the code so that you don't have to namespace your function names you you take the class and you know, unfortunately he's bobbing his head up and down and back and forth here but in WordPress we're still in pre-53 so namespacing is not really the way that you go about in WordPress so WordPress would bastardize the name namespacing to mean prefixing with a common name so if you're doing a plug in it's much easier I'm always looking for repeatable code patterns ones I don't have to think about so that every time I do it I can write the same code the same boilerplate code a year and a half later look back and it's exactly the same because I found the pattern that works and so the pattern that I found that works is a class that wraps everything a static method called unload at the top your hooks are placed inside of there and of course they go to static methods in the in the class and see what else is there and therefore you as much as possible if it's a net hook the name of the method is underscore a net underscore implies that it's not to be used on the outside of the hook you can't make it you can't make it protected because then it can't be called by the eventing system really wish that PHP would have its own built-in eventing system and but if you take that and then of course the header for PHP excuse me the header for plugins which is the commenting system that you learn which is minimally a comment that has plugin name colon at the top that's your starter plugin and if anybody's kind of curious it's like well I didn't really follow that verbally I'd like to see it visually you can come up afterwards or this is a bit of a sales pitch if you're in Atlanta we have a group called Atlanta WordPress Coder Skilled it's on Meetup and our whole point is to do workshops to bring the level of coding skill in Atlanta up our companies would say yeah let's use WordPress instead of Sitecore or some of the enterprise solutions WCQ or SharePoint or whatever so that's kind of our motivation for that so learn the boilerplate and then it's a Wild West because now you've got to figure out what the hooks do good question if you generally I have two answers for that first answer well, the easy answer is no the first answer is depends upon what it's used for if it's what we my company is generally building now we're building plugins that are overarching wrappers for the site the site won't behave won't work without them so in that case they would go into the MU plugins directory if it's a feature add-on like a WooCommerce even though if you're using WooCommerce you pretty much your sites better have it but if it's a feature add-on plugins that you would activate and deactivate like maybe backup buddy then that would go into the plugins directory and one thing about the MU plugins directory they are not automatically loaded unless they're in the root so we always have to create one file called plugin loader and then we just have a require statement for each of the the main file of the plugin in the sub directory is that the WordPress plugin boilerplate you're referring to that's not at all to me that's different well they're more protected I agree so I'm going to pause on that really quick we've just got a few more minutes and I've only got one more real kind of burning question for these guys but I just want to see if there's maybe any other kind of quick questions we can take from the audience before we go I'm going to go back to that testing debate just because that's fun so I understand making making sure that the product works isn't it better to actually put it out there and have people test it and use it and get feedback and improve it as opposed to letting it sit on your computer and never see the light today I think if I took that route I would never publish both plugins because I'm too afraid of the argument for test development is that you start with the tests you start writing the tests and then your development for the actual code goes much faster because you immediately know when it's not working and you immediately before you start writing it, you know what the interface for it's going to be so I would say that you're not on purpose but your argument would be a strawman which would it's not if you the biggest difficulty with test development is getting tests up and running so that you're comfortable doing it once you're comfortable doing it, it's faster I just wanted to add it might be really easy to think about it this way is that normally whenever you develop anything you have a set of requirements and you're defining that set of requirements test-driven development allows you to require set those requirements and also think how exactly is this going to work not just this is what it needs to do and then from that point that's when you go to start writing what he said and I just want to make it clear that we're talking about unit tests here because there are different types of tests so we're talking about unit testing in particular so I think one thing I think is left out of this is the difference between the WordPress community and a test TDD community like Rails so when you build Rails apps that is how it's done it's built with some testing suite you have different gems but it's always built that way WooCommerce is made to be extended if we made it more complex by having more functions that are easily unit tested it would be harder to contribute to WooCommerce it would be harder to build off of it I don't necessarily think in this community everything should be TDD I think that's a different I think that's a different community I think we're not there yet but I don't think we're there yet so I think the problem though is that what you have is you have these large plugins that are on millions of sites and one update breaks millions of sites so that's the problem that's the problem what did you say? so I think that's the problem is that there's there's this reputation for WordPress plugins being the Wild Wild West not being written well you don't know whether it's going to break your site or not I think there really should be an encouragement towards making sure that your code is as stable as possible of course you won't be able to unit tests will not catch everything but it will catch many things and that's what you want you want to know that you've put especially if you're building a product out there that is as stable as possible if something pops up that you didn't foresee just fix it but you want to be confident in what you're putting out there piggyback off that real quick I went to a local produced event called Web Afternoon yesterday and Jeffrey Zeldman's partner Greg Hoy was giving a presentation and he started out by talking about craft brewers and beer and then he made an analogy to web development and so forth but during his presentation for craft brewing beer he talked about one particular person who runs his own brewery but he also runs classes about how to be a great brewer and when asked why he does that and empowers his competitor he says I'm in the business of craft brewing and we're competing with the Giants I don't want anybody to say craft brewing craft beer is bad so I want to make sure that everybody else that's brewing craft beer has kicked ass beer so that piggybacking off of what I think you were saying which is you're putting plugins out there you want people to trust your plugins so you really need everybody else who's doing plugins to have plugins that can be trusted as well and there's a guy that did one more question instead of a TDD approach one of the classes my mindset is more like a responsibility driven program as opposed to test driven programming but even within responsibility programming you can craft unit tests this class or this set of functions is responsible for this set of functionality and nothing else and craft your unit tests around that point so that way to address your kind of a hybrid approach to address your do we get it out or not well we have to we have to get this out we have responsibility to get this out we have responsibility to community we have responsibility to our clients we have a responsibility to our users so let's build the unit tests to make sure we've met our responsibility alright are there any non-test driven developing alright so then I think we've just got a couple of minutes I just wanted to, I like to use this a lot when I talk to people on projects there's a magic wand and all things all wants and needs in life were met and taken care of and you didn't have to be anywhere tomorrow or do anything ever for the rest of your life you can just do whatever you want the magic wand is totally weighted but you have to make one more awesome plugin what would that be what would that be I like I love helping people get something set up so I'm going to go with some sort of coaching plugin like a clarity FM or something like that I like talking to people and helping people fix their problems can it be WordPress related sure as long as it's WordPress related yes sure so the one thing that I would do is I would make it so that every component WordPress is is optional and that you as a developer you have a choice of what component you want to turn on I do not like the fact that you know when you go let's say you do not want to have a user screen or on the user screen you want to turn some things off there are not the hooks there for you to be able to do that so I think WordPress should be made so that each component is something that you can choose whether to add or not for your particular case for your client so that's what I would do WordPress Mike would you like to wrap this up a feature plugin called object relationships and what would that be somebody can google for a post or a track ticket I put up about four years ago it would be a plugin that would allow you to create relationships between any two posts or a post and a user a post one that actually has all the use cases worked out and doesn't have like blind spots yeah go ahead just as and encourage me I will say I'm sitting up here today because of this guy right here next to me I will say that he taught me everything that I know that he encouraged me he always told me hey you're smart enough you can do this you can figure it out he's the one who taught me PHP storm and getting a debugger he didn't let me just kind of sit back and not think that I could do it so I would encourage you find somebody that you admire that you that you can look to it may not even be we don't have an official mentoring relationship I'll ping him sometimes or he'll ping me sometimes but that's about it but find somebody that you can look to even if it's just through their Github profile even if it's just through their blog find somebody that you can follow behind that you can look to that you can be encouraged by so that you can keep going and so that you can do whatever again as I said I would not be sitting here today if it wasn't for him look what I brought I've got a really really long stream on Twitter track method stream oh really it's reciprocal I'll get back to her about you I just wanted to say thanks to these guys if you could just give them a quick round of applause applause applause and if you have any more questions they're all on Twitter so that's gotta be it thank you guys