How To Customize WordPress Block Theme Cover Templates with Dynamic Post Feature Images

September 23rd, 2022 No comments

If we browse the WordPress theme directory, a majority of themes showcase cover images. It is a feature in popular demand. The cover page trend is true even in the block theme directory screenshots as well.

Let’s consider the following example from Twenty Twenty (a classic theme) which includes a cover template that can be used to display both in single post and page, where the post’s featured image displays at the top that stretches across the browser screen, with post title and other desired meta data below. Cover templates allow creating content that stands out from the traditional constraints of displaying content.

Screenshot showing a single post with Twenty Twenty cover template.

Creating cover templates currently requires writing PHP code as captured here in the Twenty Twenty default theme’s cover template. If we look at the template-parts/content-cover.php file, it contains the code for displaying content when the cover-template is used.

Thus, it is not possible to create a customized cover page if you do not possess a deep knowledge of PHP. For many ordinary WordPress users, the only option is to use plugin like Custom Post Type UI as described in this short video.

Cover sections in block themes

Since WordPress 5.8, theme authors could create custom templates (like single post, author, category, and others) with a top hero section using block editor cover block and bundled into their themes with minimal or no code.

Before diving into how top large cover sections are created in block themes templates, let’s briefly look at the two block themes Twenty Twenty-Two and Wabi by Rich Tabor (full review here).

Screenshot showing cover page thumbnails of Twenty Twenty-Two (left) and Wabi (right) themes.

Behind-the-scenes, Twenty Twenty-Two implements a large header by adding a hidden image stored as a pattern in the header-dark-large parts. Whereas, in the Wabi theme, the large header background color in a single post is implemented with accent background colors and a 50px height spacer block (lines: 5-9). The accent colors are managed by the assets/js/accent-colors.js file.

Many others chose to create a top cover section by using cover block, which allowed users to change the background color and add a static image from Media Library or upload from media devices – without writing any code. With this approach, images from the post featured image block had to be added manually to each single post if you wanted to have the post featured image as the background image in single posts.

Cover Blocks with dynamic post featured image

WordPress 6.0 made available another cool featured image cover blocks feature, which allows use of the featured image of any post or page as the background image in the cover block.

In the following short video, Automattic engineers discuss adding featured images to cover blocks with an example from Archeo theme:

The image block including post featured image block can be further customized using duotone color in theme.json as discussed in this short Connecting The Dots YouTube video (Automattic’s Anne McCarthy).

Use case examples (Wei, Bright Mode)

If we browse the thumbnail images in the block theme directory, we see a majority of them include large cover header sections. If we dig into their template files, they make use of cover blocks with static image background.

Some recently developed themes are using cover blocks with the dynamic post featured image background (e.g., Archeo, Wei, Frost, Bright Mode, etc.). A brief overview of the new feature is available in this short GitHub video.

Screenshot showing cover page thumbnails of Wei (left) and Bright-mode (right) themes.

Combining dynamic accent colors features of Wabi theme with cover and post featured image blocks, Rich Tabor further expands his creativity in his new Wei theme (full review available here) to display dynamic cover images from a single post.

In his Wei announcement post, Rich Tabor writes: “Behind-the-scenes, the single.html template is using a Cover block that leverages the post’s featured image. Then the duotone is applied by the color scheme assigned to the post. This way, just about any image will look fine”.

If you would like to dig deeper into the Wei theme’s header cover block and learn how to create your own, here is a short video from Fränk Klein (WP Development Courses) who explains step-by-step how it was created.

Similar to the Wei theme, Brian Gardner also makes use of cover block with post featured image block in his recent Bright Mode theme to display standout contents with vibrant colors.

Brian told WPTavern: “he loves most about the theme is the way the Cover Block is used on single pages. It pulls the featured image into the Cover block and also offers custom block styles for shadows and full-height options. […] I feel as though this really presents what’s possible with modern WordPress.”

For more detail, here is its demo site and full review of Brian’s Bright Mode theme.

Designing complex layouts with block editor

Recently, WordPress launched a new block editor designed landing homepage and a download page. The announcement attracted mixed reactions from its readers, including from Matt Mullenweg (Automattic) who commented on the 33-days taken to design and launch such a “simple page”. You can find additional behind the scene discussions here.

In response, Jamie Marsland of Pootlepress created this YouTube video where he reproduces a nearly identical homepage in nearly 20 minutes.

Commenting on Marsland video, Sarah Gooding of WP Travern writes: “He is what one might describe as a power user with the block editor. He can quickly shuffle rows, columns, and groups around, adjusting padding and margins as necessary, and assign each section the corresponding color for the design. At this point, this is not something most average WordPress users could do.”

Though the block editor has come a long way, there are still growing pain points to most theme developers and ordinary users to create and design complex layouts with it.

Adding enhancement to TT2 Gopher blocks

In this section, I will walk you through how I added enhancements to the TT2 Gopher Blocks theme that I referenced in my previous article. Inspired by cover blocks from themes that I described earlier, I wanted to add three cover templates (author, category, and single-cover) to the theme.

While browsing websites, we notice two types of cover headers. The mostly observed header is cover section blended with the site header (site title and top navigation) into the cover block (e.g., Twenty Twenty, Twenty Twenty-Two, Wei, Wabi, Frost, Bright Mode, etc.). We also find header cover section which is not blended with site header and positioned just underneath, such as this BBC Future website. For TT2 Gopher blocks theme, I opted for the latter.

Creating cover header patterns

First, let’s create cover header patterns for author, single, and others (categories, tags) templates using cover blocks. Then we will convert them into patterns (as described here previously) and call the respective header cover patterns into the templates.

If you are familiar to working with the block editor, design your header section using cover blocks in the site editor and then convert the cover header code into patterns. However, if you are not familiar with FSE editor, then the easiest way is to copy patterns from the patterns directory in a post, make necessary modification and convert it into a pattern.

In my previous CSS-Tricks article, I discussed in detail on creating and using block patterns. Here is a brief overview of the workflow that I am using to create the single post cover header pattern:

Single post cover header pattern

Step 1: Using FSE interface, let’s create a new blank file and start building block structure as shown on the left panel.

Screenshot of the WordPress UI with the Full Site Editor. A block is being assembled with post date, categories, and post title.

Alternatively, this could be done in a post or page first, and then copy and paste the markup into a pattern file, later.

Step 2: Next, to covert the above markup into a pattern, first we should copy its code markup and paste into a new /patterns/header-single-cover.php in our code editor. We should also add required pattern file header markup (e.g., title, slug, categories, inserter, etc.).

Here is the entire code of the /patterns/header-single-cover.php file:

<?php
    /**
     * Title: Header cover single
     * Slug: tt2gopher/header-cover-single
     * Categories: tt2gopher-header
     * Block Types: core/template-part/header
     * inserter: yes
     */
?>
    <!-- wp:cover {"url":"https://pd.w.org/2022/08/15062ed5f5707b5c5.85694718-2048x1536.jpg","id":100,"dimRatio":0,"overlayColor":"foreground","focalPoint":{"x":"0.40","y":"0.37"},"minHeight":50,"minHeightUnit":"vh","isDark":false,"align":"full","style":{"color":{"duotone":["#000000","#00a5ff"]},"spacing":{"margin":{"top":"0px","bottom":"0px"}}}} -->
    <div class="wp-block-cover alignfull is-light" style="margin-top:0px;margin-bottom:0px;min-height:50vh"><span aria-hidden="true" class="wp-block-cover__background has-foreground-background-color has-background-dim-0 has-background-dim"></span><img class="wp-block-cover__image-background wp-image-100" alt="" src="https://pd.w.org/2022/08/15062ed5f5707b5c5.85694718-2048x1536.jpg" style="object-position:40% 37%" data-object-fit="cover" data-object-position="40% 37%"/><div class="wp-block-cover__inner-container"><!-- wp:group {"style":{"elements":{"link":{"color":{"text":"var:preset|color|base"}}},"spacing":{"blockGap":"10px"}},"textColor":"base","layout":{"wideSize":"800px"}} -->
    <div class="wp-block-group has-base-color has-text-color has-link-color"><!-- wp:group {"style":{"spacing":{"blockGap":"10px"}},"textColor":"primary","layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"center"},"fontSize":"small"} -->
    <div class="wp-block-group has-primary-color has-text-color has-small-font-size"><!-- wp:post-date {"textColor":"foreground"} /-->
    
    <!-- wp:paragraph -->
    <p>|</p>
    <!-- /wp:paragraph -->
    
    <!-- wp:post-terms {"term":"category","style":{"elements":{"link":{"color":{"text":"var:preset|color|foreground"}}}}} /--></div>
    <!-- /wp:group -->
    
    <!-- wp:post-title {"textAlign":"center","level":1,"style":{"typography":{"fontStyle":"normal","fontWeight":"400"}},"textColor":"foreground","fontSize":"max-60"} /--></div>
    <!-- /wp:group --></div></div>
    <!-- /wp:cover -->

Step 3: For this demo, I have used this image from photos directory as a filler background image, and applied the Midnight duotone color. To use post featured image dynamically, we should add "useFeaturedImage":true in the cover block by replacing the above filler image link just before the "dimRatio":50 such that the line 10 should look like the following:

<!-- wp:cover {"useFeaturedImage":true,"dimRatio":0,"overlayColor":"foreground","focalPoint":{"x":"0.40","y":"0.37"},"minHeight":50,"minHeightUnit":"vh","isDark":false,"align":"full","style":{"color":{"duotone":["#000000","#00a5ff"]},"spacing":{"margin":{"top":"0px","bottom":"0px"}}}} -->

Alternatively, the filler image could also be changed by clicking Replace and selecting Use featured image option:

Screenshot of the WordPress UI with ‘Replace’ and ‘Use featured image’ selected.

Now, the header cover patterns should be visible in the patterns inserter panel for use anywhere in the templates, posts, and pages.

Archive cover headers

Inspired by this WP Tavern post and a step-by-step walkthrough to create an author template header, I wanted to create a similar cover header and add to TT2 Gopher theme, too.

First, let’s create the archive cover header pattern for author.html the template as well, following the above workflow. In this case, I am creating this in a new blank page, by adding blocks (as shown below in list view):

Screenshot of the WordPress UI for an Author page using a single post header cover.

In the background for the cover, I used the same image used in the single post header cover.

Because we would like to display a short author biography on the author block, a biographical statement should also be added to the user profile page, or else a blank space will be displayed in the front-end.

The following is the markup code of the header-author-cover, that we will use pattern, in the next step:

    <!-- wp:cover {"url":"https://pd.w.org/2022/03/8256241eff74ef542.61868565.jpeg","id":226,"dimRatio":10,"focalPoint":{"x":"0.50","y":"0.75"},"minHeight":200,"minHeightUnit":"px","isDark":false,"align":"full","style":{"color":{"duotone":["#000000","#00a5ff"]}}} -->
    <div class="wp-block-cover alignfull is-light" style="min-height:200px"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-10 has-background-dim"></span><img class="wp-block-cover__image-background wp-image-226" alt="" src="https://pd.w.org/2022/03/8256241eff74ef542.61868565.jpeg" style="object-position:50% 75%" data-object-fit="cover" data-object-position="50% 75%"/><div class="wp-block-cover__inner-container"><!-- wp:group {"layout":{"inherit":true}} -->
    <div class="wp-block-group"><!-- wp:group {"style":{"spacing":{"padding":{"top":"1rem","right":"2rem","bottom":"1rem","left":"2rem"}}},"layout":{"type":"flex","flexWrap":"nowrap"}} -->
    <div class="wp-block-group" style="padding-top:1rem;padding-right:2rem;padding-bottom:1rem;padding-left:2rem"><!-- wp:avatar {"size":70,"isLink":true,"align":"right","style":{"border":{"radius":"9999px"}}} /-->
    
    <!-- wp:group -->
    <div class="wp-block-group"><!-- wp:group {"style":{"spacing":{"blockGap":"6px"}},"layout":{"type":"flex"},"fontSize":"large"} -->
    <div class="wp-block-group has-large-font-size"><!-- wp:paragraph {"textColor":"foreground","fontSize":"large"} -->
    <p class="has-foreground-color has-text-color has-large-font-size">Published by:</p>
    <!-- /wp:paragraph -->
    
    <!-- wp:post-author-name {"isLink":true,"style":{"typography":{"fontStyle":"large","fontWeight":"600"},"elements":{"link":{"color":{"text":"var:preset|color|background"}}}},"textColor":"foreground"} /--></div>
    <!-- /wp:group -->
    
    <!-- wp:post-author-biography {"textColor":"foreground","fontSize":"small"} /-->
    
    <!-- wp:separator {"backgroundColor":"foreground"} -->
    <hr class="wp-block-separator has-text-color has-foreground-color has-alpha-channel-opacity has-foreground-background-color has-background"/>
    <!-- /wp:separator --></div>
    <!-- /wp:group --></div>
    <!-- /wp:group --></div>
    <!-- /wp:group --></div></div>
    <!-- /wp:cover -->

To covert the markup into a header-author-cover pattern, we should add the required pattern file header markup as described earlier. By editing the header-author-cover.php pattern, we can create similar header covers for tags, taxonomy, and other custom templates.

The header-category-cover.php pattern for my category.html template is available on GitHub.

Creating Templates with header cover blocks

WordPress 6.0 and the recent Gutenberg 13.7 extended template creating features into the block editor, thus making it possible for many WordPress users, without deep knowledge of coding, to create their customized templates.

For more detailed information and use cases, here is a thorough customization note by Justin Tadlock.

Block editor allows creating various types of templates, including cover templates. Let’s briefly overview how combining cover block and post featured image block with new template UI makes easy to create various types of cover custom templates even with no or low coding skills.

Screenshot of the WordPress UI displaying available templates provided by TT2 Gopher Blocks – Single, Page, Index, Home, 404, Blank, and Archive.

Creating templates has been made much easier with Gutenberg 13.7. How to create block templates with codes and in site editor is described in the Theme handbook and in my previous article.

Author template with cover block

Top (header section) markup of the author.html template is shown below (line 6):

    <!-- wp:template-part {"slug":"header-small-dark","theme":"TT2-GOPHER-V2","tagName":"header"} /-->
    
    <!-- wp:group {"tagName":"main","style":{"spacing":{"margin":{"top":"0","bottom":"0px"},"padding":{"bottom":"80px"},"blockGap":"0px"}},"className":"site-content"} -->
    <main class="wp-block-group site-content" style="margin-top:0;margin-bottom:0px;padding-bottom:80px">
    
        <!-- wp:pattern {"slug":"tt2gopher/header-author-cover"} /-->
    
    ...
    ...
    ...
    <!-- /wp:group -->
    ...

Here are screenshots of cover headers for the author.html and category.html templates:

Screenshot of Author Page header (left) with author name, avatar, and biography. And screenshot of Category Page header (right).

The entire code for both templates is available on GitHub.

Single post with cover block

To display cover block in our single post, we have to call the header-cover-single pattern below the header section (line 3):

    <!-- wp:template-part {"slug":"header-small-dark","tagName":"header"} /-->
    
     <!-- wp:pattern {"slug":"tt2gopher/header-cover-single"} /-->
    
    <!-- wp:spacer {"height":32} -->
    <div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>
    <!-- /wp:spacer -->
    ....
    ....
    ....

Here is a screen capture showing the front-end view of the single post with the header cover section:

Screenshot of TT2 Gopher Blocks Single Post with Header Cover Section Pattern.

The entire single-cover.html template is available on GitHub.

You can find additional step-by-step walkthrough tutorials on creating a hero header post section and using post featured image background cover blocks on WP Tavern and Full Site Editing website.

There you have it!

Helpful Resources

Featured image cover block

Blog posts


Even though the block themes, in general, are getting lots of pushback from WordPress community members, in my opinion, they are the future of WordPress, too. With block themes, amateur theme authors, without the deep coding skills and mastery of PHP and JavaScript languages, can now create themes with complex layouts with a hero cover section as described in this article combined with patterns and style variations.

As an early Gutenberg user, I couldn’t be more excited with the new theming tools like create block theme plugin and others which allow theme authors to achieve the following directly from block editor UI without writing any code:

  • (i) create
  • (ii) overwrite theme files and export
  • (iii) generate blank or a child theme, and
  • (iv) modify and save style variation of the current theme

Additionally, the recent iterations of the Gutenberg plugin allow enabling fluid typography and layout alignments and other stylistic controls using only theme.json file without JavaScript and a line of CSS rules.

Thank you for reading and share your comments and thoughts below!


How To Customize WordPress Block Theme Cover Templates with Dynamic Post Feature Images originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.

Categories: Designing, Others Tags:

4 Ways to Recruit for Your Team’s Most Niche Roles

September 23rd, 2022 No comments

Every business is unique. And because of this, every team is unique too. Within your own company, you may very well have various team structures, staffing protocols, and managing principles. This makes sense, as different roles and responsibilities have different needs from an organizational point of view. 

Like it or not, there is no cookie cutter method for recruiting and staffing the best team. It takes work and can be a constantly evolving process. Recruiting in itself is a challenging task, particularly now during the era of The Great Resignation. More and more employees are rightfully asking for very specific accommodations. They want to work for companies that value them first as human beings and second as dedicated employees. 

With all this in mind, recruiting specific talent for your team isn’t easy. Certain roles like content creators and marketing managers may be more readily recruitable. On the other hand, roles like front end developers and designers can be more tricky to find. If you’re in this sticky position of hiring individuals for more niche titles, keep reading. Below are four ways to recruit specific talent for your team’s most niche roles. 

1. Ask for Assistance

First and foremost, don’t be afraid to ask for assistance. It’s also important to ask far and wide. First, ask the hiring manager what they think is the best way to find the potential new employee. They may have experience in finding these types of recruits from previous roles. The hiring manager may also have a network to tap into that could be useful for your hiring team. 

Second, lean on resources for your specific needs. Engineering staffing agencies, for instance, can assist in finding top engineering talent based on their diverse pool of individuals looking for jobs. These types of agencies can help HR teams and hiring managers find the perfect match. This can be beneficial for startups, who may not have the namesake yet, to be found by interested employees. Well known companies also stand to benefit as staffing agencies are also a great resource for HR teams who need to hire multiple individuals within the same field. 

2. Tap into Social Media

One of the first places someone turns to when they are seeking a new job opportunity is social media. They want to see what types of positions are available and what kinds of benefits are being offered. Your recruiters should be on social media, particularly sites like LinkedIn, posting about new offerings weekly. Creating this kind of buzz online ensures that your company is putting the word out that you are hiring. 

In addition to sites like LinkedIn, it’s also important to post job offerings on other platforms such as Twitter, Facebook, and even Instagram. Word of mouth is another key aspect of hiring, and someone who sees a niche role may share it with one of their friends or family members. Again, it’s all about creating awareness. If you don’t share publicly that you are hiring for these niche roles, nobody will know that you are in need of a full stack developer, for example. 

3. Offer an Employee Referral Incentive 

Your current employees likely know the top talent. Many have had prior experiences before coming to work at your company. And with these experiences, they have likely met some incredible people that may be great matches for your company. In order to get these referrals, it can be beneficial to offer an employee referral incentive. These types of incentives can be a reason for employees to share about open positions on their own social channels too. 

The key to creating this incentive is to make it as easy as possible for referrals to happen. Luckily, there are several software platforms and tools that can help streamline this process. Let you employees know what the incentive is, whether it is an added bonus to their paycheck or extra vacation days. Also, overly communicate with your employees when a niche position is available. You may even think about upping the incentive for filling more challenging roles — an extra incentive is always going to be welcome!  

4. Look Internally

Yes, certain niche roles like those in the designer field or engineering world require a specific set of skills. But perhaps you have a new role for a “never-been-done-before” position. In these cases, it’s not a bad idea to look internally. Your current employees know the most about the company, including how to navigate current processes and set up new ones. They understand what’s expected from the team and the company’s overarching goals and values. 

If you decide to look internally, be sure to still follow a proper interview process. You likely will also want to have external candidates to interview along with internal ones. This can help the hiring team compare and contrast the necessary skills. There are always benefits to hiring internally, mainly that it can lead to a quicker transition process and more dedicated staff. Your employees as a whole may be more dedicated to work for a company where internal shifts are not only possible but valued. 

Takeaways

Hiring is not an easy process. Again, it takes time to find true talent. For niche roles, it can take a lot longer to find someone that can do the job well and wants to work for your company. Don’t give up just because it takes longer than usual. The right individual is out there; it’s just a matter of finding them! 

By utilizing these tips, recruiters will have a better chance of finding the best possible employee as quickly as possible. Having a plan and leaning on different resources, including current employees, are helpful tactics to utilize. Also, know that other companies are in the same boat. Speak with other company and industry leaders to get a sense of how they are recruiting. Because at the end of the day, the more people that know you are hiring the better chances you have of finding your dream candidate.

The post 4 Ways to Recruit for Your Team’s Most Niche Roles appeared first on noupe.

Categories: Others Tags:

Lessons Learned As A Designer-Founder

September 23rd, 2022 No comments

In the quarter-century I’ve been a product designer, design has matured. We’ve developed tools and practices that allow us to work faster, better, and more in concert with engineers and product managers. Things are a lot less chaotic than they used to be.

But with that change comes the process. I’ve written elsewhere about the dangers of too much process; in the years I spent building the design practice at Heap, I tested and evolved my ideas around Pragmatic Design and its potential to reduce process. I encouraged lower-fidelity artifacts; design briefs instead of endless mockups; product-quality reviews instead of design reviews; and I pushed for early, ongoing collaboration between Design, Product, and Engineering. The results were encouraging: we got more done with a smaller, scrappier team.

In 2020 I left Heap to found Miter, a startup whose mission is deceptively simple: make meetings better. And if Heap was a testing ground for pragmatic design, Miter’s been a crucible for extreme pragmatism: nothing is scrappier than being the only designer, the only PM, and the only engineer. What process is worth keeping? What can be optimized and what can’t? And what needs to change again as we build a team?

That’s useful context if you’re a designer-founder yourself. Still, even if you’re not, it’s valuable to think about why each part of the design process exists and how (and whether) we can optimize it in various ways to be more efficient and better collaborators. So whether you’re designing on a team of ten or ten thousand, this post is for you.

Multiple Hats

Founder or not, designers are often multidisciplinary. Many of us do some PM’ing or make a little prototype if we’re technical. If you’re like me, you enjoy that breadth and chafe a bit when forced to wear just one hat.

What makes being multidisciplinary an advantage? To begin with, it represents a broader design toolkit. With a little engineering knowledge, you can build working prototypes or even design directly in the codebase if that’s the most efficient way to experiment. And small, straightforward projects can sometimes go straight from brain to product:

As a team grows, understanding diverse perspectives can improve collaboration and results. We can’t predict all the twists and turns our designs will take as they’re built, no matter how diligent we are at thinking through edge cases. I’ve always advocated for design and engineering to proceed in lockstep throughout the process; being a lone designer-engineer has reminded me just how powerful that is. My designs can change radically long after they’re “done.” That’s easy to deal with when it’s just me but feasible to manage as a team, too.

To put it simply, you can substitute a little conversation for a lot of process. And that’s easier when your designers speak a little Engineer, your engineers speak a little Designer, and everybody speaks a little Product. In a quick conversation, you can make trade-offs, generate creative solutions, and reprioritize the backlog as your understanding of ROI evolves.

For example, Miter was built to work whether you’re signed in or not: if you have the URL for a meeting, you can join and participate without an account. That’s a strength for us, and when we set out to build our new Dynamics facilitation feature, we figured that would remain true. But during one sprint planning, Nico — our first engineer — raised some questions about how we’d distinguish among anonymous users given we’re unable to identify them; doing so is central to Dynamics in a way it’s not elsewhere.

It was doable, but none of the options was easy, so I made the call (Product hat) to make the feature signed-in-only. Nico disabled the button for signed-out users; I recognized we needed to give users a bit more feedback (Design hat), decided that was worth doing before launch (Product hat), and spent a couple of hours implementing it (Engineering hat).

Wear Your Hats Carefully

Designing in code can be efficient, but be careful: it can hurt the design, too. You know all those arguments designers have with engineers? There’s a reason for them. When wearing your engineer hat, you’re looking to simplify: reducing code paths, avoiding async situations that could yield race conditions, and so on. But sometimes, those are the very things that make a design great. As I implement, I find myself pushing back on my designer self, and (because the engineer self is doing the work) the designer self tends to lose. I have to step back periodically, put the design hat on, and consider.

That separation is easy to maintain if you do all your design in design tools, but I don’t recommend going that far. Sometimes things are straightforward enough (as in the Add Task example above) that it’s just not worth the time to design separately. The key is to recognize when you need to be thinking in design mode vs. engineer mode.

Broadcast Your Hats

It’s valuable not only to understand which hat you’re wearing but also to communicate it to others.

One afternoon my co-founder wanted help with a marketing email. I started with the usual designer questions: what’s the goal of this project? What does success look like? All good questions, but he didn’t realize which hat I was wearing. Instead of the curious designer understanding project requirements, he heard the skeptical CEO challenging them. After a few tense moments, we figured it out, and I’ve been more careful to clarify my hat up front.

This matters most when you’re in a leadership role since power dynamics are at play. The CEO of a startup I advised once took this a step further with actual hats: on his desk, he had two baseball caps, one labeled “CEO” and one labeled “Product.”

Know Your Environment

A multidisciplinary approach isn’t always a path to success. Some teams value specialization and want people to stay in their lanes, especially at larger companies. I once received feedback that I needed to “act more like a designer.” It was hard to hear at the moment, but ultimately I concluded it was more about my fit with that team than anything I was doing wrong.

Takeaway

On any team, it’s valuable for everyone to understand each other’s specialties. Actually wearing all those hats may be less valuable at larger companies, but the fastest way to understand is doing. I’d encourage any designer to learn to code and to think holistically about roadmaps and launches as a PM would. How you deploy that knowledge will depend on your team’s dynamic.

The Bare Minimum Design Process

As designers, so much of what we do is communicating and convincing. We run user tests to justify our decisions. We create multiple options because it’s expected. We write up specs, make flow diagrams, or mock every state, so engineers get the details right. We present in critique to get feedback, but also because our peers want a venue to question our decisions.

But for much of Miter’s existence, none of that has been necessary — the only person I really need to communicate with or convince has been myself. So what’s left? What pieces of the process are still valuable?

Rapid Sketching

In general, the design goes from broad and low-fidelity to detailed and high-fidelity: bullet points to sketches to wireframes to mockups to prototypes to implementation. Though, of course, we rarely do all of that.

In the early stages, I’m a big fan of paper sketches. It’s been years since I accepted their messiness and realized how much faster and more powerful they can be than wireframes (which I rarely use anymore). I even advocate for their use in executive reviews.

In some ways, sketches are more powerful when you are your only audience because they don’t even have to be legible. What’s that weird blob in the corner? Doesn’t matter, as long as you know. You can tear through permutations quickly, which means I sketch regularly but briefly before moving on to higher-fidelity methods.

Design Briefs

I conceived of the Design Brief when I was at Heap as a substitute both for longer design docs and unnecessarily-exhaustive mockups. We used it (along with sketches) as a fast, early artifact to ground cross-functional discussions — from scoping to prioritization to leadership reviews — before spending significant time on the details.

I still use design briefs on larger projects. They don’t take long, and the act of writing them helps me think — taking high-level, hand-wavy ideas to a more practical level. They serve as a record of what I was thinking and why to help clarify for my future self. And we do sometimes conduct design reviews.

I also write product briefs and encourage engineers to write engineering briefs. Both have worked well. The key is not to go overboard, as they’re called “briefs” for a reason. And while it’s useful to have templates for them, I treat those as guidelines rather than requirements.

Hero Mockups

I find mockups to be an indispensable part of the design process. For significant changes and new functionality, it’s much faster to mock it up than to build even a semi-functional prototype. But I only do “hero” mockups — key states of whatever I’m designing rather than a comprehensive set.

As our team grows, those will probably expand, but — just as we did at Heap — I’ll continue to rely on the design brief, real-time conversations, and design-minded engineers rather than go crazy with mocks.

Design System

Miter does have a design system of sorts. I’ve built an extensive set of reusable Figma components, as well as global colors and text styles that I try to use consistently across mocks.

Why bother, with nobody else on the team? Because change is easier, safer, and — most importantly — faster when it’s centralized. If I want to make all our buttons square tomorrow, I can do it once and have it propagate everywhere.

Not everything deserves a component. Sometimes it’s just too early, too prone to change. So when’s the right time to turn one-off work into components? I try to do it when I recognize that a component I built for Project N is needed in Project N+1. (This would be much easier if Figma behaved as advertised, and one could cut-and-paste components from individual files to your library. Hint hint.)

This sort of centralization is even more important in code, and when our mocks and codebase disagree, it’s often the code that wins. To be clear: I don’t see that as a problem. Our canonical style guide is the Global.less file with all our CSS variables. We have one and only one button component, and we use it everywhere. When I write and review code, I’m ruthless about centralization because it’s what will ensure things remain consistent and easy to change.

Five years from now, I don’t want to be a company where simple design improvements get killed because they’d have to be implemented five times over.

Critiques & Reviews

I thrive on feedback; I can’t do my job without it. We don’t have designers on the team, but we do have design-minded engineers and a COO who can critique our UX from both a product and a go-to-market perspective. I do a lot of “What do you think about this?” on Slack, and occasionally, I schedule design reviews.

That said, I miss having other designers around when we brainstorm or critique. I look forward to the point when I can justify hiring a designer to fill out that conversation. In the meantime, there’s no silver bullet. I love the idea of gathering a group of solo designers to review each other’s work across companies, but it’s not something I’ve actually found the time to do. What I do do is take the time to explain my rationale — and design principles in general — to the rest of the team, so over time, they’ll be critiquing from a more and more informed perspective.

Research: Focus On The 20%

Working elsewhere, I’ve been frustrated by the state of user research. It’s underfunded. It’s used to settle cross-functional debates rather than to answer real questions about users. Foundational work takes a back seat to tactical studies. Usability tests are misinterpreted as feedback, so we end up doing what users tell us rather than determining what they need. And too often, research findings are dropped on the floor due to timelines.

At Miter, we’re still too small to hire a dedicated researcher, so I’m responsible for whatever research we do. And because my time is so split, that research really, really needs to count. In making those trade-offs, I rely on a simple truth: designers know how to design. That may seem self-evident, but I think we all forget it sometimes and assume anything that hasn’t been tested has an equal probability of being a disaster.

80% of what a good designer does should be usable. Just as importantly, a good designer has a sense of what lies in that other 20%. I like to think in terms of “UX Risk”: what are the bits of my design that need testing? What’s bold, unique, unknown, ambiguous?

Of course I make mistakes in the other 80%, and it’s essential to watch for unexpected usability issues in the data. For instance, a couple of months ago, we noticed several users had interacted with Miter’s pre-meeting screen but never hit the Start button to start the meeting. We came up with a hypothesis: people thought our topic list was a note-taking UI. Digging into user sessions and looking at average topic length confirmed it. Thankfully, it was an easy fix: make the topics more topic-like and less note-like.

I suspect we’ve done more user research than a typical early-stage startup, and other founders might question that. Still, as we head into our next round of fundraising, I can tell you it’s given me the ability to speak about our target audience and their needs with far more confidence.

Takeaway

What strikes me about my “bare minimum” design process is, in fact, how many of the traditional artifacts I still use. There’s very little that I would do as part of a larger team that I don’t do on my own. The tools I use to explore and iterate are the same ones I’d use to communicate and convince. The biggest difference is in comprehensiveness. So, what can that tell us?

  1. We have a broad array of tools at our disposal. Use them!
    But, use the right tool for the job. Not every project needs every type of artifact. (This is true whether your team uses Agile, “waterfall,” or some other approach.)
  2. Low fidelity can be better than no fidelity.
    I’ve always advocated for low fidelity. It’s faster, easier, and in cross-functional situations, can help focus stakeholders on the forest rather than the trees. But skipping over this phase altogether, while tempting when you’re on your own, can be dangerous. A few minutes spent sketching or writing bullet points can clarify and solidify your design at a stage where that’s extremely low cost.
  3. Know your reasons.
    Are you mocking this up because you need it or because your stakeholders do? Neither is necessarily bad, but you might want to approach the work differently depending. Or put another way: a mockup whose target audience is you has very different requirements than one whose target is a slide in an All-Hands meeting.

Pitfalls Of The Designer-Founder

The designer’s curse is we see pixels: if the alignment is off, if the border is fuzzy, if the context is lost without an animated transition, and so on. We see it when nobody else does, and it bothers us.

The curse of the early-stage founder, meanwhile, is a lack of resources. My team has greater agility than it will ever have again, but we can’t do more than one or two things at a time.

Those curses come into conflict. On the one hand, nobody can stop you from polishing your product into oblivion. And our industry is littered with the corpses of “design-led” companies that built beautiful things nobody wanted.

On the other hand, a design-led company’s superpower is great design. Unlike your competitors, you can present a polished, elegant, usable face to the world, and that’s worth doing.

So it’s a balance. Wear the design hat, revel in it, and sweat the details. And then swap it for the product hat and keep that detail work under control. I’ve hired engineers who are design-centric enough that I’ve had to stop them from polishing things further, and honestly, that’s probably a good dynamic.

As the leader, if you nitpick the details, then the details will get fixed. And that’s marvelous, but it also carries a cost.

What’s your experience been optimizing the design process? Have you found success, or challenges, as a multidisciplinary designer? I’d love to hear about it! And of course, if you wish your meeting could be better, check out Miter and let me know what you think!

Categories: Others Tags:

How to Start a Hobby Business: 7 Tips to Succeed

September 22nd, 2022 No comments

Do you not feel satisfied with your current job? Do you feel trapped and struggle to be productive every day? 

You’re yearning to do something that you’re passionate about and clearly, your job is far from it. 

How about turning your hobby into a business and starting a hobby business?

Doing what you love and enjoy is a rewarding experience and improves your quality of life. However, turning your hobby into a business doesn’t guarantee success or the lack of stress for that matter. 

Let’s take a look at seven tips to help you take the plunge and start a hobby business.

1. Establish your goal

Before you start out on your entrepreneurial venture, strategize and ask yourself why you would want to take this leap. 

  • Is this a part-time side business for extra money? 
  • Do you know what or how you would want to sell your products or services? 
  • Are you planning on making this your main mode of income? 
  • What is the end result and how would you achieve it? 

These are important questions you must consider when you start your own hobby business. Whether it’s turning 100 dollars into 1000 dollars or 1000 dollars into 10 000 dollars, having a goal and understanding your motivation behind it will help you better focus your efforts on achieving it.

Establishing a goal also gives your mission purpose and helps you plan accordingly. 

2. Assess the profitability of your hobby

If you want to start a hobby business, you need to know how profitable it can be. 

For example, if you are a lifestyle photographer and your niche business idea is to sell the images you click, you need to know if these items are something that people care about. 

The demand for your products or services is very crucial in developing a successful business. If there isn’t any audience for what you want to sell, there would be no value to set up this business. 

It’s a good idea to do market research, assess your existing competitors, perform a SWOT analysis of your idea and narrow down on your target audience. 

If you’re selling a product, look up marketplaces such as Amazon and eBay to understand if there is a market for them due to affiliate marketing challenges. This exercise will give you a clear idea about what people are looking for, what defines your online business’ niche target market and how you can differentiate your product. 

3. Build a business plan

No business functions like magic and you have to work painstakingly for it to be on top. That is why, building a fool-proof business plan is a must for every entrepreneur as it will help you think through every detail, the pros and cons, all the ways to monetize, and the success rate of your potential business. 

Business plans are also very useful when you are applying for funding. They help you show your investors what your business is about, what your goals are and a brief overview of how you plan on making it a success. 

4. Strengthen your online presence

Considering that 97% of consumers use the internet to find local businesses, having an online presence is non-negotiable for businesses today.

Whether you choose to create a blog or an Instagram business profile, what matters is using the medium to create brand awareness, educate your target audience about your product or service and engage with them. 

Apart from improving brand visibility, having an online presence also adds to the credibility of your business and helps you appeal to a wider audience. 

5. Grow your network

Having a strong online presence is important but networking comes with its own set of benefits. 

Find social media groups, forums and events that cater to your specific business niche. Doing this will help you meet a lot of like-minded professionals. These can be your potential customers or even those who you can collaborate with. 

6. Understand the financials

At the start of your entrepreneurial journey, having a full-fledged financial plan will be very helpful to identify areas of financial improvement and the gray areas, if any. 

Consider speaking with a tax advisor or hire an accountant to do your business’ expenses so that you don’t need to analyze your company’s figures on your own. It’s best to leave these matters to the professionals.

7. Consider consulting a mentor

Choosing to work with a mentor can be beneficial for your business. 

A mentor is someone who has had a similar journey as yours — someone who identifies the pitfalls and the struggles of starting up a business and can guide you through the growth phase of your startup. 

Working with a mentor will help you be more proactive and implement their learnings in your business. From understanding what workflow analytics is and how it can benefit your business, to having a better handle on your finances, seeking guidance from an experienced professional can help you overcome these challenges with ease.

Conclusion: launch your hobby business successfully

Starting a business from scratch where you are turning your hobby into a full-time revenue source is not going to be a walk in the park. It takes time, planning, commitment, and lots of patience. 

You will encounter all the ups and downs that are inevitable in any startup business but these tips will certainly ensure you’re better prepared to effectively launch your hobby business.

The post How to Start a Hobby Business: 7 Tips to Succeed appeared first on noupe.

Categories: Others Tags:

How I Made an Icon System Out of CSS Custom Properties

September 22nd, 2022 No comments

SVG is the best format for icons on a website, there is no doubt about that. It allows you to have sharp icons no matter the screen pixel density, you can change the styles of the SVG on hover and you can even animate the icons with CSS or JavaScript.

There are many ways to include an SVG on a page and each technique has its own advantages and disadvantages. For the last couple of years, I have been using a Sass function to import directly my icons in my CSS and avoid having to mess up my HTML markup.

I have a Sass list with all the source codes of my icons. Each icon is then encoded into a data URI with a Sass function and stored in a custom property on the root of the page.

TL;DR

What I have for you here is a Sass function that creates a SVG icon library directly in your CSS.

The SVG source code is compiled with the Sass function that encodes them in data URI and then stores the icons in CSS custom properties. You can then use any icon anywhere in your CSS like as if it was an external image.

This is an example pulled straight from the code of my personal site:

.c-filters__summary h2:after {
  content: var(--svg-down-arrow);
  position: relative;
  top: 2px;
  margin-left: auto;
  animation: closeSummary .25s ease-out;
}

Demo

CodePen Embed Fallback

Sass structure

/* All the icons source codes */
$svg-icons: (
  burger: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0...'
);

/* Sass function to encode the icons */
@function svg($name) {
  @return url('data:image/svg+xml, #{$encodedSVG} ');
}

/* Store each icon into a custom property */
:root {
  @each $name, $code in $svg-icons {
    --svg-#{$name}: #{svg($name)};
  }
}

/* Append a burger icon in my button */
.menu::after {
  content: var(--svg-burger);
}		

This technique has both pros and cons, so please take them into account before implementing this solution on your project:

Pros

  • There are no HTTP requests for the SVG files.
  • All of the icons are stored in one place.
  • If you need to update an icon, you don’t have to go over each HTML templates file.
  • The icons are cached along with your CSS.
  • You can manually edit the source code of the icons.
  • It does not pollute your HTML by adding extra markup.
  • You can still change the color or some aspect of the icon with CSS.

Cons

  • You cannot animate or update a specific part of the SVG with CSS.
  • The more icons you have, the heavier your CSS compiled file will be.

I mostly use this technique for icons rather than logos or illustrations. An encoded SVG is always going to be heavier than its original file, so I still load my complex SVG with an external file either with an tag or in my CSS with url(path/to/file.svg).

Encoding SVG into data URI

Encoding your SVG as data URIs is not new. In fact Chris Coyier wrote a post about it over 10 years ago to explain how to use this technique and why you should (or should not) use it.

There are two ways to use an SVG in your CSS with data URI:

  • As an external image (using background-image,border-image,list-style-image,…)
  • As the content of a pseudo element (e.g. ::before or ::after)

Here is a basic example showing how you how to use those two methods:

CodePen Embed Fallback

The main issue with this particular implementation is that you have to convert the SVG manually every time you need a new icon and it is not really pleasant to have this long string of unreadable code in your CSS.

This is where Sass comes to the rescue!

Using a Sass function

By using Sass, we can make our life simpler by copying the source code of our SVG directly in our codebase, letting Sass encode them properly to avoid any browser error.

This solution is mostly inspired by an existing function developed by Threespot Media and available in their repository.

Here are the four steps of this technique:

  • Create a variable with all your SVG icons listed.
  • List all the characters that needs to be skipped for a data URI.
  • Implement a function to encode the SVGs to a data URI format.
  • Use your function in your code.

1. Icons list

/**
* Add all the icons of your project in this Sass list
*/
$svg-icons: (
  burger: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24.8 18.92" width="24.8" height="18.92"><path d="M23.8,9.46H1m22.8,8.46H1M23.8,1H1" fill="none" stroke="#000" stroke-linecap="round" stroke-width="2"/></svg>'
);

2. List of escaped characters

/**
* Characters to escape from SVGs
* This list allows you to have inline CSS in your SVG code as well
*/
$fs-escape-chars: (
  ' ': '%20',
  ''': '%22',
  '"': '%27',
  '#': '%23',
  '/': '%2F',
  ':': '%3A',
  '(': '%28',
  ')': '%29',
  '%': '%25',
  '<': '%3C',
  '>': '%3E',
  '': '%5C',
  '^': '%5E',
  '{': '%7B',
  '|': '%7C',
  '}': '%7D',
);

3. Encode function

/**
* You can call this function by using `svg(nameOfTheSVG)`
*/
@function svg($name) {
  // Check if icon exists
  @if not map-has-key($svg-icons, $name) {
    @error 'icon “#{$name}” does not exists in $svg-icons map';
    @return false;
  }

  // Get icon data
  $icon-map: map-get($svg-icons, $name);

  $escaped-string: '';
  $unquote-icon: unquote($icon-map);
  // Loop through each character in string
  @for $i from 1 through str-length($unquote-icon) {
    $char: str-slice($unquote-icon, $i, $i);

    // Check if character is in symbol map
    $char-lookup: map-get($fs-escape-chars, $char);

    // If it is, use escaped version
    @if $char-lookup != null {
        $char: $char-lookup;
    }

    // Append character to escaped string
    $escaped-string: $escaped-string + $char;
  }

  // Return inline SVG data
  @return url('data:image/svg+xml, #{$escaped-string} ');
}		

4. Add an SVG in your page

button {
  &::after {
    /* Import inline SVG */
    content: svg(burger);
  }
}

If you have followed those steps, Sass should compile your code properly and output the following:

button::after {
  content: url("data:image/svg+xml, %3Csvg%20xmlns=%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox=%270%200%2024.8%2018.92%27%20width=%2724.8%27%20height=%2718.92%27%3E%3Cpath%20d=%27M23.8,9.46H1m22.8,8.46H1M23.8,1H1%27%20fill=%27none%27%20stroke=%27%23000%27%20stroke-linecap=%27round%27%20stroke-width=%272%27%2F%3E%3C%2Fsvg%3E ");
}		
CodePen Embed Fallback

Custom properties

The now-implemented Sass svg() function works great. But its biggest flaw is that an icon that is needed in multiple places in your code will be duplicated and could increase your compiled CSS file weight by a lot!

To avoid this, we can store all our icons into CSS variables and use a reference to the variable instead of outputting the encoded URI every time.

We will keep the same code we had before, but this time we will first output all the icons from the Sass list into the root of our webpage:

/**
  * Convert all icons into custom properties
  * They will be available to any HTML tag since they are attached to the :root
  */

:root {
  @each $name, $code in $svg-icons {
    --svg-#{$name}: #{svg($name)};
  }
}

Now, instead of calling the svg() function every time we need an icon, we have to use the variable that was created with the --svg prefix.

button::after {
  /* Import inline SVG */
  content: var(--svg-burger);
}

Optimizing your SVGs

This technique does not provide any optimization on the source code of the SVG you are using. Make sure that you don’t leave unnecessary code; otherwise they will be encoded as well and will increase your CSS file size.

You can check this great list of tools and information on how to optimize properly your SVG. My favorite tool is Jake Archibald’s SVGOMG — simply drag your file in there and copy the outputted code.

Bonus: Updating the icon on hover

With this technique, we cannot select with CSS specific parts of the SVG. For example, there is no way to change the fill color of the icon when the user hovers the button. But there are a few tricks we can use with CSS to still be able to modify the look of our icon.

For example, if you have a black icon and you want to have it white on hover, you can use the invert() CSS filter. We can also play with the hue-rotate() filter.

CodePen Embed Fallback

That’s it!

I hope you find this little helper function handy in your own projects. Let me know what you think of the approach — I’d be interested to know how you’d make this better or tackle it differently!


How I Made an Icon System Out of CSS Custom Properties originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.

Categories: Designing, Others Tags:

Things I Wish I Had Known About Angular When I Started

September 22nd, 2022 No comments

I’ve been using Angular since version 2, and it has come a long way since those days to what it is right now. I’ve worked on various Angular projects over the years, yet I keep finding new things. It goes to say how massive the framework is. Here are some things I wish I had known about Angular when I started so you don’t have to learn it the hard way.

Modularize Your Application

Angular has detailed documentation outlining the recommended approach to structure your application. Angular also provides a CLI to help scaffold your application that adheres to their recommendations.

I’ve had my fair share of mistakes when it comes to structuring the application. As you follow tutorials, you’re guided through where you should put your files and which modules the components or services belong to. However, when you venture beyond the tutorial, you sometimes end up with a structure that doesn’t scale well. This could lead to issues down the road.

Below are some mistakes I’ve made that came back and bit me.

Split Your Components Into Modules

The release of Standalone Components in Angular 14 makes NgModules no longer a requirement when creating components. You can choose not to use modules for your components, directives, and pipes. However, you could still follow the folder structure outlined below, omitting the module files.

Initially, I put all the components into the default module you get when creating a new Angular app. As the application grew, I ended up with a lot of components in the same module. They were separate components and didn’t have any need to be in the same module.

Split your components into separate modules, so you can import and load only the required modules. The common approach is to divide your application into the following modules:

  • Core module for singleton services and components that are used once at the app level (example: navigation bar and footer).
  • Feature modules for each feature — code related to the specific functionality of your application. For example, a simple e-commerce application could have a feature module for products, carts, and orders.
  • Shared module for the module that is referenced across different parts of the application. These can include components, directives, and pipes.

Dividing the application into separate modules helps partition your application into smaller, more focused areas. It creates clear boundaries between the different types of modules and each feature module. This separation helps maintain and scale the application as different teams can work on separate parts with a lower risk of breaking another part of the application.

Lazy Load Your Routes

This is a result of my first mistake of putting everything in a single module. Because all the components were in the same module, I couldn’t lazy load the modules. All the modules were imported at the root level, eventually affecting the initial load time. After separating your components into modules, lazy load your routes, so the modules only get loaded when you navigate to the route that requires them.

Single Responsibility

This applies to all types of files in an Angular app. I’ve let my service and component files grow beyond their scope, which made them difficult to work with. The general rule is to keep each component/service/pipe/directive performing a specific set of tasks. If a component is trying to do more than what it was initially made for, it might be worth refactoring and splitting it into several smaller components. This will make testing and maintenance a lot easier.

Use The Angular CLI

You’ve probably used the ng serve command either directly in your command line or through a script in your package.json file. This is one of Angular CLI’s commands. However, the CLI comes with more handy commands that can speed up your development especially when it comes to initializing and scaffolding.

Initially, I did most of these manually as I didn’t understand how to use the CLI except for starting and stopping the local server. I would create component files manually, add the boilerplate code, and add them to the right modules. This was okay for smaller projects but became a tedious task as the project grew. That’s when I learned how to use the CLI and use it to automate most of the manual work I do. For example, instead of creating all the boilerplate for a card component, the following command will create them for you:

ng g c card

You can use the CLI by installing it globally via npm using the command below:

npm install -g @angular/cli

To view the available commands, execute the code below:

ng help

Most projects have custom configurations that are project-specific, and you have to do some modifications to the code generated by the CLI. Angular provides an elegant solution for these scenarios, such as schematics. A schematic is a template-based code generator — a set of instructions to generate or modify code for your project. Similar to Angular CLI, your custom schematics are packaged and can be installed via npm in whichever project needs it.

Path Aliases And Barrel Exports

As I was learning Angular, I tried to keep my project neat by putting all the services into a services folder, models in a models folder, and so on. However, after some time, I end up with a growing list of import statements like this:

import { UserService } from '../../services/user.service';
import { RolesService } from '../../services/roles.service';

Typescript path alias can help simplify your import statements. To setup path aliases, open your tsconfig.json and add the desired path name and its actual path:

{
 "compilerOptions": {
 "paths": {
 "@services/*": ["src/app/services/*"],
 }
 }
}

Now the import statements above can be re-written as:

import { UserService } from '@services/user.service';
import { RolesService } from '@services/roles.service';

An added benefit of using path aliases is that it allows you to move your files around without having to update your imports. You’d have to update them if you were using relative paths.

This can be further simplified by using barrel exports. Barrels are a handy way to export multiple files from a single folder (think of it as a proxy for your files). Add an index.ts in the services folder with the following contents:

export * from './user.service';
export * from './roles.service';

Now, update the tsconfig.json to point to the index.ts file instead of the asterisk (*).

{
 "compilerOptions": {
 "paths": {
 "@services": ["src/app/services/index.ts"],
 }
 }
}

The import statements can now be further simplified into:

import { UserService, RolesService } from '@services';

Embrace Typescript’s Features

I started by learning JavaScript, so I wasn’t used to the type system and the other features that TypeScript offers. My exposure to TypeScript was through Angular, and it was overwhelming to learn both a new language (although it’s a superset of JavaScript, some differences trip me up every time) and a new framework. I often find TypeScript slowing me down instead of helping me with the development. I avoided using TypeScript features and overused the any type in my project.

However, as I got more acquainted with the framework, I began to understand the benefits of TypeScript when used correctly. TypeScript offers a lot of useful features that improve the overall developer experience and make the code you write cleaner. One of the benefits of using TypeScript that I’ve grown accustomed to is the IntelliSense or autocomplete it provides in your IDE. Their type safety and static type checking have also helped catch potential bugs at compile time that could have snuck in.

The nice thing about TypeScript is its flexible configuration. You can toggle their settings easily via their tsconfig.json as per your project’s needs. You can change these settings again if you decide on a different setting. This allows you to set the rules as loose or strict as you’d like.

Improve Performance By Using trackBy

Performance is crucial for applications, and Angular provides various ways to optimize your applications. This is often a problem that you won’t run into at the beginning as you are probably working with small data sets and a limited number of components. However, as your application grows and the number of components being rendered grows and becomes increasingly complex, you’ll start to notice some performance degradation. These performance degradations are usually in the form of slowness in the app: slow to respond, load, or render and stuttering in the UI.

Identifying the source of these problems is an adventure on its own. I’ve found that most of the performance issues I’ve run into in the applications are UI related (this doesn’t mean that other parts of the application don’t affect performance). This is especially prominent when rendering components in a loop and updating an already rendered component. This usually causes a flash in the component when the components are updated.

Under the hood, when a change occurs in these types of components, Angular needs to remove all the DOM elements associated with the data and re-create them with the updated data. That is a lot of DOM manipulations that are expensive.

A solution I’ve found to fix this issue is to use the trackBy function whenever you’re rendering components using the ngFor directive (especially when you’re frequently updating the rendered components).

The ngFor directive needs to uniquely identify items in the iterable to correctly perform DOM updates when items in the iterable are reordered, new items are added, or existing items are removed. For these scenarios, it is desirable only to update the elements affected by the change to make the updates more efficient. The trackBy function lets you pass in a unique identifier to identify each component generated in the loop, allowing Angular to update only the elements affected by the change.

Let’s look at an example of a regular ngFor that creates a new div for each entry in the users array.

@Component({
 selector: 'my-app',
 template: `
 <div *ngFor="let user of users">
 {{ user.name }}
 </div>
 `,
})

export class App {
 users = [
 {id: 1, name: 'Will'},
 {id: 2, name: 'Mike'},
 {id: 3, name: 'John'},
 ]
}

Keeping most of the code the same, we can help Angular keep track of the items in the template by adding the trackBy function and assigning it to a function that returns the unique identifier for each entry in the array (in our case, the user’s id).

@Component({
 selector: 'my-app',
 template: `
 <div *ngFor="let user of users; trackBy: trackByFn">
 {{ user.name }}
 </div>
 `,
})

export class App {
 users = [
 {id: 1, name: 'Will'},
 {id: 2, name: 'Mike'},
 {id: 3, name: 'John'},
 ]
 trackByFn(index, item) {
 return item.id;
 }
}

Use Pipes For Data Transformations

Data transformations are inevitable as you render data in your templates. My initial approach to this was to:

  • Bind the template to a function that accepts the data as the input:
interface User {
 firstName: string,
 middleName: string,
 lastName: string
}
@Component({
 selector: 'my-app',
 template: `
 <h1>{{ formatDisplayName(user) }}</h1>
 `,
})

export class App {
 user: User = {
 firstName: 'Nick',
 middleName: 'Piberius',
 lastName: 'Wilde'
 }
 formatDisplayName(user: User): string {
 return `${user.firstName} ${user.middleName.substring(0,1)}. ${user.lastName}`; 
 }
}
  • Create a new variable, assign the formatted data to the variable, and bind the new variable in the template:
interface User {
 firstName: string,
 middleName: string,
 lastName: string
}
@Component({
 selector: 'my-app',
 template: `
 <h1>{{ displayName }}</h1>
 `,
})

export class App {
 user: User = {
 firstName: 'Nick',
 middleName: 'Piberius',
 lastName: 'Wilde'
 }
 displayName = `${this.user.firstName} ${this.user.middleName.substring(0,1)}. ${this.user.lastName}`; 
}

Neither approach was clean nor performant and wasn’t what Angular recommends to perform data transformations. For these scenarios, angular recommends using pipes. Pipes are functions specifically designed to be used in templates.

Angular provides built-in pipes for common data transformations such as internationalization, date, currency, decimals, percentage, and upper and lower case strings. In addition, Angular also lets you create custom pipes that can be reused throughout your application.

The data transformation above can be re-written using a pipe as follows:

@Pipe({name: 'displayName'})
export class DisplayNamePipe implements PipeTransform {
 transform(user: User): string {
 return `${user.firstName} ${user.middleName.substring(0,1)}. ${user.lastName}`; 
 }
}

The pipe can then be used in the template by using the pipe (|) character followed by the pipe name.

@Component({
 selector: 'my-app',
 template: `
 <h1>{{ user | displayName }}</h1>
 `,
})

export class App {
 user: User = {
 firstName: 'Nick',
 middleName: 'Piberius',
 lastName: 'Wilde'
 }
}

Improve Performance With OnPush Change Detection

Angular applications are made up of a tree of components that rely on their change detectors to keep the view and their corresponding models in sync. When Angular detects a change in the model, it immediately updates the view by walking down the tree of change detectors to determine if any of them have changed. If the change detector detects the change, it will re-render the component and update the DOM with the latest changes.

There are two change detection strategies provided by Angular:

  • Default
    The change detection cycle runs on every event that occurs inside the component.
  • OnPush
    The change detection cycle only runs when a component’s event handler is triggered, an async pipe is used in the template, a new value is emitted, and when any of the component’s input reference changes.

In addition to the reduced number of change detection cycles and its performance boost, the restrictions imposed by using the OnPush change detection strategy also make you architect your app better by pushing you to create more modular components that utilize one of the three recommended ways mentioned above to update the DOM.

RxJS Is Your Friend

RxJS is a JavaScript library that uses observables for reactive programming. While RxJS isn’t exclusively used in Angular, it plays a big role in the Angular ecosystem. Angular’s core features, such as Routing, HttpClient, and FormControl, leverage observables by default.

RxJS is a part of Angular that has been largely unexplored for me as I was learning the framework. I’ve avoided using it unless I had to. It was a new concept, and I found it quite hard to wrap my head around it. I’ve worked with JavaScript Promises, but observables and streams are a new paradigm for me.

After working for a while with Angular, I eventually took the time to learn and understand RxJS and try to use them in my projects. It wasn’t long before I realized the numerous benefits of RxJS that I’ve been missing out on all this time. RxJS, with its large collection of chainable operators, excels in handling async tasks.

I’ve been using RxJS with Angular for a few years now, and my experience has been nothing less than positive. The set of operators RxJS offers is really handy. They seem to have an operator (or a chain of operators) for every use case. Commonly used operators include:

  • map: passes each source value through a transformation function to get corresponding output values.
  • tap: modify the outside state when the observable emits a new value without altering the stream.
  • switchMap: maps each value to an Observable, then flattens all of these inner Observables.
  • filter: emits a value from the source if it passes a criterion function.
  • combineLatestWith: create an observable that combines the latest values from all passed observables and the source into an array and emits them.

Learn How To Spot And Prevent Memory Leaks

Memory leaks are one of the worst types of issues you run into — hard to find, debug, and often hard to solve. This might not be a concern initially, but it becomes crucial when your application reaches a certain size. Common symptoms of memory leaks are degrading performance the longer the app is being used or the same events being fired multiple times. Two of the most common source of memory leaks I’ve run into are:

1. Subscriptions That Are Not Cleaned Up

Unlike the async pipe, listening to an observable using the subscribe method won’t get cleaned up automatically. You will have to manually clean up the subscriptions by calling unsubscribe on the subscription or using the takeUntil operator.

The example below shows a memory leak introduced by listening to the route params observable. Every new instance of MyComponent creates a new subscription which will continue to run even after the component is destroyed.

export class MyComponent {
 constructor(private route: ActivatedRoute){
 this.route.params.subscribe((params) => {
 // Do something
 });
 }
}

As mentioned above, you can fix the memory leak by either calling unsubscribe or using the takeUntil operator.

  • Fixing the memory leak using the unsubscribe method:
export class MyComponent {
 private routeSubscription;
 constructor(private route: ActivatedRoute){
 this.routeSubscription = this.route.params.subscribe((params) => {
 // Do something
 });

 }
 ngOnDestroy() {
 this.routeSubscription.unsubcribe();
 }
}
  • Fixing the memory leak using the takeUntil operator:
export class MyComponent {
 private componentDestroyed$ = new Subject<boolean>();
 constructor(private route: ActivatedRoute){
 this.route.params.pipe(
 takeUntil(this.componentDestroyed$)
 ).subscribe((params) => {
 // Do something
 });

 }
 ngOnDestroy() {
 this.componentDestroyed$.next(true);
 this.componentDestroyed$.complete();
 }
}

2. Event Listeners That Are Not Cleaned Up

Another common source of memory leaks is event listeners that aren’t unregistered when no longer used. For example, the scroll event listener in the code below gets instantiated on every new instance of MyComponent and continuously runs even after the component is destroyed unless you unregister it.

export class MyComponent {
 constructor(private renderer: Renderer2) {}
 ngOnInit() {
 this.renderer.listen(document.body, 'scroll', () => {
 // Do something
 });
 }
}

To fix this and stop listening to the event after the component is destroyed, assign it to a variable and unregister the listener on the ngOnDestroy lifecycle method.

export class MyComponent {
 private listener;
 constructor(private renderer: Renderer2) {}
 ngOnInit() {
 this.listener = this.renderer.listen(
 document.body,
 ‘scroll’,
 () => {
 // Do something
 });

 }
 ngOnDestroy() {
 this.listener();
 }
}

Consider Using A State Management Library (If Applicable)

State management is another part of the stack that you don’t usually think about until you need it. Most small and simple applications don’t need any external state management library. However, as the project grows and managing your application’s state gets more complicated, it might be time to re-think if the project could benefit from implementing more robust state management.

There is no correct solution for state management as every project’s requirements are different. Luckily, there are a few state management libraries for Angular that offer different features. These are a few of the commonly used state management libraries in the Angular ecosystem:

Wrapping Up

If you’ve just started to learn Angular and it hasn’t quite clicked yet, be patient! It will eventually start to make sense, and you’ll see what the framework has to offer. I hope my personal experience can help you accelerate your learning and avoid the mistakes I’ve made.

Categories: Others Tags:

Best Practices When Interviewing Freelancers

September 22nd, 2022 No comments

Regardless of your company’s size, hiring freelancers is often a great choice because they are more flexible and can work on projects both large and small. To work effectively with freelancers, you need to know how to properly vet the ones you’ve chosen to interview. Doing the right prep work and asking the right questions during the interview process will ensure that you are hiring the freelancer that best fits your needs. 

Review their portfolio beforehand

Be sure to look over their portfolio before the interview. Not all clients post their work publicly, and you might have to dig a little bit to get a good idea of what they are capable of. You don’t want to lead the interview with vague, uninformed questions. 

Send an overview of the work involved before the interview

Before interviewing a freelancer, make sure the job description is clear and detailed. By having a clear job description, you can ensure that the freelancer is a good fit for the job and you can avoid any misunderstandings about the work that will be done. This also gives them an opportunity to voice any concerns or back out before you commit to spending time on a call or in person with them.

Make plenty of time for the interview

Another tip is to make sure that there is plenty of time for the interview. An interview should allow both the freelancer and the hiring company enough time to ask questions and get to know each other. You also want to account for possible technical snafus, such as spotty wifi, troublesome video and voice call software, and computer audio issues.

See if they can connect their portfolio to the work you need done

When interviewing a freelancer, ask to see some of their past work. One of the best ways to gauge the quality of a freelancer is to look at the work they’ve done in the past from their perspective. If possible, ask to see work that is similar to what you’d like them to do for you. This also helps test their understanding of what the job will entail. If they have no relevant experience, they may not be the best fit for you. 

Understand how they work

When interviewing a freelance worker, it is important to ask them how they work. This can include questions such as how many hours a day or a week they work and what their process is. Ask them to walk you through their typical day or task if they’re already familiar with your industry. If they’re not yet familiar with your industry, ask them how they plan to get up to speed. Ask them what tools they plan to use and whether they’ll be working remotely or in person. And finally, be sure to ask how they’ll stay up to date in your industry and how they’ll ensure that they’re delivering the best quality work. By asking these questions, it can help give insight into whether or not the freelancer is a good fit for the company. 

Give a small task in the interview

When you interview a freelancer, you want to be sure they are competent in the skills they claim to possess. To test this, provide a small task that the freelancer must complete. This could be as simple as having them write a short paragraph, or it could be something more advanced, such as designing a website mockup. By having the freelancer complete a small task during the interview, you can test their skills and ensure that the person you hire is capable of performing the duties required of them. 

Ask about any negative reviews

As a small business owner, you want to hire the best talent possible and that’s exactly what you should do. If any of the freelancer’s previous clients left a negative review, try to find out what happened there. When you ask, does the freelancer blame the client entirely, or are they fair in their response? Have they learned from what happened? This is your opportunity to assess how the freelancer handles criticism and conflict; it also tells you a lot about their level of professionalism.

Make sure they can write

A good test of a freelancer’s writing and ability to communicate clearly is to have them write a short piece for you. You can ask them to write anything they think will help you determine whether they are a good fit for your business needs, or you can direct them to write a specific piece, such as a short blog post, email newsletter, or press release. When you receive their work, you can evaluate it for grammar, punctuation, and whether it is easy to understand. You can also assess whether their writing style matches your company’s tone and voice. 

Even if you are hiring for a technical role, if the freelancer can’t write at least adequately or paraphrase so their peers can understand them, you may experience communication issues down the road.

Ask for references

When hiring a freelancer, it is important to ask for past references. If a freelancer is serious about their business, they should be able to provide you with a few people that can refer them and why they’ve chosen those references. If they are unable to do so, this could be a red flag. You want to ensure that the freelancer is professional and has a good reputation in the industry. By asking for references, you can put your mind at ease and know that you are choosing a reputable professional. 

Assess how they will fit with your company culture

One best practice when interviewing freelancers is to make sure they are a good fit for your company’s culture. Getting to know the candidate’s work ethic, attitude, and communication skills is important, but so is finding out if they will mesh with the rest of your team. It’s also worth noting that since freelancers work remotely, their availability and responsiveness will play a bigger role in whether or not they are a good fit for your company than if you were hiring an in-house employee. 

Get ahead of workflow problems

One of the most common problems that can emerge in working with a freelancer is either you blocking their work or them blocking your work. To prevent such problems, ask your potential freelancer to describe their ideal workflow and make sure that your workflow is close to theirs. It is also advisable to set up a working schedule and make sure that both parties stick to it. Finally, make sure that your communication style is similar to or can accommodate your potential freelancer’s communication style. If you do not have much experience in hiring and working with freelancers, you should work with only a few tools, such as Slack and Trello, to ensure freelancer communication and task management respectively.

The post Best Practices When Interviewing Freelancers appeared first on noupe.

Categories: Others Tags:

Is your Website Accessible? It Should Be.

September 22nd, 2022 No comments

There’s a lot to think about when building a website, here we explore the importance of creating a site that’s accessible to all. 

No matter what type of website you run, whether it’s an e-commerce store or a one-page business showcase, you’re going to want to attract as many visitors as possible. 

The way to do this is to ensure your website is accessible. An accessible web design enables everyone to access your website and content, taking into account the needs of those with a disability.

According to the World Health Organisation, there are over 1 billion people in the world living with some sort of disability. That’s a lot of people you’re excluding from your website if it isn’t accessible. 

In this article, we’ll explore the importance of an accessible website, the design features that work together to ensure your website is accessible to all, and how you can test your website’s accessibility. 

What is an Accessible Website?

An accessible website is one that can be accessed and viewed by everyone, regardless of how they are surfing the web. 

Website accessibility refers to the need for websites to utilize various tools and technologies in order to ensure visiting, navigating, understanding, and contributing to content is the same experience for every user. 

The user journey of your website should be of the same standard no matter how a user is accessing your content. 

Accessibility is a crucial part of the user experience. Not only does it refer to ensuring your website is accessible for users with disabilities, but it also involves taking steps to make sure your website is compatible with different devices such as desktop computers, smartphones, and tablets.

Why Should Your Website Be Accessible?

When building your website, accessibility should be a key part of the process and not an afterthought. 

Firstly, an accessible website ensures as many people as possible can visit and enjoy your website. The last thing you want after you’ve designed and built a great website is to discover you’re blocking potentially hundreds of visitors. 

Plus, Search engines such as Google simply won’t rank a website that isn’t accessible and doesn’t offer a strong user experience. A great user experience and strong accessibility can both impact your search engine performance

What Makes a Website Accessible?

Luckily for website owners, there are official guidelines that you can refer to in order to ensure your website is accessible. 

The Web Content Accessibility Guidelines (WCAG) were created to set a universal standard that all websites worldwide should aim to meet in order to make their web content accessible. These accessibility considerations can be applied, not only to website design but to wider digital content like email marketing or social media. 

There are also four key principles of accessibility that form the foundations for any content created and published online. They are:

  • Perceivable – this refers to all aspects of the website being perceived by the human senses so that no aspect is hidden or inaccessible. For most users, this will be through sight but for those with a visual impairment, it may be sound or touch.
  • Operable – all interactive aspects of the website such as navigation and buttons should be able to be operated by all users.
  • Understandable – every user should be able to understand the content and its purpose.
  • Robust – web content should be able to function across a variety of technologies and devices.  

So how can you ensure you’re building a website that’s accessible? We’ve listed some of the key design features and principles you should consider below.

Use High Contrast Colours 

Some users may have difficulty viewing your content if you opt for low-contrast colors. Using high-contrast color combinations such as black and white or black and yellow ensures everyone can read your content. 

Enable Keyboard Navigation 

In order for a website to be considered accessible users should be able to navigate it without a mouse. Clicking on links and accessing new pages should all be able to be done via a keyboard if necessary. 

Add Captions to Videos 

If you feature any video content on your website, be sure to include captions or transcripts so that users who are hard of hearing or even those whose devices have no sound can enjoy your content. 

Include Alt Text on Images

Alt text is text that you can add in your image settings to describe the image to users who cannot see it. This way, all users are able to enjoy your website content.

Breakup Your Content with Headings

Using headings helps to break up your content to make it easier to digest for users. Clear headings also help screen readers to navigate through your webpage and interpret your content.

Ensure Your Website is Mobile Friendly

There are an array of different devices that people can use to access your website. Ensuring your website is optimized for mobile makes sure that your website will adapt no matter what the screen size.

How to Check if Your Website is Accessible 

It’s important to regularly check your website for various performance issues, including how accessible it is. 

There are various ways you can monitor the accessibility of your website in order to ensure it’s offering the best user experience possible for all visitors. 

Use an Online Accessibility Checker – online accessibility checkers such as WAVE are tools that can evaluate the accessibility of your web pages. To use accessibility software you simply enter the URL of the page you want to check and you’ll receive a report flagging any potential issues. 

Manually Check Your Website – a manual accessibility check will be more time-consuming than other alternatives. Use a checklist to ensure you’re conducting a thorough assessment of your website and view every page with accessibility as the priority. 

Hire an Accessibility Expert – if you’re dedicated to making accessibility a core principle of your online brand then hiring an accessibility expert is a good idea. An accessibility expert will audit your site and provide actionable feedback and recommendations. 

Website Accessibility at Every Step

An accessible website isn’t just to meet the needs of your end user either. Everyone from business partners and stakeholders to web developers and external consultants needs to be able to access your content. 

Accessibility should be the priority at every step of your website build. Whether your site is a simple landing page or a full software product, adhering to accessibility standards helps you ensure that all users can engage fully. So, if you’re working in-house or are outsourcing digital product development, providing clear guidelines to your developers and designers is essential.

The ease with which people can access your content will have a major impact on your brand positioning.

Think about it, if a user struggles to explore your website or engage with your content what does that say about your brand? You want to be positioned as a brand that cares, not as one that doesn’t think about others. 

Similarly, site audits should analyze accessibility whilst keeping up to date with the latest technologies and tools will ensure your website is staying ahead of the competition. 

Make Your Site Accessible To All

The fact is, you simply can’t afford to not prioritize building an accessible website. 

The good news though is that making a site accessible has never been easier and you have the potential to reach as many people as possible, even those who may have struggled to access websites in the past. 

In this article, we’ve explored everything you need to know about why an accessible website is so important and the steps you can implement to ensure your site is up to scratch. 

Incorporate website accessibility into every aspect of your web design and maintenance and you should have no problem welcoming an array of visitors to your site. 

The post Is your Website Accessible? It Should Be. appeared first on noupe.

Categories: Others Tags:

Deciding Your Web Design Priorities

September 22nd, 2022 No comments

A well-designed website is an incredibly important aspect of any business. Think of your website as your home base. It’s where most of your customers go to get information about your brand and what you offer. So if you don’t have a good website, it can deter customers and result in fewer conversions and sales. 

As the website is so critical, however, it can often become a point of frustration for many businesses. Getting your website just right can take time, and it can be overwhelming if you don’t know where to start or aren’t having any success. 

There are many aspects of web design, and knowing which areas to focus on throughout the process can be challenging, as there is no one right way to go about it. Is functionality more important? Aesthetics? User experience? Security?

These are all reasonable things to worry about when you are trying to design a new website. But the answer can vary depending on your brand and your company’s specific needs or goals. 

Below, we’ll explore the different elements of web design to help you understand what they are and which ones might be a priority over others, depending on your brand.  

The first step in deciding your web design priorities is to go through all the different elements and think about them in terms of your company’s specific needs and goals. The web design process can be different for every brand, so just because one company does it one way does not mean you should do the same. 

For some, the user experience might be the most important element of web design, for others, it might be cybersecurity. In the end, all of the below elements are important and should be included, but when you are just starting out, and perhaps don’t have the time or money to focus on them all, it’s helpful to identify each one to determine what is most important for your business’s specific needs. 

Brand Awareness

If you are a new business, brand awareness should be one of your top priorities. You need people to know about your brand in the first place before they will even go looking for your website. Once they do get to your website, your brand identity should be clear and easy to recognize. 

Focusing on establishing your brand identity through brand awareness will help you connect with people so they will remember you. In doing this, you will start to establish a new customer base, and those customers will become more loyal to your brand and recommend you to others. 

Think of brand identity as your first impression. If you leave a bad first impression, you aren’t going to attract any customers to your new business, but if you leave a good first impression, you will more quickly establish yourself as a brand to keep an eye on, which means you will grow your customer base and start making sales. 

So good branding is key when designing your website as a new business. This means having an appealing logo, a good brand story that tells customers who you are and what you value, and other memorable brand elements and aesthetics, such as appealing and recognizable color schemes and imagery. 

User Experience

If your company heavily relies on pleasing your customers, as most should, user experience should be one of your top priorities. Customer-focused businesses tend to have more success because they put the effort into prioritizing their customer’s wants and needs. The more you show your customers that you care about them and their experience, rather than seeing them as dollar signs, the more likely you are to have success growing your business. 

So, if you are a B2C business, user experience (UX) design is essential. B2B businesses should also have good UX design, but it is even more crucial when you are B2C and trying to appeal to large customer bases, as 50% of consumers believe that UX affects their opinion of a business. 

You can create a better user experience by following these steps: 

  1. Understand who your target customer is — You can do this by creating a customer persona — essentially a description summary of most of your customer’s demographics. This can include their age, identity, experiences, and even their location. 
  2. Identify the problem —  Listen to your customers. They may typically encounter a common problem among your site or other sites during their purchasing process. You can gain this data through surveys or other customer service queries.
  3. Solve the problem — Once you find out what common issues your target customers experience, brainstorm ideas on how your business or your site’s features can solve that problem. 

All of this indicates that UX design is often primarily about function. It’s about designing a website that is providing the best experience possible for your customers by solving their problems and giving them what they need.

So, if you are an e-commerce business, for example, how easy and satisfactory your website’s shopping and checkout process plays a significant role in the overall customer experience. In this case, your UX design should focus on making it easy for your customers to find the products they are looking for and checkout without running into any major issues. 

SEO

SEO, or search engine optimization, is technically important for all businesses. Optimizing your content will ensure you rank higher in Google search results, which means you will drive more traffic to your website and, thus, be more likely to increase conversions and sales.

If you are a unique business that is offering something that most others are not, then you can likely get away with putting SEO on the back burner. However, if you have a lot of competitors that offer similar products or services, SEO should be a priority. 

If a customer is looking for lawnmowers, for example, and they do a simple Google search for lawnmowers, there are likely a ton of websites that will pop up in the search results. So if you sell lawnmowers, you want to prioritize SEO to make sure your website ranks higher in search results; otherwise, competitors might constantly beat you to the punch. 

If you sell something more unique, however, like knitted hats for dogs, there are potentially not as many other businesses that sell the same thing. So if someone is searching for dog hats or knitted dog hats, your website might automatically show up higher in search results without SEO because there aren’t many other options out there. 

Cybersecurity

Ensuring the data on your website is secure is always a wise decision if you want to avoid cyber attacks — but some businesses should worry about this more than others. FinTech companies, for example, that deal with a lot of sensitive data should make cybersecurity a priority. 

B2B companies, as well, that deal with major clients that expect them to keep their information private and secure should also focus on quality website security. Essentially any company that keeps a lot of sensitive data on their website, or asks for client information through online forms, should be prioritizing the safety and security of their clients and their company. 

Wrapping Up

There are numerous other things that your business might want to consider when building a new website, but brand awareness and design, UX design, SEO, and cybersecurity are four of the primary elements of web design that tend to matter most. So it’s important to take a close look at these four things to determine which ones should be a priority. Once you get the most important elements out of the way, you can start to work on the rest of your web design as time and budget allows. 

The post Deciding Your Web Design Priorities appeared first on noupe.

Categories: Others Tags:

The Benefits of Building a SaaS Startup

September 22nd, 2022 No comments

The SaaS business model is growing at a tremendous speed in recent years. SaaS is a subscription-based service. It challenges the traditional model of on-premise software. If SaaS continues to grow at its present rate, then soon on-premise software might become a thing of the past. 

There are many reasons tech entrepreneurs are opting to build a SaaS startup like lower investment costs, flexibility, measurability of the performance, and scalability, among others. If you wish to begin a SaaS or Software as a Service business, then you need to know its advantages. 

Lower Investment Costs

The initial investment cost of starting a SaaS business model is much lower than that of other kinds of start-ups. Further, SaaS business also does not require much inventory except for a laptop and a stable internet connection. There is no need of lining your office with premium infrastructure. In fact, you do not need an office at all. You can start the business from your living room as well. 

The biggest advantage of SaaS is that you can build a team that works remotely. You need not invite them to the office on a daily basis. Here, you save on so many different types of costs, especially utilities. SaaS products do not require any kind of manufacturing or packaging as well. They need not be shipped but provided through the internet.

As compared to on-premise software, SaaS software can be offered at a greater speed to the clientele. There are many costs that are eliminated when you decide to build a SaaS startup. If you are equipped, you can develop the SaaS product on your own.

Recurring Stream of Revenue

In order to initiate any kind of business, entrepreneurs need to focus on costs and revenue for judging its profitability. The beauty of SaaS businesses is that they operate on the model of subscription. Businesses offer SaaS to clients in return for a monthly or annual fee. Entrepreneurs are ensured of a regular flow of income, thanks to this model.

When businesses are assured of steady income, they do not have to worry about regular expenses. A recurring stream of revenue also enables businesses to plan the future. Further, investors are also interested in the possibility of a regular income. The valuation of your business shoots up because of this. Start-ups can generate invoices and simplify the process of billing for clients. This even enhances the trust of the customers in the company. 

Recurring revenue always becomes the foundation of a stable business. The salaries and other expenses are taken care of. The team knows that the business is a stable one and there is a bright future working for the company. When the income is fixed, there is no stress over customer acquisition every day. The entire focus is on retaining the present ones. 

Scalability of the Model

The SaaS business model has a high potential for scalability. With SaaS, customers are able to extend the number of features they utilize and even cut down on them when not in use. SaaS models can be customized by the clients depending on their requirements. Start-ups offer flexibility in terms of usage. 

Traditional on-premise software did not offer such convenience. Small and medium enterprises were not able to afford traditional software. The SaaS business model is flexible and adaptable. End-users benefit from the cloud-based nature of this business. They can modify it frequently and deploy it at a quicker pace. 

When you initiate a SaaS start-up, your primary concern is finding the target market and customer acquisition. When you acquire a certain number of customers, you decide on expanding your product portfolio. It is easier to scale a SaaS business by changing the plan to attract bigger clients. You can attract big-ticket clients by giving them premium services. You can use tools like online quotation makers to make a grand impression.

SaaS start-ups can look for vertical growth or horizontal growth. You can either focus on bigger clients offering bigger businesses or offer solutions to a niche industry. If you find international markets more lucrative, you can even scale your business to the global market. As and when your product grows, you have the convenience of adding features and functions to existing products as well. 

Measurability of Performance

What differentiates SaaS from other businesses is that herein entrepreneurs can easily measure the performance and the impact. End-users of SaaS buy the product online. Your product is used online itself. Hence, the data of users and their usage is easily available to measure. 

The model of SaaS generates recurring income making it predictable. Other business models do not have this advantage. You can analyze the available data for the profitability of the business and take crucial decisions. Judging the stability of the business becomes easy with SaaS start-ups. 

It is necessary for SaaS businesses to track their customers. Gathering data regarding the features customers find useful and the reasons why they canceled the subscription can help companies understand the changes required to be made. They can take their in-product feedback and know the actual review of the customers. Understanding the pain points of customers and their friction points helps a company grow and expand. 

When start-ups keep a tap on customers, then customer acquisition, maintenance, and retention become easy and simple. This even helps in product expansion and growth. While companies gather data, they forget to analyze it. A proper analysis with the help of experts helps in more ways than one. 

In the end

It is the right time to initiate a SaaS start-up, irrespective of the country you belong to. Choosing to start a SaaS business model in the present age is a step in the right direction. While there is competition, it is not too high to cut down your profits. However, entrepreneurs first need to analyze the product offerings and services that are in demand in the industry. 

SaaS business model is one of the very low investment start-ups. Hence, there is not much to lose if things do not work out, somehow. A business like this that does not require a huge team and infrastructure helps an entrepreneur learn the ropes of the business. As there is no manufacturing, distribution does not take long. Customers can enjoy the product or service soon after it is launched. 

Start-ups all across the globe are increasingly adopting SaaS to scale their businesses. SaaS has made the lives of entrepreneurs easy and stress-free. As the demand for SaaS keeps on growing, this is the right time to plunge into the business to get a bigger share of this pie.

The post The Benefits of Building a SaaS Startup appeared first on noupe.

Categories: Others Tags: