I remember back in the day when it took a full minute to load a Geocities page in Netscape. It was 60 seconds if I was lucky. For a webmaster to upload a web page in those days was an act of willpower. It took an hour to download an FTP client (if my 14.4K modem was working reliably that day), another few minutes to configure the client, and another 10 minutes to upload the images and HTML associated with the page. And that was just one page! There were times I wanted to throw the entire computer out the window of a very tall building. Those were rough times for web creators.
The Internet was the Wild West, and we were its cowboys and cowgirls.
Since it was a challenge just to get something on the Internet, we were truly tempted by tools that allowed us to update our websites on the fly. They made us feel like we could do things faster, more efficiently, and with less work. We could change things. What could go wrong?
At some point, though, the Internet grew up. Geocities disappeared and content management systems started to appear. Sophisticated, high-tech development infrastructures with speedy connections to accommodate lightning-fast editing began to gradually replace what was once the Wild West of the Internet.
The problem is, many of us decided to keep our spurs; we continued to use the Internet the way we once did. The sophistication we’ve built into our development processes also makes it easier for us to mess something up for clients along the way. A simple change within a system can cascade into a big problem further down the line.
So what is cowboy coding?
I define cowboy coding as “the act of removing, updating, or adding live code to a published website that impacts the system-wide functionality or display of the website." In other words, editing a post on a WordPress site is not what I’d consider cowboy coding. Updating a piece of CSS or JavaScript on a live WordPress website is what I’d consider cowboy coding. In fact, by this definition, adding or removing a plugin, module, or component from a website also qualifies.
Times have changed. If you're still cowboy coding, you may want to rethink your approach. It's time to get civilized.
Turn in your spurs
Convinced that you shouldn’t cowboy code? Good. There are multiple tools and resources available to help you learn how to deploy changes to a website without breaking it, and continue to have a high level of efficiency. Here are three tips to get you on your way:
- Understand the development life cycle.
- Be agile.
- Create a staging site.
If you're not thinking about change in the context of a system’s development life cycle, now's the time to level up. The concept of a life cycle is a framework that has been used for creating software and websites for a while. You can learn more about the "historic" systems development life cycle here.
image: Wikimedia commons
The SDLC’s big sister’s name is agile development. Once you’ve grokked the idea of the software development life cycle, take a quick look at agile development. While you’re probably already working in a very agile way, following a methodology helps to ingrain a consistent process as you start to walk away from the cowboy coder mentality. You can learn more about agile here.
image: Wikimedia commons
Combining agile development with web development tools, your environment should ideally look something like this:
Notice that the staging site is an important part of the process within which iterative updates are made, tested, and deployed to the client’s live (or production) website.
Play in the sandbox
One of the quickest ways to start implementing a safer development process is to add a pre-production test environment, or staging site. A staging site gives you a safe place to work before trying things in production. This lets you test things in a technical environment that mirrors the production environment, but without the risk of unexpected errors on a live site.
If you’re using WordPress, GoDaddy just released a staging feature for all Business and Pro Managed WordPress plans. If you’re not using GoDaddy Managed Hosting, WordPress, Joomla! and Drupal also have some information on their sites related to creating development environments.
In most cases, adding a staging site to your overall process is pretty straightforward. More importantly, it will help you to catch a lot of the gotchas before they ever see production. That's good for you, and good for your clients.
There are tons of other resources out there for different development setups, so if you’ve got a question about your specific setup, feel free to leave a question in the comments or hit me up on Twitter at @ifyouwillit.