 First off, thank you for coming. I see some familiar faces. I see some new faces. This seems to have been an awesome word camp so far. So I hope you guys have been having fun. And hopefully this presentation will continue to be fun. We, as you can tell from the title slide, we're going to talk about professional word press development practices. Now, to be clear, these things are not written in stone. This is not the gospel of how to write software using word press or how to develop with word press. These are just things that many of us in the development community use that we employ, that we do, and that we found successful. There may be differences that you have. There may just be maybe the exact same thing that you do. I don't know. But there will be room for questions and we'll talk all about that later in the presentation. So, okay, so with that said, before I get started, I actually like to talk a little bit about me so you have some background as to why I am up here talking about any of this rather than just rambling on about, you know, word press. And this is what you should do because I think it sounds cool. As you can tell, hopefully from the schedule and from this ridiculous introduction, my name is Tom and I'm self-employed. My company's name is Pressware because I, though I do some theme development, largely plug-in development, I really like building software on top of word press. So, take word press, take software, you get pressware. So creative. I also blog daily at TomMcFarland.com. It's predominantly about applying software engineering techniques or various aspects of writing word press code. And I try to follow and try to kind of push best practices, word press, coding standards, all of that. The cool thing is about blogging, in case those of you who haven't done it, is that when you do it, you get some really good pushback in the comments that can help in turn educate you. So if you're not doing it and you think, well, what do I blog about? I blog about what you're doing in word press and share it on Twitter, share it on your social networks, whatever. I have been married to my high school sweetheart for eight years this April. I absolutely adore her. We have now two beautiful daughters, who I adore them as well. We have two crazy terrier months that we've had since we were married three months. We went looking just to go look at dogs. Then we found one and then one had a sister and then I came home with two 10 week old puppies in our apartment. Our first apartment, there went my deposit fee because the carpet and the molding was all gone. Everything that I do is a combination of passion for word press and also for taking care of my family. I am incredibly lucky that I get to do both of those. I'm happy with what I do and it helps make a living and provide for my family. Now, we're going to be, I was going to say we're going to be together next hour, but it's the second day of work or third day since you've been here since Friday. So we've been together for the majority of the weekend. I don't want to be the buzzkill for the weekend. So we're going to try to make this as fun as possible. You can, I don't have this bottom, I don't have this bottom lower, normally it's a lower third. It's more like a lower sixteenth here on this slide. You can find me on Twitter at Tom McFarland. My blog is Tom McFarland. I'm at my family's Pressware.co and then I recently launched and I'm in the process of continuing to launch some plugins specifically for bloggers, not programmers, not tech types, but for bloggers at PresswarePlugins.com. But the purpose of this talk is that I believe there are better way to build solutions using word press and this can be generalized for themes, plugins, software. It can be generalized to if you're someone who is maintaining code or if you're a beginner or an intermediate or even an advanced user. However, I will say here at the head of the talk that this talk is geared towards beginners and intermediates because there's a lot of mistakes that you experience early in your career and if I can help shortcut some of those then I will feel like this presentation has done its job. And what we're going to cover are what I call three environments which we will talk about in just a minute. We'll talk about why they matter and how they help us. But when you look at one and two that seems to go hand in hand. There's three environments and why do they matter. But the question of how do they help us because if you're... I don't even want to say if you're self-employed but if you do word press as a side project, if it's a hobby, if you do anything for anyone else then you're responsible for building the solution, managing the project. You're responsible possibly for marketing. Any hats that you can throw out regarding to running a business you're responsible for and that's a lot. And I can't speak to all of them but I'm going to try to speak to a number of them especially project management. Now, ultimately what I want to be able to show at the end of the talk in addition to staging environments and related tools, things like that or development environments rather is how you can increase your productivity with a workflow, a certain type of workflow how you can increase your clients experience because I mean you go on the web and you see websites like clients from hell and you get on Twitter and you see people complaining about their clients but I think that's... Clients can be rough but it's a two-way relationship and if you dislike all of your clients or the majority of your clients maybe there's something about your process that's wrong with you and that's not saying you're a bad person that's just saying if every project you do you have a complaint about what's the common denominator so let's try to fix that and I also want to help you become a better developer because you come to WordPress or WordCamp you come to the developer track you want to walk away hopefully being armed with something better to help you than walking away being like I have no idea what I'm supposed to do with this information so before we get started I have some questions to ask you you can raise your hand or you can opt to keep them low or not raise them, it doesn't matter there's no wrong answer but it's going to help tailor how I proceed with certain points throughout the rest of the talk so first the questions are already on the screen I don't do the fancy animations but first I do want to know do you build sites? awesome awesome do you maintain code and by maintaining code I mean either yours or you've inherited code from someone else that you're now responsible for maintaining awesome how many of you in here use version control good for those of you that don't know big deal we're going to talk about it and how many of you in here in addition to version control use some type of deployment software that's hooked up to your version control okay cool we're going to talk about all of those and at a high level I'm going to mention some tools for those of you who aren't familiar with it so don't be intimidated and I'm not going to have a lot of code script or anything like that that's to research on your own and to see what's out there so I'm going to lay out what's out there and then you can go and explore so lastly for those of you who have heard me speak at previous word camps or at other meetups I'm pretty laid back about hey interrupt me ask questions as the presentation goes on but for this particular talk please hold all questions and comments until the end because I want to get through everything and then try to answer everything during the allotted time at the end and there will be a lot of time at the end so first we're going to talk about the three environments you have heard of these most likely in one of two ways development staging or production or maybe local testing and live and if you haven't that's okay because we are going to talk about all three of them right now now development this or development or local this happens on your local machine this is on your laptop this is on your desktop and it is supposed to mirror or it should mirror your staging and production environment now what does that mean so let's say that your client or your project is going to be running on a traditional lamp stack so Linux, Apache, MySQL and PHP if you have a Windows laptop or you have a Mac clearly don't worry about the Linux part but I highly highly recommend that you try to create as much parity between your machine and what's going on staging and what's set up in production because when you deploy code to staging then it's going to save you debugging headaches because if you have one environment on your machine and then staging has one environment maybe it's running engine X which is another great web server I'm using Apache as an example either one of those cool MySQL or an alternative database and then PHP and maybe you're going to be able to run on PHP 7 if so it's awesome PHP 7 gives massive performance improvements but if you're on PHP 6 5.6 no big deal and then the same is true for production we'll talk a little bit about that in more detail in just a minute but development slash local this is where development starts now when you begin a project some people have a tendency to say okay I have WordPress installed on my machine and I have my web server installed and I have a database and I have PHP installed and I am ready to go and then they get project number 2 and they get project number 3 and they get project number 4 but they've only got one installation of WordPress so every project they've ever worked on is living on one installation of WordPress but when you release a project for your client you're not releasing one installation of WordPress plus all three or four other projects you've worked on you're releasing one installation of WordPress and their project so every time you get a new project you should have one installation of WordPress for that project you should have whatever set of plugins you're going to be using for that project and for those of you who are familiar with setting up host names or you have I believe Windows calls it the host file then you want to I urge you to have a unique domain for each site so you're almost creating a sandbox for each project and this way when your client comes to you and client A comes to you and says hey how are things going can we do a deployment to staging so I can see how things are going you say if that matches our project management schedule but I'll talk about that more in a minute but you say yeah sure no problem and you can deploy that entire directory and you're good to go you don't have to worry about opening up an FTP client and figuring out oh gosh what is it I'm supposed to be deploying for this one person and you've got this massive stack of notes and it's a pain and we don't want that you want to give each project its own unique WordPress installation database and you want to manage everything in its own proverbial sandbox so what is staging staging one is for deployments this is also the staging environment is sometimes referred to as test it is accessible by you and it is accessible by your client if you wanted accessible by the public have at it but often times when you deploy you want to make sure that you have your WordPress installation checked so that search engines will not index it secondly this is a place where you can deploy code and it's for testing only that means you can go in and you can put whatever test data you want to if you want to copy and paste a bunch of lorem ipsum text or Samuel J or Samuel L Jackson ipsum text in there go for it if you want to put pictures of kittens or if you want to put pictures of something from Star Wars go for it whatever it is that helps you test and helps your client test a solution that you're building for them can go into staging this is where you are testing various milestones, various tasks again all stuff we're going to talk about in a little bit and then oh man I totally bought the database everything is gone it's for testing only the data is gone, so what you were putting Samuel L Jackson quotes in there do you really care that you lost it but what it should do is help you present what you've built for the client making sure that it's one to one with the requirements now don't modify code live on this server you need to have a process you modify code in development you don't modify code in test so if something is wrong or if something needs to be changed on the staging server don't edit it there because then you have to work backwards and pull staging down into development so you've created this weird cycle of now how you're interacting with your various environments so instead and by the way when people talk about cowboy coding that is what they mean by writing code live on the server just don't do it because if they're not happy if the client is testing something on the staging environment and it's already broken and then you go to cowboy code and you break something else in staging you can't do a deployment from development because you're going to deploy something that they already didn't like you didn't fix anything so you get this huge mess of code spread out across a variety of environments just development is for writing code staging is for deployments and testing production or live is for the live site this is for code deployments and users now maybe you are running a blog and you get 100 users a day but maybe you and a designer and one other developer or 100 visitors a day maybe you, a developer and a designer are all working on your blog and you can't do a lot of code to your code base it needs to be done on development it needs to be managed in source control which we'll talk about in just a minute and then it needs to go out and then when it deploys after it passes testing it's deployed to production this is where people are interacting with your site you should never make live changes in production if you want to mess around doing that in staging but don't do it on production people are interacting with your site if you change something and then they click a link and all of a sudden they get the white screen man your site went from hey I'm using this this is kind of cool that the site is gone don't do that the production environment also it should never include test content it's one thing to in staging to have fun with it and to put whatever kind of pictures up and whatever kind of language and test data up but you don't want your live production to be mingled or you don't want your production environment to be mingled with your own blog post or if you don't want your application to have sample data of various characters from your favorite episode or your favorite novel of the game of thrones you don't want Frodo Baggins showing up as some user on your production site so don't deploy test content and never deploy untested code if it has not passed staging then it should never go to production because how do you know that it works but this still raises the question of deploying code that is how do you send your code from your machine or from whatever remote machine you have to staging and to production now this is where we start getting into version control and deployment tools and there have been some fantastic talks by some other people this weekend one of them was by Evan yesterday I think Evan, raise your hand, when it's on WordPress TV I highly recommend checking it out especially if you're managing a fleet of servers or a rack of servers or whatever adjective you want to use but we've covered the environments and we've covered the purpose of them but we haven't actually talked about how do we get it from point A to point B this is where it depends on your experience beginners are going to be used to one way intermediate developers and more experienced developers will be used to another way don't be intimidated by what you may not know and what we're about to talk about instead make notes treat it as a learning experience because every single person, like no one started out just knowing how to use version control, no one just sat down on the computer and was like yeah I got this no one sat down and said I should have three environments that seems to make a lot of sense and I'm so good because I just figured that out no one does that, everyone has learned this and so if today you're just now learning it, awesome welcome to the club but first let's talk about deployments via FTP I almost did a slide about writing code in the editor that's built into WordPress but I feel like I can summarize it in one statement just don't don't do it if you have your development environment set up the first place that most people start is that they will begin deploying their code via FTP and that is a great first step because what you're learning is hey here's my development machine, here's a remote machine I see how WordPress is structured here and I know what files I need to move from place to place and if you're working on small projects it's especially a really good way to learn but I still think that it's okay to have your, or I still think you should have your staging and production but here's where it gets a little foggy you now have three environments and you're having to figure out some way to track what have I deployed via FTP from my local machine to my staging environment and then staging's passed off so I've now FTP things over to production but I'm not I can look at the dates I guess and see when they changed but I don't know what version is on staging I don't know what version is on production and I'm not really sure what version or I'm not sure what part of the project or which branch of source code I'm working on in development and so you can see how this can snowball out of control really fast and maybe you get mixed up, maybe you select the wrong shortcut in your FTP quiet and your Samuel L. Jackson with the Star Wars pictures is now on production and your bloggers or your visitors who are using your application have no clue what you're doing or what they're seeing or reading so if you want to grow in this area you need additional tools and that is where version control and deployment tools come into play first, version control if you haven't heard of it at all totally cool you've probably also heard it as you referred to as source code control they're synonyms but version control seems to be the one that most people are using nowadays and what version control is is if you are writing a WordPress theme or you're writing a WordPress plugin you've probably seen something in the codex about subversion those repositories on WordPress.org are powered by subversion that's one way to handle version control and what version control does is you say let's say you're working with subversion you say hey subversion I've got a project in this directory I'm going to be working in this directory watch all the files in here and then what happens it's kind of magical before you begin peeling back the layers is it will watch every single change to a file so when you're ready to deploy you see a nice list of the files that you touched and you can say these are the files I need to deploy and then once you have that group of files in subversion they call them tags you can create a tag this is version 0.1 or 0.1.0 and then you can deploy that and then as you continue to create these changes and files that you have you can then tag them with a version send them out to your staging environment or your production environment and be good to go because now you're not scrambling through your notebook and looking at file dates trying to figure out what did I deploy when and to where and who's viewing what and did they sign off on it you can automate this and so the other version control system that you've probably heard of is Git and many of you have probably heard of it mostly from GitHub now GitHub gets its name because it's an entire site slash web app built on the source control system of Git and Git works differently than subversion the nuances of how they work are beyond the scope of this talk but if you want to release when GitHub came out their big thing was we're social coding because everything's got to be social now there's a person on a website and that website sucks why does everything have to why do you have to follow everybody but anyway I digress GitHub is actually a really amazing website and you can follow some incredible projects some of the stuff that you see that's out there that you like maybe it's apps or maybe it's plugins maybe it's various apps for your computer if they're on GitHub you can follow them you can watch what people are doing that is really cool it's another way of saying hey instead of talking to subversion you say hey Git don't tell subversion but I'm choosing you to watch my files because I like you better and then you say it continues to watch your files and then you say ok I'm ready to commit these files so that I can push them out to staging or production there's one extra step that Git does that subversion does and that is you can do a commit before you do a push so this means you can have what's called a change set so let's say you change 5 files you say ok I have implemented this feature and it has touched these 5 files I'm going to commit these but they're not actually they haven't actually gone out to a remote machine yet so you continue to work on some features you create a few more commits or a few more change sets and then you push and when you push you're pushing it out to the remote machine and then everyone who's following your project can see what was just pushed they can see what files what files went in what code was changed and then they can see do I want to download this version or not and just like subversion you can tag the releases so when you say ok I am ready to tag this as version 1.0.0 then you can do that and you can tell people through your readme file through the project homepage whatever you can say follow this is where the development will always be in this branch and don't let the vernacular confuse you github has a glossary literally google github glossary it'll define all these terms for you and you can say if you really want a stable version look under my tags and these are the ones that you should be using but if you want to live on the edge here's where you can check stuff out it breaks your site it's your fault it's not mine because this is what you downloaded and I warned you ok so there's one more major advantage that version control offers and it doesn't matter which system you choose that's if you let's say that you test something in staging and your client test something in staging and they sign off and they say this looks great it works exactly as expected so you roll it out of production and then you get a user who's really curious or they don't know what they're doing and they stumble across a bug they click a sequence of things or they navigate somewhere they shouldn't maybe you're getting error logs maybe something breaks I don't know how your monitoring is set up but you get an email or 40 emails or 120 emails this isn't working I can't do whatever it is you promise me I can do and I want my money back you reply and say I haven't charged you anything yet and then you say ok thank you for bringing this to my attention we'll have this fixed ASAP and ASAP when you have version control and deployment tools set up ASAP can be freaking fast because you have a history of everything you've ever done so you can initiate a rollback to the last version that you know was working so you tell your deployment tool hey rollback to this version it'll say ok give it a few seconds or a few minutes depending on how large your project is site stays up code rolls back you send off 120 emails and say thank you for bringing it to my attention this has been fixed love you guys thanks and they go back to their site and they're happy you don't know you don't owe anyone any money that they've never had in the first place and then you can go back and enter in some bug reports and begin managing your projects a little bit better now this still raises a question about databases because you know that WordPress is a database backed web app everything is stored we're almost everything is stored in the database and that's what drives when you're putting information in and you're pulling information out it's all stored in the database so how do you handle databases and this is a question if you were to google or go to stack overflow or any of these other sites you could ask the question do I or how do I version control my database some people will say that you should some people will say that you shouldn't I'm not going to take a stance on that today it depends on your project and it depends on how technically savvy you are with your development chops at this point so but what instead I'm going to recommend two solutions for being able to deploy your database from development to staging into production the first one if you have a development workflow or I'm sorry development environment set up on your local machine odds are you have a copy of what's called PHP my admin it's a mouthful it is a web application and it allows you to see all of the databases on your system and remember you should if you have multiple WordPress projects you should have multiple databases and it allows you to export the entire database literally it will come out in one dot SQL file and you hop over to your staging environment or your production environment and you have PHP my admin installed and you can click on import and you can import the file you just exported but there are some caveats to this the least of which is not the user interface of PHP my admin um that might I digress the you have set up on your local machine uh dev myproject.com and you import that database into staging or into production all of your links all of your homepage all of your articles all of the custom post types whatever it is you have set up they're all going to be based around dev.mysite.com so you get a staging none of these links work I can't even get the site to load why isn't it loading it you know test.staging.net and that's because all the um all of the URLs are wrong now there are tools in which you can go through and uh look for these there are plugins rather I should say that you can install and say hey go through look for these strings change them to this it's cumbersome and the way those plugins work do leave room for margin of error it may look like everything's working smoothly but I I want to guarantee but 99% sure that there's going to be a buried link or a buried something in there that you won't be able to access and your users are going to find it so if you're really savvy with databases and you've got a handle on on on sql and you know what you're doing have at it now this next thing I'm going to wpmigratedbpro a disclaimer I'm not being paid to promote this plugin it is a premium plugin uh I love it it is worth every cent you can probably recoup the cost in one project and if you can't then in your proposal or in your estimate or however you communicate with your projects just bump the price up by the price of that plugin and you're taking care of here's here's how it works it's a WordPress plugin that you install you say hey I'll and then you install it on you saw on development and then you install it on staging and you can install production and depending on how you want to where you want to move your data from where you want to move your data to you can tell the plugin I want to move it'll give you a URL with a unique string and you just paste it and you say okay I'm going to pull the database from staging and I'm going to move it into production and uh then it'll say this is where the awesome part is it'll say replace all of the URLs that are dev.mysite.com it will replace them with whatever URL you have you know like test.mysite.net um I should be more creative with these URLs but uh I apologize um and the other thing is that it will also create backups of your database in case something goes wrong and you can be moving copies of your database upstream and downstream it takes the pain out of it it works within the WordPress admin it gives you a progress bar and tells you what tables it's working on it creates a backup it works within the WordPress dashboard it looks like it's part of WordPress there's no uh nasty user interface things like it's clear the documentation is great the support team is great if you're not a SQL expert or you just don't like the way PHP my admin looks I don't blame you but I highly recommend this plugin so um and you can find this the company behind it is uh this will be good for those of you who like the walking dead or any of those old zombie flicks from the 80s deliciousbrains.com that's the company behind it I don't know whose brains they ate I don't know why they would be delicious but anyway moving on we have improving project management and the whole point of this is as you can see streamlining your workflow and keeping clients happy because who likes clients that are just it's like Monday every day of the week oh I got an email from this person I don't want oh god I wish this person would go away why did I estimate this project it doesn't have to be that way I promise um now some people are going to be harder to work with and other people because we all have different personalities but that doesn't mean we can't try to maximize the amount of uh happiness that we can experience in our projects now the thing about especially if you're doing this as a hobby or self employed you're not just developer you're also the project manager and I mean this in a good way some people are like you know thank god I have a project manager or I don't want to take on the role of project manager well sometimes if you're self employed if you're running your own shop you need to be a project manager because your clients need to know what's going on and so imagine for a minute if you had the opportunity to be given some advice on or given a book or a handout or whatever on ways to make your clients happier so that your Tuesday or your Wednesday or your Friday doesn't feel like a Monday because of a nasty email or the disappointing email or whatever imagine what that would feel like so I'm going to share some things that I have learned over the past half a decade six years or so and these things are not prescriptive because again everyone has this different personality I'm going to share at a high level as to how I approach this kind of stuff and adapt it as you need ignore it if you want to or borrow it completely first this may change how you are currently managing your workflow for project management this may spur you to create a workflow for project management and this may have you raise your hand and tell me your project management workflow is something I would never do and I don't even think you should be doing it so I'm open to everything after the talk but anyway so here's my approach after the client and I have talked and we've done the discovery phase which is fancy for what do you need built and then you've done requirements which is this is what you say you need here's what I promise to deliver at this price I've then set up my development environment which means a single installation of WordPress a unique host name and then if I need plugins or if I need a theme which depending on the nature of your work you may or may not need it doesn't matter then I take the requirements document and I spend some time with it because I mean I need to know what I'm building but most of the time the requirements document is still at a really high level and you've got to drill down and to say okay this requirement this first three bullet points these things actually would require the first one would require three tasks so write out what those three tasks are and then the second bullet point repeat the process and the third point repeat the process and then use some type of software or some type of document or even if it's just email let the client know here is how I'm going to be building your project and I will give you updates when each milestone is finished and a milestone is defined as a collection of tasks you don't want to necessarily bug someone when you've made a small CSS changed or introduced a single JavaScript file that's a little overkill but when you've checked all five tasks and it solves one of the main bullet points and the requirements that's where you would want to tag something in your version control launch it to staging and say okay go check this out here's what's done best case scenario client for like yeah you nailed it that is awesome worst case it or maybe middle of the road case it looks great but what I meant was and worst case is this isn't what I asked for what I said was and you show them the requirements document well that's what you said so let's talk a little bit about it this is what you said but there was clearly a misunderstanding on my part because now you have a relationship with the client you want to have a good relationship with the client it's okay to own the miscommunication if they said something it's not their fault that they did not get the jargon right so they're not the technical person on the project you are so own the miscommunication say I'm sorry that I misunderstood you and then move forward from there they'll verify then you double or triple or quadruple check yeah that's exactly what it is I want okay give me X number of days you know how well or how fast you work and can build something so you go and then you reiterate on this particular milestone you launch it you show it to them and they say that's what I wanted good job so then you move on to the next milestone and then you move on to the next milestone and you move on to the next milestone this process repeats throughout however many milestones you've defined if you have 29 milestone project it's probably too large of a project for a small team if you're in the enterprise that's something different but if you've got 29 milestones what you need to do is break that up and say hey this is what I think you know these first 5, 6, 7 milestones this is version 1 everything after this it's not that it's not important but we've got to lay the foundation on which to scale up on which to build on top of so let's focus on these first you can then invoice for this first version so you get paid a little bit early which is always nice but when you outline the process to your client what you're doing is you're helping to facilitate small feedback loops feedback loops another phrase that's kind of a buzz word in the industry and all it means is how how frequently are you talking to your client so a small feedback loop is it's Monday morning and you're starting work on the project or maybe it's Tuesday I'm just being arbitrary here and then in 3 days you've got the first milestone completed so you're like hey client this is done it's in stage you can check it out here let me know what you think and they get back to you and then they either like it or they don't and there's some small tweaks so you go off and you make them and you come back and say hey client I've made the tweaks what do you think and they like it then you get to move forward to the next milestone and you repeat that process over and over until the end of the project and if it sounds rote and it sounds boring that's what the alternative is the client comes to you and says this is what I want and you say great sounds good so you start work on Monday first Monday in April and you step all the way over here hey client you emailed me I started back in April it's the end of June I've got something to show you and they look at it and they don't know where to begin with telling you with giving you your feedback well I really like the design that was done here for the header the background isn't all what I envisioned the functionality when you click on this widget is nothing that we spoke of I don't know why you have a calendar here where are my controls in the admin I thought I was supposed to have some custom capabilities for this user role and why are you using that fun I specifically said not to use that fun that is a long feedback loop whatever and then now you've taken a project that's gone from April to June which could have been done a lot faster had you been having smaller feedback loops and increased your yet another buzzword your velocity how fast you are getting things done so small feedback loops whatever you take away from project management I don't care what tools you use a lot of people like base camp I use one called freed camp there are I don't care if you use a google spreadsheet I don't care if you use a email just have a process for your clients because it really really really makes a difference and they want to know what's going on because how many when you go to a place and someone's working on something for you isn't it kind of like this black box thing like what are they doing exactly I mean if it's something you don't care about that's one thing but if it's something specifically tailored for you you kind of want to know what they're doing and you appreciate that because you can see and you can talk about each thing they did and that is the analogy for this so you've gotten to the middle of May because you use short feedback loops or you're still working until June and you're not done yet but anyway you're done at some point in the middle of the summer maybe you're even bleeding over into the fall I'm sorry if that happens to you but you did it to yourself and you then deploy to production you have finished version 1 or version 2 or whatever your client's happy you have more milestones in the pipeline they trust you because of the way that you have handled the project with your staging environments they trust you because of the way that you have communicated with them they trust you because you have owned the fact that when there was a misunderstanding it was something on your part and they love what they see out there right now so that's what we started on the next part so thank you for listening I know that was a lot of information at first I am completely open to comments, questions feedback, clarity anything you guys and girls want to ask I am completely open to so I think we have 20 minutes by my clock so let's talk yes it's called freed camp it's free base camp is great if you are starting out and you are really budgeting every dollar base camp is expensive and freed camp is an alternative that you can tell who they are competing against just on the name alone but I personally like the way that they organize projects and tasks and calendars and things like that the add-ons to purchase like if you want google drive storage it's like $2 like it's way cheaper than what some of the alternatives are and you can use it for even personal they are working on a mobile app but their site is built incredibly well so that you can just bookmark it to your home screen and it works great they have user roles so what you can do is you can add people but give them restricted permissions and if you want to do the client side which is a really cool feature of base camp I admit like with freed camp what you are able to do if you really wanted to create strong lines of distinction is have your team's private side of the project and then create a separate public project that you can buy them to so there are some ways to work I just wanted to mention and I've known Julian for a couple of years if you have a chance to listen to his talk go Russell I would add kind of a caveat to here based on how technical your client is when you have a project management tool some of them will let you do depending on which ones you use they will automatically notify or they can notify your customers or your users when something has gone out and is ready to be checked it is an automated message so it sounds kind of like robo message then there is other deployment tools you can set web hooks and say hey ping this Slack channel or ping this mail service and let them know this deployment has gone out and then on the far end of the spectrum the manual end is you email them and if they are more on the technical side they probably won't mind receiving the automated messages but if they are someone who they know what you can do with the web but they are very non-technical sometimes a personal email is the best and yeah we want to automate all the things because that is why we write code but sometimes having that personal interaction is a long way with certain types of people so read the documentation for whatever tool you use I used to and I have two machines I don't like having two machines I have tried to simplify over the years to help me focus more but when it comes to testing absolutely when it comes to development yes and no I try to do all my development on one but if I am taking a trip and I am going to take a lighter machine yes I will but what I do is I make sure that the machines are set up almost identically and then I will do a checkout of the code from version control and I will just work on that machine and push it back up and when I get back home I will pull it down and there is all my code yeah yes yeah yeah yeah yeah I would love to have a you want to speak to it I will add my answer in a minute ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok And that, I'll offer an alternative to that, but it really does depend on the client. But I will say that for a number of projects, I will use a cheap web host that just offers Apache MySQL and PHP or whatever configuration I need, and I will use that for staging. And I will use a subset of information in the database for caching. I mean, I don't know if you need to have caching in tests. I mean, you can talk to the client about that. That, to me, is one of those, like, this is, like, once it comes out of the show, like, once it's on the showroom, it'll have that. But in testing, you're more worried about features, and you're more worried about, and if, for whatever reason you're building, speed is a feature, then, yeah, absolutely, you want to have that close parity. And I know people generally say speed is a feature, and it is, but when you're testing something you're more worried about, is this feature working, as I expect? Can the user or my users accomplish whatever it is I want them to accomplish on a site? And then, and the reason I mentioned, like, cheap web hosting is because it's cheap, and they're a diamond, almost literally a diamond dozen that are out there that you can choose from. Now, for production, that's where I think having go with cost go all out. If you're really technically savvy, digital ocean is something that I think you should check out, because they, I mean, I can't say enough good things about them, but it does require a bit of knowledge on handling what are known as droplets, and data centers, and operating systems, and things like that. So, I know that's a long-winded answer, but hopefully you kind of got two sides of what to expect. I have used ServerPilot, and for those of you who are interested or have heard of DigitalOcean and aren't sure what to, if you want to get used to it or not, ServerPilot is a really great piece of software that will ease you into DigitalOcean. So, what you do is you go to DigitalOcean, you create a droplet, and a droplet is basically a virtual machine in which your site is running. You get FTP access, you get shell access, you get all of that stuff, you can install, I mean, you have to, if you want to install SSL certificates, you'll have to do it on your own. But if you want to avoid some of Server Administration, ServerPilot.io, if you just tell it some information about your droplet, it'll go in, it will set up everything for you, and then you're ready to roll. So, it's a good intermediary step. But if you want to use, as you get more comfortable and get more interested in advanced tooling, I don't want to say it becomes irrelevant, but it becomes less important. So, I have used it, and I have not used it, it depends on the project. Wait a minute, oh yeah, Trellis from Roots. Let me do, do you have a question? Yeah, yeah. Can you talk a little bit about workflow when you might have like a phase two or a future request after the site goes live? Yes. They're making database changes and you're okay. Yes, so this is something that you kind of learn the hard way or at least I learn the hard way. That's where we're at right now. So, you want to, during the initial conversations for version one, you want to start that, you at least want to queue up that conversation. And say, for like, this will either need to be version two, or this milestone will be for version one. And what you're requesting, totally, but it has to come in version two. And you explain to them why, and they're pretty receptive to it. At least in my experience, they understand. It's a little hard for them to be like, but I don't have the money for that. I don't have the time for that, you know? I feel like I'm not fully answering your question. Can you be a little more specific? Sure. In terms of, yes. The numbers are changing. Mm-hm. Mm-hm. Are you making code changes? And pushing it back up? Yeah, there's a number of different ways. When it comes to working on a version two, or even just a 1.5, then pulling down the production database and working off of it is one strategy. That's what I generally do. If it's a really large project, and I'm talking about one that's got a massive amount of rows, then the next best thing, and this is just my opinion, is to take a portion like segment to database and take maybe the most recent segment because anything that you're going to be adding after that, the IDs will increment from there and things like that. But at the very least, you can do a freeze of production. And then you do your testing, and you do your development, you do your testing, you bounce back and forth. And then when you're done, you say, you push your code. If the database schema has changed, then you would deploy the database. But what you would, or what you would do is take the database and run a script to go ahead and add the new tables. But since they're going to production and it's a new version, they should be empty. And if they're not, then you may need to either script something to bring in the records or use an importer of some type. Depending on what plug-in or how you're doing it. Sometime, for me, one thing I did have to do is there was one project where they were keeping everything in a spreadsheet and it kept changing. And so I had to write a script that would every night read the spreadsheet and then do some work and then import that into the database. So it's not always as easy as when you start from scratch.