If you're following me on Twitter, you might have seen that I released a crazy
project called CSS Flags. People often ask me why I did such a thing. This
blog post is an attempt at explaining the thought process that motivated me to
build it.
Trip to Tours
Two years ago I was on holidays and visited the city of Tours, in France. It's a
small medieval city where you can find the museum of "Compagnonnage". I had no
idea what this meant before visiting it, and learned everything about it during
my visit.
Companions were craftsmen regrouped in guilds. They could be blacksmiths,
carpenters, shoemakers, painters, etc. They regrouped and shared their knowledge
between them. Being recognized as a Companion was a mark of quality in your
work.
They followed a strict hierarchy of disciples and masters. More importantly,
they had a specific relationship with work. They wanted work to stay nothing
more than a tool. They refused to let work drive their lives and wanted to stay
the masters of their tools, and never be enslaved by it.
But when visiting the museum, what struck me the most was all their internal
rules that they followed 200 or 300 years ago. They strove to teach their craft
to the new comers, to never compromise on quality, to always search for a better
way to do something. They were passionate and knew that what they were working
on was a small piece of something much bigger.
And all this resonated with me. It felt a lot like what I experience everyday as
a software developer, with the principles of Software Craftsmanship and the
Egoless Programmer. Reading all those rules on old parchment and realizing they
still apply today was a surprising experience.
The road to the Chef d'œuvre
I felt close to those people, but there was one thing that they were doing back
in the days that we do not do today, though. One important part of the
initiation process, the step that makes you from disciple to master: the "Chef
d'œuvre", or masterpiece.
Every Companion has to build one single piece of fine craft to become a master.
They spent an awful lot of time on it, between 10 to 15 years. Masterpieces were
miniature version of a bigger construction, where they had to use every
technique of their craft, and then more.
Doing it on a miniature version allowed them to mess up with no consequences.
They can start over without anyone getting harmed. It starts as a perfect way to
learn the basics, perfecting them on a small element. Then they add another
technique on top of the first, and they will not only learn each technique
independently, but also the potential synergies between them and limitations of
each. By combining different techniques, they will even discover new ways to
build and see issues through new perspectives.
What started as a learning sandbox evolved as an experimentation that pushed the
boundaries of the craft. The whole masterpiece is a metaphor for the growth of
the craftsman, from disciple to master. Once their masterpiece has been
validated by the previous masters, the disciples becomes masters themselves.
What about doing the same?
I strongly encourage you to go to Tours and visit the museum. There are hundreds
of masterpieces from different crafts, each more impressive than the last. Even
if you don't speak French, the beauty of it is worth it.
After leaving the museum I thought about building my own masterpiece (in all
modesty of course). After all, if it worked for them, considering everything we
had in common, it should work for me too.
I didn't want to spend 10 to 15 years on it, though. I also have no skills with
wood, so I decided to do it in CSS. I think it is a powerful language, but often
underestimated. It's also a language I know well but that evolves so quickly I
rarely have the chance to try the latest shiny features because I need to keep
backward compatibility with older browsers.
The perspective of having my own miniature sandbox where I could try anything I
wanted was appealing.
The challenge I set myself was to reproduce all the flags of the world in pure
CSS. But because even that sounded too easy, I added the rule that I should use
nothing more than one div per flag. Everything should be in CSS, nothing in
HTML except for the div.
Learning vexillology
Which in turn forced me to learn a new word: Vexillology. Vexillology is the
study of flags. Some people are passionate about music and can talk about it for
hours. Well, some people are passionate about flags and can talk about it for
hours.
I discovered a whole new world with it's own vocabulary about colors or shapes.
I discovered that each flag has its own history. By reading the history of a
flag, you learn about the history of the country behind it.
This part was not a bonus, but core to what I was trying to achieve. CSS was a
mean to an end, but what I was building were flags. I needed to understand my
subject if I was to build it correctly.
When I started the project, I already knew how to make the easiest flags. Some
other I knew were going to be a challenge but I had some ideas to try. But most
of them I had no idea where to start. It did not stopped me, though. I knew I
was going to learn along the way, all I needed was to get started.
The gritty details
That's how I got the idea and the motivation for this project. By starting with
the easy bits first it gave me confidence that I could do it. Going
progressively to more and more complex flags I was faced by ne problem at a
time. The solutions I found in my first flags I could re-use and combine in the
latest one.
I'll write a more complete (and CSS-focused) list of tips in an upcoming
article.