惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
News | PayPal Newsroom
Application and Cybersecurity Blog
Application and Cybersecurity Blog
O
OpenAI News
S
Security @ Cisco Blogs
宝玉的分享
宝玉的分享
Hacker News: Ask HN
Hacker News: Ask HN
T
Troy Hunt's Blog
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
Latest news
Latest news
NISL@THU
NISL@THU
S
Security Affairs
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
AI
AI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
小众软件
小众软件
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
I
InfoQ
Schneier on Security
Schneier on Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
The Exploit Database - CXSecurity.com
IT之家
IT之家
T
Threatpost
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
腾讯CDC
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
H
Heimdal Security Blog
S
SegmentFault 最新的问题

CSS Wizardry

Front-End’s Missing Metric: The TBT Window Meet Your Users Where They Are with Obs.js Better Browser Caching with No-Vary-Search font-family Doesn’t Fall Back the Way You Think What Is CSS Containment and How Can I Use It? When All You Can Do Is All or Nothing, Do Nothing Obs.js: Context-Aware Web Performance for Everyone Low- and Mid-Tier Mobile for the Real World (2025) The Fastest Site in the Tour de France Making Sense of the Performance Extensibility API Why Do We Have a Cache-Control Request Header? HTML Is Not a Programming Language… Build for the Web, Build on the Web, Build with the Web Licensing Code on CSS Wizardry A Layered Approach to Speculation Rules Designing (and Evolving) a New Web Performance Score Core Web Vitals Colours The Ultimate Contract Templates for Tech Consultants: Protect Your Business and Get Paid Optimising for High Latency Environments Cache Grab: How Much Are You Leaving on the Table? blocking=render: Why would you do that?! Correctly Configure (Pre) Connections The Three Cs: 🤝 Concatenate, 🗜️ Compress, 🗳️ Cache What Is the Maximum max-age? How to Clear Cache and Cookies on a Customer’s Device The Ultimate Low-Quality Image Placeholder Technique Core Web Vitals for Search Engine Optimisation: What Do We Need to Know? The HTTP/1-liness of HTTP/2 In Defence of DOM­Content­Loaded Site-Speed Topography Remapped Why Not document.write()? Speeding Up Async Snippets Critical CSS? Not So Fast! Measure What You Impact, Not What You Influence Optimising Largest Contentful Paint Measuring Web Performance in Mobile Safari Site-Speed Topography Speed Up Google Fonts Real-World Effectiveness of Brotli Performance Budgets, Pragmatically Lazy Pre-Browsing with Prefetch Making Cloud.typography Fast(er) Time to First Byte: What It Is and How to Improve It Self-Host Your Static Assets Tips for Technical Interviews Cache-Control for Civilians Bandwidth or Latency: When to Optimise for Which ITCSS × Skillshare What If? CSS and Network Performance The Three Types of Performance Testing Getting to Know a Legacy Codebase Image Inconsistencies: How and When Browsers Download Images Identifying, Auditing, and Discussing Third Parties My Digital Music Setup Measuring the Hard-to-Measure Finding Dead CSS The Fallacies of Distributed Computing (Applied to Front-End Performance) Ten Years Old Relative Requirements Airplanes and Ashtrays Performance and Resilience: Stress-Testing Third Parties Refactoring Tunnels Little Things I Like to Do with Git Writing Tidy Code Configuring Git and Vim Base64 Encoding & Performance, Part 2: Gathering Data Base64 Encoding & Performance, Part 1: What’s Up with Base64? Code Smells in CSS Revisited Typography for Developers Moving CSS Wizardry onto HTTPS and HTTP/2 Ack for CSS Developers A New Year, a New Focus Preparing Vim for Apple’s Touch Bar Choosing the Correct Average CSS Shorthand Syntax Considered an Anti-Pattern CSS Wizardry Newsletter Nesting Your BEM? Improving Perceived Performance with Multiple Background Images Continue Normalising Your CSS Pure CSS Content Filter Pragmatic, Practical, and Progressive Theming with Custom Properties Refactoring CSS: The Three I’s Speaker’s Checklist: Before and After Your Talk Improving Your CSS with Parker The Importance of !important: Forcing Immutability in CSS Mixins Better for Performance Managing Typography on Large Apps White October Events Workshop Partnership BEMIT: Taking the BEM Naming Convention a Step Further Travelling Like You Want to, When You Have To Contextual Styling: UI Components, Nesting, and Implementation Detail Subtleties with Self-Chained Classes Cyclomatic Complexity: Logic in CSS Immutable CSS Can CSS Be Too Modular? More Transparent UI Code with Namespaces When to use @extend; when to use a mixin The Specificity Graph CSS Guidelines 2.0.0
CSS Wizardry Ltd.: Year 1 in review
Harry Roberts · 2014-10-24 · via CSS Wizardry

Written by on CSS Wizardry.

Table of Contents

Independent writing is brought to you via my wonderful Supporters.

  1. The work
  2. The lifestyle
  3. Business
  4. Year 2
  5. Highlights

Today marks exactly one year to the day that I left Sky in order to work for myself. I thought I’d write up a very candid postmortem.

Disclaimer: This post was hastily written, so is more of a brain-dump than a carefully-penned article. Also, if you don’t fancy the idea of someone going on about how great their job is, please stop reading now. I’ve tried as as hard as possible to avoid gloating, but after several failed attempts at self-censoring, I just let it all flow. You have been warned.

The work

I went into self employment in typical me fashion: informal, optimistic, freestyle. My thinking was that I’d had 6–7 years of amazing but very predictable employment, so I wanted to make the most of striking out alone by not having any rigid plans in place. I wanted to make sure that I wasn’t stifling any opportunities before I’d given them chance to happen.

This worked out very, very well. The sheer variety and amount of work I’ve been able to do as a result has been astounding. I was very keen not to go off contracting and ending up working for three to six months at a time, and instead wanted to focus on much shorter engagements with a higher number of clients. This is why I explicitly chose to go the consultancy route as opposed to freelancing or contracting.

In the last year I’ve worked for large companies like the BBC and the NHS, to smaller companies, to working with individuals from their home offices.

The single longest engagement I had was with the NHS, and lasted just 21 days. The majority of my work has been single-day workshops with companies, and a few week-to-fortnight engagements with several clients who required a little more involvement.

The vast majority of my work has been consultancy and internal workshops: heading into companies for short (often just one day) stints and assessing, troubleshooting, teaching, and helping teams manage large and/or growing codebases. This has been immensely rewarding and is exactly the kind of thing I wanted to do.

I have only worked on three development projects in the last year. One was an initial sprint’s worth of work to define and plan out architectures and strategies; another was the NHS project which was several sprint’s worth of work handled in a very satellite fashion; another is still ongoing. I’ve really enjoyed the dev work, but only because my role has, again, been very consultancy led. I’ve turned down every project that has had already-finished designs and just needed someone to build them, because that is just a fundamentally broken way of working, and something I really do not want to encourage or participate in.

A worry I’d had about stepping away from day-to-day development work and going consultancy was about falling behind the curve and losing the real-world experiences of being a developer. What ended up happening was the complete opposite: as a result of parachuting into companies for a day or two at a time I was exposed to a lot more varied and diverse problems than I would have done if I’d been working on dev projects. Spending a little bit of time with a lot of very different companies meant that I was solving more problems than ever before, and this is great news.

The types of projects and companies have been very varied as well, which is something I knew that I really wanted from day one. The reason I’ve not taken the contracting or freelance route is because I don’t want to work on the same projects for months on end at the expense of variety. I absolutely love working product, but I also wanted to use my move to self employment to get to work with a lot of different products, teams, and environments.

The lifestyle

The lifestyle of self employment has been one of much privilege for me. I’ve travelled to—and worked from—places all over the globe. I’ve met dozens, if not hundreds of people, I’ve eaten great meals, stayed in some beautiful hotels, made new friends, experienced new cultures and places, all whilst calling it ‘work’. I honestly cannot believe that this is my job now. Sometimes I do just sit and grin to myself about how fortunate I am to get paid to do this.

That’s not to say I haven’t earned such a great job—it’s been something I’ve actively worked toward since I was 17 years old (or earlier, depending on where you draw your measurements from). I’m very aware that lifestyle isn’t immediately available to everyone, because it was never immediately available to me. It’s something I’ve had to work very, very hard at to attain, but it’s paying back tenfold. If you’re considering a move to self employment, I would advise that you lay as much groundwork as you can before you take the leap.

The work–life balance has been amazing. I’ve not had any quiet periods that I haven’t wanted to have; I’ve turned down more work than I’ve accepted, I’ve replaced quantity of work with quality. I’ve had a very relaxed lifestyle interspersed with hugely rewarding work and plenty of travel. This is something I really, really enjoy.

I had two notable discussions with friends, earlier this year, about my work. One friend asked me:

Harry, you’re always Tweeting about what a great time you’ve had with all these nice people. Are you just saying that? Surely they can’t all be great companies and people…?

I do tweet a lot about products, teams, and companies I’m working with, and it is always favourable. There are a couple of reasons I do this: one, to publicly praise the work of a particular company or team (I like to use my platform for good where I can); and two, to less altruistically but subtly promote the fact that I’m running a workshop for someone, and you could have one as well. This isn’t falsified or for the sake of appearances: it’s true. Every client and team I’ve worked with has been great. It wasn’t until I was asked this question so directly that I realised just how great my clients have been. I’m sure not everyone can say the same.

Another friend, who’s not in the industry, asked me how working for myself was going. I answered with something along the lines of Ah it’s so much fun… and, once I’d finished speaking, my friend just said with a genuine look of amazement on his face:

I absolutely love that your first response to a question about work is that you’re having fun.

Again, I’d never even thought about it like that until it was pointed out. My instinctive response was about the fact that my work is a lot of fun. I didn’t mention money, or clients, or troubles; all that was on my mind was how much fun I’m having. I’m a very fortunate person.

There are downsides, though: I’ve lived out of suitcase for a year; I spend a lot of time alone, be that travelling, hotel rooms, or dining (A table for one, please. is probably my most-used phrase of the year); travel is tiring and can be very unproductive unless you force yourself to work (I send most of my email from airports and trains); and you have to up and leave a lot of teams and people you get really invested in. This, however, is just what comes with the territory, I guess.

Another negative is health. Not that my work has affected my health, but it’s a lifestyle that lends itself well to unhealthy living if you’re not careful. Eating in restaurants so often means a lot of rich food (usually coupled with alcohol). Getting used to dining alone when working has found its way into my non-work life. I eat out in restaurants far too often. I’d go as far as to say that 11 meals in 15 are in restaurants, which is crazy when I stop and think about how much I used to cook, and enjoy cooking. It’s a very privileged problem to have, but it’s a problem nonetheless.

Business

Business has been great! Really great! I’ll spare you the actual facts, figures and financials, but I did some rough calculations and worked out that I was 7.3 times more profitable being self employed than I was as a Senior Developer at Sky. Money was never a goal or key driving force in my decision to work for myself, but it’s interesting to look at how things panned out. It’s been a year free of any financial worries or concerns for the business.

It’s been a very good year for the business, and despite working far, far less than I did in full-time employment, it’s been a very financially stable year.

I’ve decided that, although the figures are really, really great, they can easily be made better. My downtime is very important to me—I don’t want to work each continuous day for weeks on end—but I probably ought to be more productive with it. I did a lot less cycling and mountaineering this year despite having an order of magnitude more available time. I didn’t waste any of that time, but I didn’t do anything particularly focussed with it. It was perhaps too leisurely (the extra weight I’ve gained is testament to that).

Also, the nature of consultancy is that it’s very inefficient. I’m the company’s single point of failure, so if I don’t work, the company doesn’t earn. Also, as I’m selling my time, and there’s only one of me, the business model currently can’t scale—I can only be in one place at one time. It might be interesting to explore ways of making CSS Wizardry Ltd. more efficient.

Year 2

More of the same, please!

There are a few key points I want to address:

  • Eat better.
  • More productive use of my downtime.
  • Investigate making the business model a little more efficient.
  • Perhaps take on more dev work.
  • More/better open-source work.

But other than that, I want to carry on as I am. I already have some really, really cool work/clients lined up, doing exactly what I want to be doing. This is, for now, my dream job. I’d be silly to change that.

Highlights

Honestly, it’s impossible to say. Perhaps it was

All this to say: I really, really love my job.

Year one has been fantastic, and I want to extend a huge and sincere thank you to every client, every team, every individual who’s made it as fun as it has been. Thank you so much.

Here’s to Year 2.