Everything is as simple or complex as you want it to be.
As creators, our role is to not only look at the top, face level of what it is we build (or what inspires us) but also the many different layers of complexity contained within the thing.
That is: when we perceive the world around us we can do so with as much or as little attention to—and consideration for—detail as we want. This intention in how we perceive things influences what we can do with the information we have available on us.
Simple concepts are more efficient for communication purposes, they’re easier to parse or break apart, and generally more likely to be what the general population thinks about. But simple things are also easily misunderstood and poor representations of the whole. Nothing is ever as simple as we first perceive them to be.
People, projects, devices with screens, the things we see on a screen, products we buy, apps we use, everything in the world around us are designed to be either immensely complex or plainly simple. How complex something appears to us depends mostly on how it’s presented, but also how we choose to look at it. The more you look into and think about something, the more complex it becomes.
At the most simplistic level things are singular: a problem is… well, a problem. A computer is a computer. These simple generalizations are helpful for us to understand the complexity of the thing and to communicate about it.
This is an over simplifications and yet it’s also how we tend to view projects in our careers. You have a problem and some concept of a solution to remedy it. Simple.
If you ask a child to explain how they did something, their response usually follows this framing; first there was this, then this. Two ends of the same line. This is also how we tend to choose to view strangers on the internet, products we don’t like, and politicians.
But if we really look at any of these things we start to see additional layers to it. The computer is made up of many complicated parts. The path to a project solution is rarely straight, it’s often much more complex. When it comes to design problems there are constraints—technological, financial, time, energy, and others—as well as additional considerations such as unforeseen situations or pre-existing concepts not previously considered, a competitive market, access to information and insights, and so on. You may even find that what you thought as being a straight-forward problem was jut one small piece of a larger issue.
Those outside the realm of design tend to see design as simple, but those within the space understand just how complex the work can be. This is true of all careers.
When we look at something closely it becomes evident that any one problem consists of many smaller problems. When we look closer, our perspective shifts to see things in slightly more complex lens. We begin to see that there is more than just a linear path to what it is we’re evaluating, there are tentacles to the complexity. We end up with something that looks more like this a tree, with roots branching out from a trunk. We can choose to look closely at the project now and see it for what it is: a mess of objectives, constraints, resources, and energy.
The problem of “how to build a computer” is made up of thousands of smaller problems: how to machine the case, how to wire circuitry and fit it into a small container, how to provide power and ensure the power source is reliable and can last for many years, how to layout keys onto the casing and the mechanics of the keys themselves. On and on the complexity goes, only ever as deep as what we’re willing to look at. There are problems with thermodynamics, machine physics, and the elasticity of the materials used in the thing.
What often makes the initial problem a problem to begin with is that it entails many smaller problems. In the absence of these complexities the problem wouldn’t be a problem because the solution would be straight-forward. Most things are not as simple as we anticipate them to be. People, projects, and products certainly fall into this category of being more complex than what we often see at-a-glance.
These smaller components—problems, constraints, and information—are connected in a way that influences the others as well. They’re less of a branching off a central problem and more akin to a web of complexity.
Looking at a problem in terms of many smaller problems is a good way to zoom into the complexity, but there’s more to the situation than looking closer at it! Not only do we need to zoom-in on all the smaller elements of something, we need to also zoom-out to see what additional problems are influence the one we’ve set out to solve. We end up in a space that looks something like a solar system of problems and solutions.
Where will the thing be used, in what environment? How often will it be used or abused? What are the constraints and resources available to the thing that will exist outside of it? What is the history of things like this? Suddenly what we thought of as being simple is far more elaborate, and far more reliant on things outside our initial consideration.
This is why whenever you’re stuck on a problem it’s easier to come up with a solution by stepping back from it—both literally and figuratively. Often the thing that has us stuck is just outside where we’re looking.
Problems and concepts are rarely linear lines to solutions, nor are problems ever siloed on their own. What’s more likely is that any given thing is itself a complexity to a larger ecosystem.
To really be a truly critical thinker is to consider the larger and smaller complexities of any given thing, and the interplay between them.
To be an effective product designer, engineer, product manager, data scientist, or any other function within the product development lifecycle, we must be capable of navigating the spectrum of complexity in the world around us. Doing so gives us insights into the things we build, and enable us to use the layers of complexity to our advantage. We can simplify concepts in order to communicate them with outside markets, or we can draw on the complexity of a concept in order to ensure the work we’re doing is going to be long-lasting or highly effective.
In standard design practices this process of looking in and out at the problem landscape is the very first step to creating solutions. It’s a divergence of perspective and thinking in order to ensure you aren’t overlooking critical information that could influence how you pursue solving the problem.
Before we can seriously attempt to solve a problem, we must first understand everything around it. The more time you have to consider the landscape, the better equipped you will be for solving the problem. As Don Norman wrote in his seminal book on modern design, The Design of Everyday Things:
“In design, the secret to success is to understand what the real problem is… complexity is essential, it is confusion that is undesirable.”
The world around us is only ever as simple or complex as we want it to be. We control this narrative by how long and how intently we look at something. Asking questions like: “What does this consist of? What is it made of? How do the parts work together?” as well as: “What is the larger ecosystem this is part of? What outward forces play a part in how this thing comes together?” add to our ability to perceive the complexities of something.
And when we understand the whole parts of something, we’re better equipped to change it. To add to it, modify it, remove it, or improve it.
In the absence of understanding the complexities we’re merely setup to talk about the thing. Sometimes communication is all we need, but if we’re to build or design something truly meaningful we need to look a bit closer than what’s on the surface—or in the message—of any thing.
Have you just started using Adobe Photoshop? If yes, then these helpful tips are obviously for you. Adobe Photoshop is the foremost tool that people start to use when they are just stepping into the graphics designing field. Some people learn this tool to enhance their beautiful photos or to do some little tasks. There is a lot more you can do with Photoshop on an advanced level. Here are some essential Photoshop tricks for a beginner through which you will be able to use Photoshop effectively.
Spots Removing
ADVERTISMENT: The Best Deals For Digital Design Assets – InkyDeals.com. Learn More>>
Suppose you click your picture, and your face is covered with blemishes that are ruining your photo. Don’t worry; Photoshop offers you a solution with the Spot Healing Brush Tool, which is located on the left sidebar.
Choose the tool from sidebar
Maintain the size of its brush accordingly
Move your cursor to your blemish or any other spot
Left-click once and let the magic happen
Cropping Image
Cropping is very common, and everybody knows- or at least should how to do it. In Photoshop, it is even easier to crop images as per your needs. Navigate to the crop tool present on the left sidebar. It will automatically give you the crop controls. Just drag the tool to crop the image accordingly, and that’s all. It is simple but one of the best photoshop tricks.
More Layers
When you drag an image from your computer to Photoshop. It only contains one layer. You can add more layers to the same image to apply filters and do more with it. To achieve this, select the image and on the top menu bar, select layer, and click on the duplicate layer option.
Pen Tool
The pen tool is magical. Beginners use it as well as advanced Photoshop users. You can select Pen Tool from the left sidebar. Use the tool to mark any object in the image. After selecting the object. Just press ctrl j from your keyboard and your object will be separated from the background.
Camera Raw Filter
Camera Raw filter works great for the color grading of your pictures. It consists of many options like saturation, brightness, and exposure options, which can easily make your dull picture bright.
Adding Text to Images
Text can give meaning to your image, especially if it is written in a beautiful font. There are thousands of fonts available online to download. You can utilize those fonts to add text into your images by clicking the text tool in the left bar. You can change text colors, and if you want to go a little bit advanced, you can add shadow and play with other text options.
Layer masks
Layer masks are useful to specify the area in an image, where you can change brightness, contrast, etc. for that specific masked area. It can be used wisely to get into advanced Photoshop techniques.
Removing objects from images
We talked about pen-tool above, but there are other easy selection tools available as well. You can use those tools to remove any selected object from your image. These tools include the Quick Selection Tool and Lasso tool.
Eye-dropper tool
If you are having difficulty in guessing the color of anything present in your image. Then you can select the eye-dropper tool from the left menu and click on the object whose color you want to select. Eyedropper will choose the exact matched color, which you can later use to write text on images or using a paintbrush.
Custom Shape tool
This tool is fun. A custom shape tool is used to draw many shapes just by selecting it and dragging it on your image. The shapes can be resized, and you can fill color in those shapes as well.
Magic wand tool
Magic wand tool works like magic. You have to select the magic wand tool from the left menu. Now click anywhere on the image where you want to make a selection. On your single click, Photoshop will automatically make a selection for you. Magic wand tool is effective for simple shapes.
Dodge tool
If you want your images to be lightened up, especially if your face is looking dull. You can use the Dodge tool to light the pixels of your image, which will give a better look to it.
Blur tool
The blur tool is another small but useful tool that can be utilized to make a strong blur effect on an object. You can use the smooth Blur tool to hide blemishes on your face with un-noticeable blur effects.
Filter Gallery
Filter gallery can be located from the Filter menu present in the top bar. There you will find a lot of filters that will change the look and colors of your pictures. You can play with those filters to choose the best for you. These filters include oil painting, sketch, and many other amazing filters.
Hand tool
The hand tool is just used to easily move through your image. You can choose the hand tool from the tools menu. Just long-press the left click mouse button and move your mouse to use the hand tool. You can also hold the spacebar and move your mouse to do the same. This type of photoshop tricks can improve the quality of your work.
Smudge tool
Smudge tool gives you a finger paint type effect on your image. The smudge tool stretches the colors present on your image.
Fun-tip: You can use the smudge tool on your hair to change its shape and to make it look longer.
Magic Eraser
The Magic eraser works like a magic wand tool, but instead of making a selection, the magic eraser erases that part of the image. Click on the part you want to erase by using the magic eraser tool, and it will automatically detect and erase the same colored part. It is one of the best photoshop tricks for beginners.
Blending Options
Blending options are great to play with your image or text to drop shadow, stroke, texture, and outer glow on your image. You can access blending options by right-clicking on a layer, and from there, choose the “Blending options” on the top.
Gradient options
Gradient effects look great. To make a gradient effect, you can choose the gradient tool from the left toolbar and draw on your image with the selected colored patch. You can try out different gradients to choose the best for yourself.
Different file formats
There are many file formats in which you can save your image. You mostly save it in JPEG or PNG, but if you save your image file in PSD format, then it will be editable at any time you want in the future. Other file formats are also available there for some particular purpose.
These Photoshop tricks will help you use the tool better.
Less decoration — more actionable data. A bonus GIF included.
Sometimes I think we, designers, have forgotten what personas are and what this method was initially created for. I often hear from colleagues that personas are out-of-date, and such a trending framework as jobs-to-be-done is much better. However, there are no bad or good instruments. When used right, any tool can be fruitful.
Such a beautiful design deliverable, isn’t it? — Not really.
A persona is a vivid, concentrated image of people: their motives, behaviors, and goals. If you decorate it with shadows, gradients, and font styles, you risk adding information that only looks important. Remove the fanciness — and you’ll be able to mercilessly edit all the bullshit out.
“Businessmen” stock photos, “quotes” from inspirational communities on Facebook, funny persona names, marketing and SEO buzzwords (income, marital status, interests, brands) — all these pieces of information usually don’t help to design a good service or product. Personas aren’t marketing segments; they are behavior-based models.
Too much demography makes designers think stereotypically and attribute wrong traits to people (so-called representativeness heuristic bias). As a result, you make assumptions about people’s emotions and thoughts instead of real-life behaviors, which you can observe — not just guess.
A frequently overlooked element is a story, which describes the way of thinking and background. If there is no story, a persona lacks tangibility and realism. People aren’t robots and often behave under the influence of unrelated circumstances. A story describes aspects that influence the usage of a product or service, which you are designing.
How many tasks and needs have you written? Three? Four? Try finding more, and don’t forget about the fears and wants people might have mentioned during the interviews. This will help to understand not only business concerns but also personal perspectives.
If you are designing, for example, a software product, try listing the solutions a persona already uses and note how pleasant that experience was. This section gives insights into people’s habits, things that don’t need fixing at all, and niches for something new.
Finally, the fun part! When helpful content is ready, it’s time to put emphases into the document and make it better understandable for the team. For instance, highlight the research findings, which people repeated frequently or described in more detail compared to other topics.
Look at the picture below and ask yourself: which one helps to make a design decision or to come up with a design hypothesis?
For me, the second one definitely works better. For example, the size of Adam’s team and their current software environment helps to choose familiar interaction patterns. The “Fears” and “Wants” sections are clues to the value proposition of a solution.
As promised at the beginning, here is everything in a single GIF animation.
The resurgence of vinyl records in a time of digital music and streaming is a story of how innovation can make technological comebacks possible. In the summer of 2019, the sales of vinyl albums are on the verge of becoming the largest source of revenue from physical sales in the music industry. This follows 15 years of upward trend—today, while remaining a niche product, the vinyl record may well eventually survive to be the only analogue medium for music, as the sales of CD continue their downward spiral.
Researchers in sociology and consumer culture have shown how this trend goes well beyond nostalgia—buyers of vinyl are attracted by its status as an object, its physical presence. This attraction matters even more today, as most of the time listening to a song does not involve buying a physical support anymore.
Our study starts from this vinyl comeback. We try to show how it is precisely the process of innovation, in which a new product or technology replaces an outdated one, that opens the possibility for an even older and obsolete product or technology to become relevant again.
To do so, we need to go back to the late 1980s, when sales of compact discs outsold vinyl records for the first time (in 1988), and then the sales of cassettes (in 1993). In 1998, vinyl represented only 0.7% of the total music industry revenues.
Why did consumers start to abandon vinyl and cassettes? Because compact discs are more resistant to scratches. Because they are simply more practical, easier to store, and easier to switch to the song you want to listen to. Because compact discs were sold to them as of superior sound quality: They can in theory emulate the sound of vinyl to a sampling rate indistinguishable from the original to the human ear while being able to reproduce more extreme frequencies (purists disagree).
Three decades later, digital music has replaced compact discs. In the U.S., the streaming industry accounts for 80% of music industry revenues. Looking back at the criteria that made the vinyl obsolete, the current streaming technology outperforms compact discs in every dimension: high sound quality and no scratches or storage problems.
The only characteristic on which the compact disc can compete is its physical presence—some people want to possess an object they can touch and display in their home. But on this dimension, it seems vinyl is doing much better than compact discs. Hence, people attracted by the object are more likely to buy a vinyl to complement their digital consumption.
The music industry and vinyl retailers have well understood the importance of that dimension. Recent new and re-releases of vinyl incorporate special features which play up the attractions of buying vinyl. Heavyweight vinyl pressing suggests the importance of the musical content. The same holds for colored vinyl or other special features such as cover art posters.
Predators and prey
This is a story of predators and prey—and is not unique to the music industry. Once the appearance of a new technology leads to the extinction of the previous one, it can be interesting to look at what existed before. Some of the characteristics of a long-extinct technology may have become relevant again now that the predator has disappeared. The key is then to identify how to emphasize these characteristics to the old format work alongside the new format.
In the photography industry, the first generation of analogue films has been almost entirely replaced by a second generation of digital cameras. A third generation, based on smartphones and social networks, was not originally designed for physical printing.
As more and more consumers now use the third-generation, abandoning digital cameras—according to data by the Camera and Imaging Product Association, shipments of digital cameras have decreased by more than 60% between 2010 and 2019—the physical dimension of analogue photography seems to have become a useful complement. As a result, photography on film has started to return as a niche product—and discontinued products such as Kodak’s Ektachrome or Fujifilm’s black and white films are being reintroduced.
Some consumers, who had abandoned products of the first generation start using them again as a complement to the third one. As in the case of vinyl recordings, the industry has well understood the demand for tangible photography, beyond simply reverting to old cameras. Polaroid is soon to release a “Lab” to print analogue pictures of images taken on smartphones. Fujifilm’s Instax, meanwhile, offers the possibility to print a format similar to Polaroid based on digital pictures.
Not every comeback is possible. Many products and technologies disappear because they have nothing useful to bring anymore. But when a new product or technology starts dominating a market, it may be a good idea to look at what existed two or three generations before. This may well prove to be part of the future—even if it’s just a small one.
Renaud Foucart is senior lecturer at Lancaster University Management School at Lancaster University. The story originally appeared onThe Conversation.
Introducing Morena Typeface! Thank you for looking this font. This a simple, clean and elegant sans serif, combines with updated, clean letterforms. Something flexible enough we could use it on anything while still retaining enough character to be instantly recognizable.
This minimalistic and modern all-caps serif typeface . With upper case characters, numbers and punctuation. Perfect for gorgeous logos & titles, Fearce will pair cool with many fonts and work well with whatever project you’re working on.
Thanks to Nirvan Type. Morena Free Font is free for personal & commercial use. Please download and enjoy, or can search more similar fonts on befonts.
Morena is free for personal and commercial use. Make a donation it certainly help author!
Raising money for your startup could be difficult. Every investor wants to see a solid pitch deck, but what exactly do they want to see? We’ll cover all of that for you in this article!
If you’re raising money for your startup, having an amazing pitch deck is a major component of fundraising. A great pitch deck can make a potential investor interested in your ideas and engage them in a conversation about your company, hopefully leading towards them offering to bankroll it.
For this guide, we’ll be going over what should be included in your pitch deck to properly excite the investors.
Several authors, venture capitalists, and start founders have built their version of what they consider important elements to successful pitching presentations.
We’ve found that the following format works best for most companies and is more likely to cause interest from potential investors.
Reason for making this pitch deck
When making a pitch deck the reason for its creation shouldn’t be to raise money. While this may sound like strange advice, the real reason why you are making a pitch deck is to get to the next meeting. You need to keep in mind that your pitch deck and the presentation for it will most likely be the first thing an investor is seeing to learn about your company.
Furthermore, because investments rarely conducted after a single meeting. The main objective here is to stir interest in your business. You want the investors to ask for more once they’ve heard your pitch and not turn you away.
The main reason behind a deck is to get to the next part, which is getting another meeting and a request for further details.
Slides to include in your pitch deck
Here’s where we reveal what investors want to see on your pitch deck.
The Problem
The slide covering the problem should be used to explain what gap you are trying to fill in the market. This part needs to be a problem that people can generally relate to and that investors would not have trouble understanding and sympathizing with. Additionally, you are only resolving a single problem. Not multiple ones. You need to come across as someone prepared to resolve this situation.
Just keep in mind, don’t spend to much time on the competitive landscape for this slide, you’ll be able to do that on a later slide. If possible, try and tell a relatable story when you are explaining the problem. The more you can make the problem as authentic as possible, the more your investors will come to understand the business and its goals.
Airbnb pitch deck reveals the problem they were trying to solve with their business.
Keep in mind when investors decide to get involved with your venture it’s likely because of one of the following reasons:
They have experienced similar issues in the past.
There is a clear sense of ROI in the future for them
Their professional expertise makes them understand the issue.
The solution
The solution needs to be done concisely and clearly. Especially if the startup your pitching is tech-related, your solution needs to be scalable. Scalability is the function of the system to increase its total output under an increased load when resources ad included. This is what investors want to see. A company in which they can invest so the wheels can run quicker.
Furthermore, it does make sense on the solution slide to outline why it makes sense. As you may have become aware, timing is vital in the business world and being at the right time in history is what matters the most. Being too early or too late to the market has to lead to failure for most startups. Make sure to avoid any statements such as you being the only one doing this, you being the leader and so on. Many other entrepreneurs have already come up with this idea before you and other companies that may be tackling the same problem with their approach.
Airbnb shows a clear example of how they decide to solve this issue for travelers who were struggling to find themselves a place to stay.
The Market
This slide should be used to expand on who your ideal customer is and how many of them exist. What is the total market size and how do you position your business in the market? If you can gather the data, investors will want to know how much people or companies currently spend in the market to get an idea of the total market size. This is the part where you tell the story about the scope and scale of the problem you are trying to resolve.
If it fits properly for your business, you’ll want to divide your market into segments that you will address with various kinds of marketing and perhaps a variety of product offerings.
You need to be careful with this slide, though. The temptation to try and define your market to be massive as possible will linger in the back of your head. Investors will want to see that you have a very specific and reachable market. The more detailed you are about it, the more real the pitch will feel.
Product
This slide will be all about showcasing screenshots of your product in action. To make it stronger you may wish to include some description about the product itself and some quotes from any existing clients commenting about how much enjoy the product.
Airbnb perfectly shows off their available listing from various cities.
While this one shows a listing of homes and a review system with their price tags.
Lastly, the booking page, where people will be able to reserve the date they wish to stay at their chosen location. At the bottom, there’s a comment section for people who’ve stayed and left a review on how the experience went for them.
Business model
Now that you’ve described the product or service your offering, you need to discuss how to make money. What do you charge and who pays the bills? For some business, advertisers are paying the bills instead of users, so it’s critical to elaborate on the details.
It’s also possible to reference the competitive landscape here and talk about how your pricing fits into the larger market. Is the business a premium, high-price offering, or a budget offering that undercuts the current solutions on the market?
Airbnb shows how their business model works, with them taking 10% commision on each transaction.
Traction
This slide should be used to show the month over month growth of the business. If you already have any sale or early adopters using the product, talk about them here.
Investors will want to know that you have proof to back up the claims of your business model as that reduces risk, so any proof you have that validates that your solution does work to solve the issues you have discovered is incredibly powerful.
Another thing you can touch on this slide is your milestones. What major goals have you managed to achieve so far and what are the major next steps you plan onwards? A product or company roadmap that outlines important milestones can help here.
If you are still in the early stage or your growth is not that interesting, it would be advisable to avoid including this part. To give you an idea, accelerator programs such as Y Combiner expect a minimal amount of 15% month over month growth.
Marketing Strategy
Explain how you are planning to attract customers attention and what will your sales process look like. This slide should be used to outline your marketing plans.
You’ll want to detail the key strategies that you intend to use to get the product in front of prospective customers.
Finding and winning over customers can sometimes be the most difficult challenge for a startup, so it’s important to show that you have a solid hold on how you will reach your target market and what sales channel you are planning to use.
If your marketing process is different than your competitors, you should highlight it on this part.
Airbnb shows how they plan to have people adopt their platform as their choice of booking room during their travels.
Financials
Generally, you want to shoot for at least a three-year projection. Some investors may even ask for five years of projection but in my experience, these investors tend to be less skilled.
This slide is the most important one in your pitch deck. When you first meet with a potential investor, they will ask for your pitch deck.
During the next meeting, they will ask you where things are currently and then they will make a decision. With this in mind, it’s always a great idea to be more on the conservative side and over-deliver.
The worst thing that could happen is for you to miss out on the benchmark and underperform. But, for your pitch deck, you shouldn’t go in-depth with a spreadsheet that will be difficult to read and understand in a presentation format.
Limit yourself to charts and show sales, total customers, total expenses and profits.
‘
Competition
Every business has competition in the market. Even if you are opening up an entirely new market, your potential customers are possibly using an alternative solution to help them with their problems.
Here you should describe your fit into the competitive landscape and how you’re different than the competitors and alternative that are currently available to the market.
What main advantages do you have over the competition or is there some “secret technique” that you have and others don’t?
The main idea here is to explain how you are different than other players on the market and why customers will choose you instead of the other competitors on the market.
Team
The team is another important slide that needs to be added on any pitch deck. The investors want to be aware of who is in charge of the bus and what makes them unique to execute on that mission and vision.
The best way to showcase the team slide is by simply describing the members of the leadership team (Ideally co-founders). List in bullet points that have been a few achievements from each member and the key expertise that they bring to the table.
Even if you don’t have a full team at the moment, identify the key position that you still need to fill in and why those positions are vital for the company growth.
Investment
Lastly, it’s time to ask for the money. You need to explain why you need the amount of money you are asking for and how you plan on using this money. Investors will want to be aware of how their money is being used and how it’s going to help you achieve the goals you are setting out for your company.
Here’s an example:
Q: How much do you need for validation of your business model?
A: We are requesting $200,000 at $1,000,000 pre-money valuation to fund our business strategy and product roadmap. This will allow us to have 18 months of runaway to repeat and scale our business model.
Q: What are you going to spend it on?
A: We are spending the first 100k on hiring one back-end developer and a customer success person. This team should help us get to problem-solution fit and help us validate our acquisition channels.
For those of you who already have some investors on board, this is the time when you should be talking about those other investors and why those decide to invest.
Conclusion
There you have an in-depth guide to help you properly build a pitch deck for your upcoming investment meeting. If you are serious about your pitch deck it’s not a bad idea to ask someone with a greater understanding of sales analysis to take a look at your deck.
Some tweaks to images, placement, and words can make a huge difference when pitching your business.
Looking to double your organic traffic and sales? Grow your audience, your email list, and customer-base with done-for-you content by SumoDash
Want to learn how to improve your site’s traffic and awareness for free?
We’ll send you regular tips and action steps on how you can improve the performance of your website’s traffic. Subscribe below!
This is the written version of my new talk, “Keeping it simple with CSS that scales”, which I first delivered at State of the Browser 2019.
It’s a very long read, so I recorded an audio version, too:
CSS has a weird place on the web today. There’s a lot of polarisation, with the opinion being seemingly split on “CSS sucks” and “CSS rules, learn it better, fools”.
I empathise with the “CSS rules” camp and I’ll explain why: I have a theory as to why the “CSS sucks” camp have the attitude that they do. I think it’s a combination of them over-engineering their CSS, not fully understanding the power of CSS and finally, approaching it like it is a language like JavaScript and expecting it to work in the same way.
What I’m going to do in this piece, is tackle the first bit and talk to you all about how we can simplify CSS to give us incredible power, while also being as low-tech as possible. The secret sauce is that most of the content isn’t actually about CSS, but that’ll all become clearer, later.
I absolutely hate it when we use the term, “Scale”. I think we are stuck with it though, just like we are stuck with “JAMstack”, “Serverless” and “performant”.
They’re all equally awful words, but one thing they do is create a common, recognisable construct for communication. As much as it pained me, it’s exactly why I named this talk “Keeping it simple with CSS that scales”. You probably knew before I even opened my gob that I’d be talking about working on massive codebases, which at some point in this talk, I’ll get to.
One thing that I do get pissed off about with “Scale”, though, is that gets slightly muddied when people use it as an excuse to over-engineer something.
Let’s take this common example. It usually gets said by some Bay Area tech bro:
We use a CSS-in-JS library because our product needs to scale
Let’s be honest for a moment, folks: most of the tepid guff that these tech bros are making will only scale as far as the bin, so it’s not much of a valid excuse, is it?
I’ll also be bold and straight-up say that I don’t think using scale as an excuse for over-engineering stuff—especially CSS—is acceptable, even for huge teams that work on huge products. Keep that in mind, because I hope, by the end of this session, you’re going to be in agreement with me.
I think we can focus on four key things today, and for the rest of this piece, I’m going to run us through them in detail with a little progress thing, so you know roughly how much longer you have to endure me for.
I could package this up as DCCS and really mop up the upvotes on that orange website, right?
One of my favourite books is The Hitchhiker’s Guide to the Galaxy. It’s about the earth being blown up to make way for a hyperspace highway and our main character, Arthur Dent proceeds to hitchhike around space with his alien guide, Ford Prefect.
I know, that’s a proper rubbish synopsis, but you all didn’t come here to read me chatting about this book.
The actual Hitchhiker’s Guide to the Galaxy is a sort of interactive encyclopaedia—well, interactive by 1979 standards…
The thing that has always resonated with me about the encyclopaedia is on the cover it says: “Don’t Panic”. The phrase is used so many times throughout the story, even when the context very much calls for panic.
I find myself really resonating with Ford Prefect, guiding Arthur Dent—a bumbling brit through the understandably mind-boggling adventure in space. Ford always approaches challenges in a calm, pragmatic way, just like the guide tells him to: “Don’t Panic”, and I think that’s a takeaway for us too.
In fact, when Arthur first gets the book handed to him, he says:
“I like the cover…‘Don’t Panic’. It’s the first helpful or intelligible thing any-body’s said to me all day.“
Right, anyway, I digress…“don’t panic”. It’s such good advice because when we panic, we make silly mistakes. Think about it: how many horrendous CSS hacks have you made when you’re up against-it in a project and you just needed to get it done.
A lot of people do it and it’s because we’re panicking. The deadline is looming and there’s no time to work out why our CSS is borked, so we throw !important at it until it’s fixed.
This is fine: we all do it, but what isn’t fine is technical debt. Often panic goes beyond a little hack here-and-there and escalates into something much more serious, like employing a CSS-in-JS framework, which is the equivalent of taking out a Wonga loan to pay of your house mortgage.
Incredibly high interest technical debt, which frustratingly, the developers who took it out, only pay a bit off, because that developer has probably already gone and got a new job. It’s mainly the user who takes the biggest hit, in terms of performance, and this boggles my mind when you consider what we have available to us with modern CSS.
Really, we’ve never had it better with CSS. We have CSS Grid with 93% support and Flexbox with 98.8% support. Approach using them with a safe progressive enhancement mindset and your layout is sorted. Job done. No worries.
We also get CSS Custom Properties which are native CSS variables. They’re incredibly handy for tokenising our CSS. Because they are also affected by the cascade, we can can override them, contextually. This makes them useful for theming, algorithms and display modes, such as dark mode.
:root{ --primary: #8e8e8e; }
.box{ background:var(--primary); }
.badge{ color:var(--primary); }
These are just a subset of powerful new features, but you can see how modern CSS is an incredibly powerful, effective styling tool. But it can come up a bit short, especially when you do have lots of CSS. So let’s look at how we can deal with that.
All of this native functionality is cool as heck, right? Let’s not forget native nesting too, but who does all of the work when we use that? Yep: the browser!
In most cases, that’s fine, although the thought of native CSS terrifies me—especially when we are already kludging up the browser with heavy JavaScript frameworks.
Basically, what I’m saying is we don’t have to abandon Sass because native language features are coming. It’s probably better to cautiously pre-compile your CSS and not force the browser to work as hard. It’s already working hard enough, re-rendering the DOM every time one piece of data changes (cough reactive frameworks cough), so why make it work harder just so you can have native nesting? It smells like developer experience over user experience to me.
We rush to throw stuff in the bin without thinking about the wider implications. Yeh, we’ll get nesting soon, but how is a low-powered device going to handle 5 levels of nesting with chained selectors? How is a low-powered device going to handle calculating the colour of a Custom Property that has been overridden by the cascade 5 times? It doesn’t matter how good the native tools are because if we keep throwing rubbish code at browsers, the users will suffer for it.
The beauty of Sass is that you can have the best of both worlds. You get cool stuff like nesting, but if you do it right, you can get nice, flat selectors. You also get components and if you want, you can set your project up to get multiple bundles. You can also lint your CSS at build time, so you know when stuff is getting out of hand, right in your terminal or GUI.
The most important thing is that with Sass—well, SCSS, you’re writing CSS still. SCSS is smart enough to just do what it needs to focus on and leave the rest of your CSS alone. To me, it feels like a pretty perfect setup.
We seem to be in an era where tools and methodologies are dreamed up to help avoid communicating with each other.
Generated CSS class names is a classic example of this. It’s a very typical problem. Some might at this point start having an existential crisis, or dream of machine-generated classnames, but check this out: we’re going to try this novel thing called talking:
How wholesome was that?? It’s amazing what happens when we actually talk to each other.
So-called “soft skills” which I prefer to call core skills are shunned in favour of being able to build your own linked-list or do fizz buzz on a whiteboard. This winds me up because to be an effective member of a team, you have to be able to communicate, whereas the only time you ever do fizz buzz in the real world is during that life-draining interview process…
Another incredible way to communicate that’s not actual talking is writing. I love writing and you probably noticed, I do a lot of it… In fact, I write almost everything down because I never know when I might need it. It also helps me to commit stuff to memory.
There’s a real value in writing everything down—especially in a large team of front-end developers, writing CSS—or any code, really. You can document your thought-process and explain how and why you’ve done things. You can write documentation, so if another developer picks up your code, they know what’s going on.
By documentation, I don’t mean that you have to write reams and reams of structured docs: I’m talking goddamn comments in your code.
Take this example:
.card{ background-color: #ffffff !important; }
If I landed on this I would be like “What the heck is going on here?”
How about this, though?
.card{
background-color: #ffffff !important; }
Now if I landed on this, I would be more like: “Huh, fair enough. I’ve got a spare bit of time: maybe I should see if I can work out the specificity issue”.
Good written communication can prevent unnecessary collisions between people, which can in turn, prevent expensive technical debt created by silly tools
A win-win in my books!
Right, enough of me yammering on about how to be functioning adults for a minute, because I’m this far into this piece and I’ve not talked about how to write CSS yet. Let’s do it.
I think consistency is key to scaling CSS (sorry I said scale again). Really, this is what these over-abstractions are trying to give you, in my opinion, they just go way too far.
I use a methodology that is sort of a devolution of BEM—a simplified version. I call it C-BEUT, which stands for Cascade, Block, Element, Utility and Token. It’s a proper rubbish name, I know, but it suits the rest of the awful stuff that we come up with for names, doesn’t it? I’ll explain how C-BEUT works.
The “C” in CSS stands for “Cascading”. Cascade is my favourite part of CSS because if you use it right, you can write very little CSS and get really good results in return. With this methodology, cascade is the first port of call. I set sensible defaults, higher level theming and typography as high up as I can. This gives us so much power.
The components can then be much more skeletal and deal only with how they are different than the globals, rather than dealing with everything.
This is your component, your card or your button. It’s the building block of your user interface. And that’s about it really—a construct and nothing else.
This is something that is a dependent of your block—a child element. It always lives in its parent block. A good example of this is within your card, you might have a card__image.
I try to keep the elemental classes as light as possible and use CSS algorithms to distribute content, rather than diving even deeper.
Again, this keeps our component files light and skeletal.
This is a class that does one job and does it well—like a plumber or a tin opener. An example of a utility class is a one that centers text or applies some top margin. Simple, low-fidelity tools.
Importantly, it means you can write common CSS and apply it where you need it, rather than repeating yourself over-and-over again.
This is actually a utility class, but a specific utility class that implements a design token and is often generated by a separate tool.
What’s a design token? they scream: I’ll let my pal Jina explain them, because they invented them!
Design Tokens are the visual atoms of the design system – specifically, they are named entities that store visual design attributes. We use them in place of hard–coded values in order to maintain a scalable and consistent visual system.
These little classes are great for decoupling the scaffold of your UI from the design system. It enables the system to live away from the code context that you are in, which gives it great power.
The .text-600 token is a reference to a size scale, just like this one off my website. It uses a major-third scale which gives us that lovely curve between sizes.
It’s used for everything, too:
Sizing text
Spacing elements
Adding inner padding
That’s it really and I won’t sit here, telling you that it’s the best way to write CSS, because it probably isn’t. What it is though is consistent. Just like BEM is or ITCSS is. At the end of the day, find something that works for your team, stick to it and document the hell out of it. Enable people in your team to make consistent decisions without slowing them down.
One thing I will say about methodologies is that if you find yourself restricted by one: invest the time to experiment with something different. Things change, so accept and embrace that fact. It’s why I now use C-BEUT, rather than BEM. I think BEM is amazing, but I also ran into issues where my modifiers were getting out of hand, so I sat back, simplified what I was trying to achieve, and settled on using utilities and tokens instead.
Always be open to change. We live in a dynamic world and work in an incredibly dynamic industry. If you stick to your guns too tightly, you’re probably going to end up causing more problems not just for yourself, but everyone else, in the future.
It’d be wild if I did a presentation, titled “Keeping it simple with CSS that scales” and didn’t talk about simplification, wouldn’t it?
Let’s start by talking about frameworks. Do you really need one? I don’t think that you do anymore.
Bootstrap is an incredibly powerful framework. It came at a time when we were learning how to build responsive websites and fighting relentless compatibility issues with browsers. It was a hellish time and Bootstrap, to its credit, made it all much easier. In fact, I’d go as far as saying that by accident, Bootstrap is one of the best design systems ever created.
Using Bootstrap today—when we have actual native tools for layout, such as grid and flex—is like using a sledgehammer to crack an egg. It can also bring complications of its own, too. Because of the way it is built, it uses very global selectors to aggressively set styles. This results in stuff like this again:
.card{ background-color: #ffffff !important; }
The same goes for most CSS frameworks to be honest. An example that gives me a heart attack is Tailwind CSS generates over 40 thousand lines of CSS by default (source). Bonkers.
If you have a solid methodology like BEM, ITSCSS, SMACSS or even C-BEUT, you could sprinkle a bit of a grid system with, y’know GRID, add some layout helpers with flex and you are golden.
This is the approach that we took with Every Layout—a book that I co-authored with my good pal, Heydon Pickering.
For our layouts, we find the most robust solution by simplifying and distilling our problem. We then hint the browser, using axioms and rudiments, rather than micro-manage it to allow it to call the shots. This results in a very solid layout system that works upwards with progressive enhancement at the forefront.
It’s been a really cool project and resonated with a lot of people, so go ahead and check it out.
On the subject of progressive enhancement, gather around and take a knee for a moment, everyone.
Don’t dismiss modern CSS because you have to support IE11.
It’s a ridiculous mindset and it pisses me off whenever someone shares a cool trick on Twitter and a Chad will pop into the comments with “WhAt aboUt IE 11 tHOuGh”.
Stop trying to pixel push your designs and instead, use progressive enhancement to create a sensible default that automatically improves where support is available.
Take this example: we’ve got a good ol’ three column grid. In times gone by, we’d employ some hacks not just to lay it out, but also make it look like this in every browser.
What I propose is that we take a step back, simplify the problem, and find a sensible baseline, and here it is: Good ol’ stacking with space. We can achieve 100% coverage with tiny amounts of CSS now.
This is a handy little grid system that uses minmax to distribute columns. It means we get a responsive grid with no media queries.
But, grid still isn’t quite full supported, but thanks to CSS’s nature, it’ll ignore stuff it doesn’t understand and move on, so we can add this below our grid code:
The last point on simplification and really, the last point of this presentation before I wrap up is “slow down”.
Seriously, slow down. I know it’s hard when you are working sprint-to-sprint or on a massive project, but trust me, when shit hits the fan, just slow down.
I came a cropper to this earlier in the year. I was working on a massive system/pattern library and we were hit with some early complications. What I should have done was stop, stepped back and put some critical thinking in place. But what I did instead was plough on through each sprint, each retro and each planning session until it got to the point where not slowing down had massive negative implications. I was cashing tech debt like I was earning air miles on it.
We had two or three grid systems, some fluid type and some utility driven type that conflicted and a card component that was pretty much a website in itself. If I had slowed down and stepped back, I could have seen these problems, but I didn’t. So seriously, slow down and you will save so much time.
I’ll leave you with this take-home advice: instead of moving fast and breaking things, move slowly and deliberately instead.