There are many ways to code a website, so I'm not going to attempt to tell you all the different ways to get it done. Instead I'm going to tell you how I code websites. I don't have a claim to perfection and there will be many other people who utilize different techniques and workflows. I'm open to making this a conversation and possibly learning different ideas or ways to improve my process. This will be a multi-part article because otherwise it would be massive and difficult to manage. I am going to discuss tools, coding and workflow. I will attempt to make this a fairly comprehensive guide so I expect it will take me months to complete, but I'm not in a huge hurry. For me this will be a living document because I will adjust it as I adjust my coding, techniques and workflows. I will break it down into sections and this will splinter into separate more detailed blog articles. I do hope you enjoy this article and please give any feedback that is constructive and helpful.
I have decided to break this article down into the following sections:
Direction: you need to have an idea of where you want to go before you can start building a website. The direction phase is one of the most important parts of the entire process. Building a website is similar to building a home, and the most important part of your home is a foundation. Without a solid foundation your house is destined to fall down no matter how aesthetically pleasing it appears.
My Direction Process
I feel like one of the most critical parts of a design is having an actual conversation with the person who is the decision maker on the project. For most of my clients this is the owner of the business. In this conversation I want to ask good questions and listen intently to what is being said. I need to understand my clients business and I need to understand who are their customers. If 90% of a clients customers are women then I would lean towards a more feminine type of build including typography and color choices. If a clients customers are over 50 years old then you will want to consider different choices for that age demographic vs teenagers. Taking the time to ask questions, listen intently and have a genuine conversation with the decision maker is a huge step in helping to unravel the build process. Take good notes during this meeting so you can refer back to them at a later time. I also utilize Evernote to organize my notes and thoughts for each of my clients.
You will find that clients are very different in regards to the level of involvement they have in the project. Some clients are very hands off and some clients are very hands on with what they are looking for in a design. During the conversation try and get a feel for the type of person you are dealing with. I usually prefer dealing with more hands off clients because they are easier to please and I'm given more creative license while designing.
The next step I take is to identify 4-6 websites that are generally in the same industry as my client. I find something that I like about each of the example sites and then I send the list to my client to review. I don't share the things that I like or dislike about the site. Instead I request that the client gives me what they like and what they don't like about each site. This step is huge in determining what a more hands on client is looking for in regards to taste and design. I also ask if there are any websites that client loves or has any suggestions that they would like to see incorporated. Look for patterns in the notes you receive from the client. These patterns will help to make decisions about the types of elements a client will like on the website.
The last step I take in the direction phas is to sketch out the original design thoughts on a piece of paper. Some people create very detailed wire frames and drawings, but I utilize a rough sketch approach citing things that I definitely want to have in the design and other optional elements. Then I begin to search for colors and font pairings that match the tone of the site. With my rough sketch, colors, and font pairings I'm armed to start mocking up a website.
Unlike some designers I don't feel it is my obligation to change the decision makers mind in regards to a website design. My goal is to create a design that is search engine optimized, user friendly, conversion friendly, and liked by the decision maker. I don't feel like those four goals are mutually exclusive and my goal is to accomplish all of them on each of my projects. If a decision makers choice is something that I feel would not help the site be user or conversion friendly I will lay out my case. However, in the end I will do whatever my client wants as long as they are informed about the consequences of my objection.
Tools: You won't need a whole bunch of tools but you will need some software tools for writing code and manipulating images to work on the website.
My Tool Box
In order to create anything in this world you need a set of tools to work with and that is no different for creating websites. Without the list below I would be in a world of hurt.
- From a hardware perspective it is helpful if you have a decently fast computer and internet connection. Nothing gets more frustrating than waiting for work to get done because your systems are slow.
- You need a way to write source code. You could use notepad if you like or you could utilize a full blown IDE. There are a wide variety of different options to choose from so if you want to learn more check out this list.
- I utilize Brackets.io, which I have found to be a great code editor for my needs. This might change in the future as I might start to play around with Visual Studio Code or PHPStorm. In the end there is no wrong answer as long as you find something that can help you work efficiently. From a coding speed and debugging perspective I think you should consider a package that includes autocompletion, syntax highlighting and code folding functionalities. I also like a package that includes plugins or other options that will make your life easier. One of my favorite plugins for Brackets allows me to transfer changes made to files automagically to a live server instead of having to open up the FTP software to transfer it every time a change is made.
- Photoshop or another image manipulation software is important so you can adjust or fix images as you add them to the website
- Vectormagic is a piece of software that converts jpg, gif and png files and converts them to SVG. SVG are scalable vector graphics and they usually look great no matter what size screen and the file size is generally smaller so they load faster than other pixel based image formats.
- FTP software will allow you to upload files from your local environment to a server. Filezilla is one free option but there are several options on the market.
Content Management System
I look at a content management system (CMS) as a subset of tools, but it is important enough to have it's own category. A content management system is a backend software system that allows a user to log into the system and make changes to the website. That can include adding blog posts, changing images or changing verbiage. Keep in mind a CMS is not necessary if you are writing your own code for your website and you understand HTML and CSS. However, I'm a web developer and most of my clients want to manage their own websites by changing verbiage and images on their own.
- The most well known CMS on the market is Wordpress, it is utilized by around 30% of all websites around the world. I won't discuss it here because I generally think Wordpress sucks.
- I utilize a licensed CMS that is made for developers named Perch. What I like about Perch is it is easy for a developer to add the CMS system into my workflow, it is supported and it is affordable.
- There are literally 100's of different content management options to choose from including the big open source free options like Joomla, Wordpress, Drupal. I would highly suggest doing some homework on what will work with the way you develop. If you plan on coding websites in a way that you can write the code your way and fit the CMS into your style then you should probably look at an option like Craft CMS or Perch as they are made for developers.
Local Development Environment
This is more software and is a developing tool as well. A local development environment allows you to setup a server environment on your own local computer, instead of using the server environment provided by your hosting company. This creates a sandbox for you to create, change and just play around with your code, to see how it would look on a live browser. It makes the process of coding much faster because your machine becomes the server so you don't have to constantly upload files and check changes on a live hosting server. Another advantage of developing sites locally is that you can work on your site without being connected to the internet.
There are a few different options like Mamp, Xampp and Wamp. I use Wamp, but all of these option will allow you to write and test your code locally.
I have recently read about a new option called Laragon. This is a new addition to the old standby local development environments above. If you are new to developing I would probably suggest looking in this direction first. The problem with Mamp, Xampp and Wamp is they can be more challenging and time consuming to get to work properly. Laragon appears to be set up to work with Node.js and other task runners right out of the box so this is appealing to me as well. The reason I haven't changed yet is time, but this is going to be one of my winter projects.
Layouts & Frameworks
- HTML5 Boilerplate: It is technically classified as a framework but it is really a professional blank layout template. I utilize it as the starting point for all my websites and I find it to be a great starting point for my projects.
- CSS Grid: Isn't a framework, but instead a Cascading Style Sheets specification for laying out web pages. I use CSS grid for all of my projects but since it is a newer specification it isn't fully supported by some older browsers so I have a flexbox fallback to ensure that the websites that I build will be viewable by over 95% of all browsers. CSS grid is in my opinion the future of website design because you are not forced to conform to any layouts instead you can roll your own for every project. I utilize it because in the near future it will be viewable by close to 100% of the browsers in use and I get full control of the layout.
HTML stands for Hypertext Markup Language and is the standard markup language for all Web pages. In 1980 Tm Berners Lee started a project that would allow researchersn to share their findings. This project became the basis for HTML and in 1991 he wrote documentation called HTML Tags which essentially became the HTML 1 specification. Mr Berners-Lee founded and created the World Wide Web Consortium (W3C). This group creates standards for the world wide web. Throughout the years the W3C has advanced the HTML tagging system and we are now on the HTML 5 specification.
To better learn HTML I always suggest that students learn from the W3C because they are ground zero for documentation of the world wide web. I also admit that I like to utilize Lynda.com because they have online classes as well to help you learn different coding skills. Lynda.com is a paid teaching service and W3C can be learned for or free or you can utilize a paid service on W3C for certification of your skills.
Any website that is built can be tested to make sure it conforms with the HTML5 specification and highly suggest that people do this when they complete their projects. There are times that my sites do not conform to the specification but I make those decisions knowingly and for a specific reason. We will discuss this testing at the end of this ridiculously long blog post.
Server side scripting
Machine Language & Schema
JSON coming soon
Final Steps: Our website is fully coded and functioning. Now we can add the final touches to the project and get the website live.
- Going Live
- SSL & CDN
- Final Miscellany
Smile, be proud of yourself, grab a beer and show off your work to the world!