To all those don’t meet you yet. How do you describe yourself?
I’m a web developer from England. My actual job title is Consultant Frontend Architect—I travel the world to help clients of all shapes and sizes write better, faster, more scalable, more maintainable CSS. I have a huge focus on performance, large-scale applications, and productivity.
When you started developing, what were some common mistakes you made along the way?
Initially, things like false assumptions, designing for today rather than tomorrow, building to known or fixed constraints. This led to very inflexible and rigid code, and lots of hard work trying to make things work. Conversely, as I matured, I started to over-engineer things—making things too flexible, and wasting hours and hours designing for eventualities that may never exist. Classic premature optimisation. Nowadays I try to strike a balance between flexibility and suitability—not designing to fixed constraints, but also not designing for a million-and-one unlikely scenarios. Those scenarios should be dealt with as we encounter them.
Frontend seems to be easy until you start to learning. How do you face the challenge of learning new things?
Learn things as and when you need them. Don’t over-face yourself trying to learn everything at once, and right at the beginning.
Also try to remember that there is a huge spectrum of skill-levels on the web, and it’s okay not to be an expert in everything. With the amount of people writing about a huge array of different things it’s easy to think that everyone knows everything. What’s really happening is people are only exposing what they know about—the JS experts aren’t telling you that their CSS sucks; the CSS experts aren’t telling you about how bad their programming is.
Remember that it’s okay not to know things, and suddenly things seem a lot more bearable.
What would you qualify as the top few problems facing developers today?
I’d say one of the key ones—which has a huge knock-on effect for developers, users, companies, etc.—is unreasonable or demanding pressure from managers to deliver. When people are asked to work too quickly or ambitiously, or management have little regard for code quality, then we end up in a situation where developers are forces to take descriptioncuts that become very hard to undo or untangle.
Developers have to lean more and more on tooling in order to get the job done quicker, which can have huge performance impacts. They might have to throw together a UI using Bootstrap which immediately means their codebase starts off with a few thousand lines of somebody else’s code. They’re expected to build feature after feature after feature without being given the time to refactor. They amass unpayable amounts of technical debt and it only continues to get worse.
So yeah, the tech is actually one of the simplest parts of our jobs: managing stakeholder demands is much harder.
How would you recommend somebody to start learning web development?
Just start playing with different things on your own time. Don’t dive into a six week course that costs a few thousand dollars. Play around with simple HTML and CSS in your browser, and start with just being inquisitive. Once you’ve done that for a while you’ll hopefully get a feel for what you’re interested in, and then that would be what you focus on next (e.g. JS, design, performance, etc.).
Build yourself a small bio/portfolio style website, even if it never sees the light of day. Have somewhere where you can play around totally unencumbered and unrestricted. Start off by treating it as fun—if you take it too seriously you run the risk of becoming resentful of it if you run into difficulty.
What was your first development job and how you faced it?
I worked for a small web development company in my local town when I was about 16 years old. There weren’t really many challenges to face because my bosses knew my skill level and where to best utilise me. I did learn a lot about project management and working with remote teams though.
What was the most challenging project you ever faced and why?
Err… I think my work at
Sky was quite challenging because it was the first time I’d worked somewhere so huge! It wasn’t hard or unenjoyably challenging, but it did require a fairly large shift in approaches: working at scale, working on products rather than simple websites, performance concerns, etc. It was a great challenge! I really enjoyed it.
Can you describe your workflow when you create HTML, CSS and JavaScript from scratch?
I always wait until the last possible moment before adding third party tools or dependencies. I start off with a blank directory and my text editor and that’s it. First thing is to get a repository set up, and then from there I just start writing code and tweaking it as I go along. My workflow is very organic, and evolves as I work. I’m not the type to immediately set up Grunt/Gulp tasks, as to do so puts the cart before the horse.
What excites you most these days?
Performance! It’s addictive, and I’m doing a lot of work in that space at the moment.
What is the most important thing you’ve learned?
As soon as you finish any project, you will immediately think of five things you would have done differently if you could start again. This feels really disheartening at first, but it was quite liberating for me to realise that this kind of feeling is always going to be there: it’s a sign of continuous improvement.
Do you have any favorite books, videos, or resources that you could share with the readers?
Souders’ performance books are great, as is Ilya’s High Performance Browser Networking. I don’t really have fixed resources: I normally just rely on Twitter and Hacker News.
Do you have any advice for new developers just starting their career journey?
Enjoy yourself. Don’t take things too seriously. It will get serious quickly enough as it is without you even trying, so try to relax for a while.
What can we expect from Harry in the future? Anything you want to share?
More of the same, I think! I’m definitely taking on a lot more performance consultancy, so anything to do with making things fast, I guess!