With so many existing solutions for creating websites, why would you create one by hand? This post looks at the reasons why I chose to create the site by hand, versus using an established platform, such as Sculpin or Wordpress
With so many existing solutions for creating websites, why would you create one by hand? That was just the question I asked myself before starting the journey of creating the website for my first podcast – Free the Geek.
I could have gone with any one of a number of platforms, such as Sculpin or WordPress. But instead I chose to create it myself, using a combination of SlimPHP, Twig, an assortment of Zend Framework 2 components, and other PHP packages available via Packagist. Was this a wise move? I believe it was, and also that it will prove itself over the course of time.
Today I’m going to talk through several of the reasons why I chose to take this approach, focusing around the following:
When you’re working for an employer, or working a contract for a company as a freelancer or contractor, whilst you can talk about what you worked on in general terms, you’re not often able to get down to the nitty-gritty details.
You can get in to greater levels of detail when you’re giving talks at conferences, assuming that you’ve gotten the OK from said employer or client. But otherwise, you can only go in to, so much, detail.
Don’t get me wrong. I don’t have an issue with this. It makes sense from a commercial standpoint, as there can be NDAs and various other agreements in place, and companies need to keep various things private, especially from competitors.
But it doesn’t make it too easy to, really, prove you know what you’re talking about, or to give specific examples to validate your knowledge.
However, this isn’t a new problem. Nor is it without existing solutions; two of the most well known ones being:
As I’m keen to continue my software development journey, and am more than OK with doing it in the open, it made sense to create an open-source project, host it on GitHub, then point clients and future colleagues to it, if and when the need arises.
They can see what I’ve written and determine, in their opinion, if I have sufficient skills for their project or organisation, without needing to go much further, if at all.
As the code’s out there in the open, it’s not restricted to being looked at by people who may seek to work with me, or have me work for them. It’s a living work, which anyone can see and use to get an idea of my technical proficiency.
It can serve, in addition to my writing, my websites, and my social profiles, as yet another way of building brand Matt. It’s just too good to pass up. What’s more, as the code supports a live project, it’s even more real.
A friend of mine told me once, when I asked him if it was worth playing the virtual stock market, that it wasn’t worth it. His reasoning was:
if you don’t have skin in the game, then your decisions and approach to it are completely different to when you are personally involved, and either one (or both) of your money and reputation are at stake
That made a lot of sense academically, and was really brought home through projects like this. I didn’t want to make a project where no one could hold me to account, if I was slack, made a poor decision, got lazy, or become ambivalent about it all.
I needed to have something personal on the line, some “skin in the game” as it were, to ensure that it was done properly. I know that anyone can look at the code or use the website 24/7, 365 days a year. If anything’s amiss, it’s trivial to know why, and who’s responsible – ME.
As a software developer you have a near-constant requirement to stay up to date with your skills, as well as to continue growing them. Technology, perhaps more than most fields, never, ever, sits still.
It’s constantly evolving, at an incessant rate. You can never say that you’ve learned everything, or stop learning, if you ever hope to stay relevant. There are ever new aspects to existing technologies, ever more competing technologies vying for attention, and new technologies making existing and older ones irrelevant – and the list goes on.
So how do I ensure I stay up to date, let alone grow my skills?
One of the best ways I know to improve at anything is to be hands on, with a practical project; one which has real users, real demands, and real needs. The combination of all of these factors creates an environment in which you’ll make both better decisions and move in unexpected directions.
If this were a private project, I may never be pushed to make tough decisions, or to grow past a certain point. When the project’s “real”, for want of a much better word, then I am pushed:
Some of these points may never arise, but I’ve encountered all of them during the course of this project.
## Low Learning Curve
This point is, perhaps, debatable. WordPress isn’t that hard, from a user perspective. Sculpin’s really straight-forward. But this isn’t a bait-and-switch.
What I mean is that, I believe, to get the best out of these tools initially, and to ultimately customise them exactly as I need them to be, at some point I’d have to dig pretty deep down inside them.
Given that they serve broad needs, there might be a lot of related code and tooling I’d need to know, which relates to the functionality I’d need to customise, but doesn’t directly affect it.
Now I’ve been coding for about 14 years, and in PHP for the majority of that time, as the language of choice. So I consider myself really proficient at it. But time would still need to be invested.
Given that I believe my project’s needs are, initially, quite modest, and can grow, at most, little by little over time, then I believe creating a custom codebase is the right choice. I can implement just what’s needed to support the needs of the project, and then add on as the need arises. I can draw on what I already know, learning as I need to.
OK, if others use the codebase, or help me out on it, they’d then have a learning curve that I don’t, needing to come up to speed before they could do meaningful work on or with it. So I accept that this point is very subjective. But from my perspective, which is where I’m writing from, it’s valid.
## Does Exactly What I Need & Grows With Me
The site does just what I need and is able to grow with me as the needs grow. That’s the beauty of creating a custom-purpose solution. You can control it to the n-th degree, ensuring you only include what you need. Now there’s the flip side to this equation, which is that you have to code so much of it.
You can’t just grab a module or plugin, install it, configure it and have new functionality ready to use. So it’s not a complete win. There have been moments when I’d love to have been able to have just grabbed a plugin and been done with a challenge which faced me.
This is largely alleviated by Composer though – definitely one of the best advents to PHP, ever, in its history. Thanks Jordi*!* So even the negative of having to do everything yourself, is to a large extent alleviated by being able to include 3rd party packages which provide the core of what I need.
And then there’s the next benefit.
It has the benefit of helping me learn technologies through integrating and building upon them. So whilst not every cloud has a silver lining, so many do.
Following on that point about about learning by integrating, it’s a fantastic way to boost the speed at which I can learn new skills and grow existing ones. As Sir Isaac Newton said:
If I have seen further, it is by standing on the shoulders of giants.
## Great Career Advertisement
This is largely related to, in part the same as, the earlier point about proving you know your stuff. By doing so, so publicly, by creating an application which supports (in time) a large number of users, shows that you can design, build, and maintain an application which works in the real world, not just in, academic, theory.
That’s the great thing about software development, versus other skills, such as dentistry, medicine, or law. It’s easy to prove you know what you’re talking about, what you know, what you can do. What’s more, you can do it in a very public way.
So, whether you’re following a career path of one role after another as an employee, whether you want to be head-hunted for a startup, or be able to show clients that you know your stuff, this kind of project is an excellent way of doing so. As I fall in to the latter category, hint, I definitely believe this is the right path to pursue.
I really can’t deny the appeal of this one. Knowing all of the code, outside of third party packages, as a geek, is truly sexy. I designed a system to match my specific needs. I have complete choice and creative freedom to move it in directions that I need it to go.
I can create milestones and issues in GitHub to guide the development of the project. I can bring people on as needed, to meet the objectives and goals I have. Having that total control is very fulfilling.
I can vouch for it, and be proud of it as it grows. What’s more, with time I can create a legacy. There’s a flip side of being too emotionally invested, which’s not being able to walk away. I accept that risk, and appreciate it may be a fine balancing act.
But it’s a risk which I’m willing to take. There’s a lot more to the project than the website. Whilst it’s a central point of focus for the project, it’s but one part of it. So I’m not concerned that I’ll lose perspective at any point.
## Wrapping Up
And those are the reasons why I chose to create the Free the Geek website by hand, instead of using an established platform, such as Sculpin or WordPress. Sure, the established platforms offer enormous amounts of functionality, functionality which likely could have been coupled together far faster.
But with a project so custom, would I have needed the majority of the functionality? Also, would I have had to have learned so much about the platforms in order to customise and configure them, just as I needed?
So far, and it’s only early days, I’m confident that my choice in the technologies and approach I’ve chosen is the right one. I’m very excited to see what the future brings and to continue learning and keeping my software development skills up to date.