Computer experimenter since Windows 95

What goes into a website?

When planning your next website tweak or enhancement, it's always good to know what really goes into implementing that change. Is what you're asking for reasonable at the rates you're offering, or are you willing to settle on functionality by holding to a constrained budget with lofty goals? Sometimes, neither of those things are the real issue at hand, and let me tell you why.

Choice of framework


Getting an O.K. site up and running is not technically very challenging in the modern age, if a person can read documentation, and has free reign to experiment in a test environment, so that they can try the technology out before implementation without fear of completely destroying everything. This is the whole motive of prototyping - to fill in the gray areas before moving forward on an implementation.

There are plenty of guides to get to this initial state of possibly installing a CMS like Drupal or WordPress for starters, either on a hosted server or a company-owned physical device. These out-of-the-box content-focused frameworks do well to 'get something out there' but oftentimes end up crippling development down the road, as they have their own paradigms and ways of doing things that not all programmers want to deal with or work with. Moreover, if you do end up tweaking some theme or layout from the base usage of that theme, be prepared for writing scripts to reload your customizations over the top! These frameworks and associated extensions love to update their code, causing customizations to be overwritten. They are relatively easy to set up, low-cost, and can be excellent for businesses looking to just have their information out there for people, like in the case of Campro Manufacturing, a project I completed on super low budget and time constraints. CMS solutions also allow for the business owners to tweak information without 'IT involvement' which can be a blessing in disguise!

The next kind of implementation can take the website to a whole different level - a custom-built implementation using a popular UI and backend framework that has a large community, good tooling, and low turn around times. In today's world, this is likely a language that has conveniences like:

  1. a package manager for external library management
  2. particularly easy to read, and make sense of, documentation
  3. a group of people overseeing the overall health of the language

    A few languages come to mind for me, including Java, JavaScript, Ruby, and Python. Tribes are also actively forming around Go and Rust, which may rise to fame given the right success story and the right tooling. UI frameworks that come to mind include Angular, React, and Meteor.

To host or not to host


Hosting can be a tricky thing to reason about as a web developer, especially a web developer who must translate these differences to a client who may not know their DNS from their email, their Google Drive from their locally-hosted file server. The main reason for it being tricky is that there is much hand waving in the realm of 'web hosting', and in fact, telecom companies like TimeWarner/Spectrum, Cox Communications, and even Centurylink offer 'web hosting' to business clients, which may or may not be what the developer has in mind as web hosting goes.

For example, I as a developer wanted to recreate this website sometime back, changing the focus and the technology. The site was first implemented with WordPress because that's what I knew at the time, but I had learned a bunch more and wanted to try out some other technologies on the server. Little did I know I'd need to request elevated server access, carefully monitor server resources in a shared hosting environment, and accept additional risk of not being in control of the physical 'stuff' that ran the site. Outside of the CMS world, this can be crippling.

In stark contrast to a shared hosting environment, there were new PaaS technologies available like Heroku and OpenShift Online which both seemed pretty neat and quick to set up. Unfortunately, I started to run the numbers on what it would cost if computations started to rise and the costs got pretty outrageous for a simple website and maybe a few data utility apps I have been toying with on the side. They are fairly straightforward to set up and I definitely recommend you give it a go if you haven't already tried either platform (not a sponsor)!

The last route is arguably the most arduous, painful, time-consuming path that many developers don't want to take - VPS or a self-hosting machine where the developer is the admin. Personally I really enjoy this model - I set up the hardware with the chipset I want, the memory I want, the expansions I want, the storage medium that meets my criteria - I like designing it all specific to my needs. In the end I am the only one responsible if something doesn't work, which has defintiely happened!

Fortunately for the involved developer, there are self-hosting options which aren't terribly noisy or power hogs, like the HP ProLiant Gen8 Microserver I run at home. The microserver is quiet, has many of the utilities it's big brother, the ProLiant rack-mounted series, has to offer, and over the course of usage, will pay for itself. For a developer who is working remotely on servers for clients, a Virtual Private Server instance may be more suitable, as it still gives the developer some control, while the team behind managing the servers is likely doing it full-time as their job. Oftentimes this will be the best solution if implementing a solution for someone else who is not tech savvy but wants something beyond CMS.

Time, and the true cost of development


While all the above are grand considerations when creating a site, nothing is more crucial than a developer's time, which determines the overall outcome of the project.

Again, I will lean on the Campro Manufacturing example I linked earlier, and explore the economics of the choices made. First and foremost, Rob, the owner of Campro was not looking for anything particularly fancy, but mainly wanted to 'modernize' his site from the 90's era 'site builder' template he had. I was already familiar with CMS from a previous position and knew how to navigate the integration of the parts, and for all of his requirements, a CMS solution fit the bill. Another consideration is that he was looking to get it set up for fairly cheap - around $500, which I was fine with for fulfilling his requirements. In the end, his site went from 90's era site builder, ugly as sin, to a CMS solution he could easily update and manage on his own, in under a month, with my assurance that I'd help him update a few pages when the time came.

Compare Campro's example to my own site, which I am choosing to self-host, using a roughly $800 server, with monthly electricity costs, that provides me with a broad range of capabilities well beyond the confines of web applications. I initially went down this road when I found out SSH access to my web hosting was fairly limited, and that I had to sign some documents about why I needed SSH and what I was doing with it - a big hassle for a service I was paying out of pocket for. My biggest concern was also that my toy project, a web crawler for mechanical keyboard forums and group buys, would not be able to run on the hosted server (inspired by a fantastic chapter on web crawlers in HTTP: The Definitive Guide, commonly referred to in the office as the 'HTTP squirrel'). Ultimately self-hosting meant I wasn't held back by any paperwork or elements out of my immediate control.

In the end, my time was far more valuable than anything else, as is with most developers! Hardware and hosting is getting dirt cheap nowadays, while the labor demand for creating complex functional systems is only on the rise. Time will always be a scarce resource throughout the ages, and thus slowing down development in any way with unnecessary constraints can seriously hinder a development process.

For more information on what I decided to go with for the interim site infrastructure, check out the portfolio post I created just for explaining that!

Conclusion


Remember to weigh the human costs in a development process, and really consider how savings in one place may effect costs in another. Realize that most developers are often stretched thin for time to work on side projects, between work projects, open source initiatives, their own personal side project, family life, and other important life duties like sleeping.

If you're a small business owner who is looking for certain customized website nuances but unwilling to pay the premium, consider that maybe you're approaching the problem from the wrong direction, or enforcing some framework the developer will have to spend 2x, 4x, to 10x as long developing, versus something like the site you see before you, which I put together in about 10 solid hours of development.

'Blame the process, not the people.' - W. Edwards Deming, Deming Seminar, Alexandria, Virginia, 19-22 January 1992