3D Everydays Inspiration

Original Source: http://feedproxy.google.com/~r/abduzeedo/~3/21ZpFlFB22A/3d-everydays-inspiration

3D Everydays Inspiration
3D Everydays Inspiration

abduzeedoJan 21, 2020

We have already featured Stuart Lippincott here on ABDZ and will keep doing it because he keeps delivering incredible and inspiring work with his Everydays series of posts. For this post we will feature some from the December Everydays 2019, make sure to check out his work for the full set of images. Ah, in case you wonder, the tools used were After Effects,  Maxon Cinema 4D and Octane Render.

3D

Image may contain: outdoorImage may contain: fashion accessory and goldImage may contain: water and outdoorImage may contain: nature, desert and abstractImage may contain: outdoor, cave and mountainImage may contain: outdoorImage may contain: outdoor, water and natureImage may contain: outdoor, mountain and desertImage may contain: mountain, sky and outdoorImage may contain: outdoor, sky and natureImage may contain: outdoor and waterImage may contain: mountain, outdoor and natureImage may contain: fireworks and concertImage may contain: nature, valley and canyonImage may contain: outdoor, nature and mountainImage may contain: outdoor, water and fireImage may contain: mountain, sky and outdoorImage may contain: mountain, outdoor and skyImage may contain: orange and artImage may contain: sky, outdoor and sunsetImage may contain: abstract, man and personImage may contain: outdoor, firefighter and nature


How to Send Customized Messages to Slack From your App

Original Source: https://www.hongkiat.com/blog/send-messages-to-slack/

Slack is a popular messaging app used by many teams. It comes with a lot of services and an API for developers to integrate it with their applications. In today’s post we’ll see how to…

Visit hongkiat.com for full content.

Disney Plus UK is launching sooner than we thought!

Original Source: http://feedproxy.google.com/~r/CreativeBloq/~3/wB3qPks1pV8/disney-plus

Disney fans, rejoice! If you're in certain countries in Western Europe then you'll be able to get your hands on Disney Plus a whole week earlier than expected. The streaming service, which is already going down an absolute storm in the US, is now set to launch on 24 March (instead of 31 March as initially expected) in the UK, Ireland, France, Spain, Italy and Germany. 

The new Disney+ launch date may be only a week earlier, but when there are delights such as Baby Yoda in The Mandalorian to look forward to, who wouldn't be happy to have the service for an extra seven days? We're even considering upgrading to one of the best 4K monitors for the occasion. 

Disney Plus

Just some of the exclusive goodies on offer

The other good news is that the pricing of Disney+ has also been announced, and for what you get for your money, it's going to be much better value than Netflix. In the UK, Disney+ will cost £5.99 per month or £59.99 per year. Users will be able to stream 4K content on four devices at once, and there are no hidden extras. They'll also be able to download their favourite shows or films, to watch offline. 

To compare, Netflix also costs £5.99 per month, but you have to pay more (either £8.99 or £11.99) if you want ultra-HD content, or to be able to stream on one more than screen at a time. And with Netflix UK having recently won the rights to Studio Ghibli's content, it seems competition between the two streaming giants is really heating up, and that's before Disney+ has even fully launched.

Disney Plus' available shows and films will include much-loved classics from Disney, Pixar, Marvel and National Geographic, and there's also previously unseen content, including the aforementioned The Mandalorian, and the catchily named High School Musical, The Musical, The Series. 

You can sign up now on the Disney Plus website for more updates.

Read more:

Aaron Blaise reveals why he quit his dream job at DisneyIs this Chinese city logo a blatant Disney copy?Understand Disney's 12 principles of animation

How Do Developers See Themselves? A Quantified Look

Original Source: https://www.sitepoint.com/how-do-developers-see-themselves-a-quantified-look/?utm_source=rss

This article was originally published by SlashData. Thank you for supporting the partners who make SitePoint possible.

For the first time in our Q2 2019 Developer Economics survey, we tried to introduce developers in their own words by asking them about how they see themselves.

We provided a set of 21 words and asked them to choose up to five to form a word sketch of their personality. We also gave them the opportunity to provide their own text description.

Here’s what we got:

developers

Over half of the developers say they are logical

Perhaps unsurprisingly, nearly six out of ten developers say they are logical. And as it turns out this is the most popular choice of description across all software development sectors, except in games development. Next in line, but some way behind, are the descriptors team player and introvert at 37% each. By comparison, just 10% label themselves as an extrovert. But can you guess which programmers consider themselves less introverted? Those involved in the AR/VR and IoT sector. Interesting, right?

Moving on to a slightly more unusual pair of labels: there are slightly more dog lovers than cat people in the developer population, although the numbers are close at 15% and 13% respectively. A much greater difference seems to exist though between developers working at night (night owls, 29%) and those who prefer the fresh morning breeze (early birds, 14%).

developer

What about hobbies and spare time?

A third (33%) of developers say they are a reader, which makes it the most popular choice among spare-time activities. It is closely followed by 31% who say they are a gamer. Our data shows that developers tend to perceive themselves differently as they grow older. More than one in three developers up to the age of 34 years consider themselves to be a gamer, compared to fewer than one in four of the 35-44 age group, and fewer than one in five of the 45-54-years. Older programmers are more likely to describe themselves as readers.

“What’s this “real life” you’re talking about like? Is it similar to WoW? Does it run on a 64 bit OS?”

Other activities such as music and sport score lower, at 20% and 17%. A low 7% make LEGO models, although the popularity of LEGO seems to be very much dependent upon age. A respectable 12% of developers under 18 make LEGO models, but the proportion halves to 6% within the age group 18-24.

What about the artistic ones?

Even though a developer’s work demands a high level of creativity, just 14% use “artistic” to describe themselves. Those involved in games or in augmented reality and virtual reality development are far more likely than others to use this word to describe themselves. 21% of game developers and about 25% of AR/VR developers see themselves as artistic, as compared to 16% or less of desktop, web and backend developers.

Lastly, in out Q2 2019 Developer Economics survey, a few programmers were confused as to why we were asking the question and pondered if we were trying to set up a dating site. Well, we weren’t! We were collecting the data to create the State of the Developer Nation Report, 17th Edition.

Interested in joining forces with 40,000 developers worldwide in shaping the future of the developer ecosystem? Take our survey.

The post How Do Developers See Themselves? A Quantified Look appeared first on SitePoint.

The keys to improving your web design approach

Original Source: http://feedproxy.google.com/~r/Designrfix/~3/KRqacIBdx5Y/the-keys-to-improving-your-web-design-approach

There is no getting around the fact that in this exceedingly digitally inclined era, the presence of the online landscape that is the worldwide web is becoming more and more central to the way that we live our lives in this modern world. Considering this, it should come as no surprise that websites are becoming […]

The post The keys to improving your web design approach appeared first on designrfix.com.

React with TypeScript: Best Practices

Original Source: https://www.sitepoint.com/react-with-typescript-best-practices/?utm_source=rss

React with TypeScript: Best Practices

React and TypeScript are two awesome technologies used by a lot of developers these days. Knowing how to do things can get tricky, and sometimes it’s hard to find the right answer. Not to worry. We’ve put together the best practices along with examples to clarify any doubts you may have.

Let’s dive in!

How React and TypeScript Work Together

Before we begin, let’s revisit how React and TypeScript work together. React is a “JavaScript library for building user interfaces”, while TypeScript is a “typed superset of JavaScript that compiles to plain JavaScript.” By using them together, we essentially build our UIs using a typed version of JavaScript.

The reason you might use them together would be to get the benefits of a statically typed language (TypeScript) for your UI. This means more safety and fewer bugs shipping to the front end.

Does TypeScript Compile My React Code?

A common question that’s always good to review is whether TypeScript compiles your React code. The way TypeScript works is similar to this interaction:

TS: “Hey, is this all your UI code?”
React: “Yup!”
TS: “Cool! I’m going to compile it and make sure you didn’t miss anything.”
React: “Sounds good to me!”

So the answer is yes, it does! But later, when we cover the tsconfig.json settings, most of the time you’ll want to use “noEmit”: true. What this means is TypeScript will not emit JavaScript out after compilation. This is because typically, we’re just utilizing TS to do our TypeScript.

The output is handled, in a CRA setting, by react-scripts. We run yarn build and react-scripts bundles the output for production.

To recap, TypeScript compiles your React code to type-check your code. It doesn’t emit any JavaScript output (in most scenarios). The output is still similar to a non-TypeScript React project.

Can TypeScript Work with React and webpack?

Yes, TypeScript can work with React and webpack. Lucky for you, the official TypeScript Handbook has a guide on that.

Hopefully, that gives you a gentle refresher on how the two work together. Now, on to best practices!

Best Practices

We’ve researched the most common questions and put together this handy list of the most common use cases for React with TypeScript. This way, you can follow best practices in your projects by using this article as a reference.

Configuration

One of the least fun, yet most important parts of development is configuration. How can we set things up in the shortest amount of time that will provide maximum efficiency and productivity? We’ll discuss project setup including:

tsconfig.json
ESLint
Prettier
VS Code extensions and settings.

Project Setup

The quickest way to start a React/TypeScript app is by using create-react-app with the TypeScript template. You can do this by running:

npx create-react-app my-app –template typescript

This will get you the bare minimum to start writing React with TypeScript. A few noticeable differences are:

the .tsx file extension
the tsconfig.json
the react-app-env.d.ts

The tsx is for “TypeScript JSX”. The tsconfig.json is the TypeScript configuration file, which has some defaults set. The react-app-env.d.ts references the types of react-scripts, and helps with things like allowing for SVG imports.

tsconfig.json

Lucky for us, the latest React/TypeScript template generates tsconfig.json for us. However, they add the bare minimum to get started. We suggest you modify yours to match the one below. We’ve added comments to explain the purpose of each option as well:

{
“compilerOptions”: {
“target”: “es5”, // Specify ECMAScript target version
“lib”: [
“dom”,
“dom.iterable”,
“esnext”
], // List of library files to be included in the compilation
“allowJs”: true, // Allow JavaScript files to be compiled
“skipLibCheck”: true, // Skip type checking of all declaration files
“esModuleInterop”: true, // Disbles namespace imports (import * as fs from “fs”) and enables CJS/AMD/UMD style imports (import fs from “fs”)
“allowSyntheticDefaultImports”: true, // Allow default imports from modules with no default export
“strict”: true, // Enable all strict type checking options
“forceConsistentCasingInFileNames”: true, // Disallow inconsistently-cased references to the same file.
“module”: “esnext”, // Specify module code generation
“moduleResolution”: “node”, // Resolve modules using Node.js style
“resolveJsonModule”: true, // Include modules imported with .json extension
“noEmit”: true, // Do not emit output (meaning do not compile code, only perform type checking)
“jsx”: “react” // Support JSX in .tsx files
“sourceMap”: true, // *** Generate corrresponding .map file ***
“declaration”: true, // *** Generate corresponding .d.ts file ***
“noUnusedLocals”: true, // *** Report errors on unused locals ***
“noUnusedParameters”: true, // *** Report errors on unused parameters ***
“experimentalDecorators”: true // *** Enables experimental support for ES decorators ***
“incremental”: true // *** Enable incremental compilation by reading/writing information from prior compilations to a file on disk ***
“noFallthroughCasesInSwitch”: true // *** Report errors for fallthrough cases in switch statement ***
},
“include”: [
“src/**/*” // *** The files TypeScript should type check ***
],
“exclude”: [“node_modules”, “build”] // *** The files to not type check ***
}

The additional recommendations come from the [react-typescript-cheatsheet community](https://github.com/typescript-cheatsheets/react-typescript-cheatsheet) and the explanations come from the Compiler Options docs in the Official TypeScript Handbook. This is a wonderful resource if you want to learn about other options and what they do.

ESLint/Prettier

In order to ensure that your code follows the rules of the project or your team, and the style is consistent, it’s recommended you set up ESLint and Prettier. To get them to play nicely, follow these steps to set it up.

Install the required dev dependencies:

yarn add eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react –dev

Create a .eslintrc.js file at the root and add the following:

module.exports = {
parser: ‘@typescript-eslint/parser’, // Specifies the ESLint parser
extends: [
‘plugin:react/recommended’, // Uses the recommended rules from @eslint-plugin-react
‘plugin:@typescript-eslint/recommended’, // Uses the recommended rules from @typescript-eslint/eslint-plugin
],
parserOptions: {
ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
sourceType: ‘module’, // Allows for the use of imports
ecmaFeatures: {
jsx: true, // Allows for the parsing of JSX
},
},
rules: {
// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
// e.g. “@typescript-eslint/explicit-function-return-type”: “off”,
},
settings: {
react: {
version: ‘detect’, // Tells eslint-plugin-react to automatically detect the version of React to use
},
},
};

Add Prettier dependencies:

yarn add prettier eslint-config-prettier eslint-plugin-prettier –dev

Create a .prettierrc.js file at the root and add the following:

module.exports = {
semi: true,
trailingComma: ‘all’,
singleQuote: true,
printWidth: 120,
tabWidth: 4,
};

Update the .eslintrc.js file:

module.exports = {
parser: ‘@typescript-eslint/parser’, // Specifies the ESLint parser
extends: [
‘plugin:react/recommended’, // Uses the recommended rules from @eslint-plugin-react
‘plugin:@typescript-eslint/recommended’, // Uses the recommended rules from the @typescript-eslint/eslint-plugin
+ ‘prettier/@typescript-eslint’, // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
+ ‘plugin:prettier/recommended’, // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array.
],
parserOptions: {
ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
sourceType: ‘module’, // Allows for the use of imports
ecmaFeatures: {
jsx: true, // Allows for the parsing of JSX
},
},
rules: {
// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
// e.g. “@typescript-eslint/explicit-function-return-type”: “off”,
},
settings: {
react: {
version: ‘detect’, // Tells eslint-plugin-react to automatically detect the version of React to use
},
},
};

These recommendations come from a community resource written called “Using ESLint and Prettier in a TypeScript Project” by Robert Cooper. If you visit his blog, you can read more about the “why” behind these rules and configurations.

VSCode Extensions and Settings

We’ve added ESLint and Prettier and the next step to improve our DX is to automatically fix/prettify our code on save.

First, install the ESLint extension for VSCode. This will allow ESLint to integrate with your editor seamlessly.

Next, update your Workspace settings by adding the following to your .vscode/settings.json:

code block

<!– RM: couldn't get this code block to render properly, so used a screen shot instead

{
"eslint.autoFixOnSave": true,
"eslint.validate": [
"javascript",
"javascriptreact",
{ "language": "typescript", "autoFix": true },
{ "language": "typescriptreact", "autoFix": true }
],
"editor.formatOnSave": true,
"[javascript]": {
"editor.formatOnSave": false
},
"[javascriptreact]": {
"editor.formatOnSave": false
},
"[typescript]": {
"editor.formatOnSave": false
},
"[typescriptreact]": {
"editor.formatOnSave": false
}
}
–>

This will allow VS Code to work its magic and fix your code when you save. It’s beautiful!

These suggestions also come from the previously linked article “Using ESLint and Prettier in a TypeScript Project” by Robert Cooper.

The post React with TypeScript: Best Practices appeared first on SitePoint.

What Is “Headless” WordPress?

Original Source: http://feedproxy.google.com/~r/1stwebdesigner/~3/jpcV3QdzzI8/

There are plenty of reasons why WordPress is the most popular CMS on the planet. Chief among them are its general ease-of-use and flexibility. Both of these attributes are keys to the rise of the “headless” WordPress trend. That is, …


Can Best Practice Replace Design Research?

Original Source: https://www.webdesignerdepot.com/2020/01/can-best-practice-replace-design-research/

Heart-warming or not, co-creation with a client—the utopian ideal of shared vision—has its drawbacks. There are only so many times you can hear the words “brand strategy” before actually chewing your own face off. In the age of WordPress, Drupal and, dare I say it, Wix, it’s never been more tempting to pay lip-service to research and consultation. Instead of building a principles framework from scratch, why not roll out something from a template in a fraction of the time?

Well, in fact, there probably are situations where a simple WordPress-type approach will work really well. The trick is knowing when.

What Is “Best Practice” Anyway?

Well, exactly.

Even if you slept through design school, or didn’t go at all, you probably know the fundamentals already. And it’s true. If you stick to first principles, you won’t go far wrong. Here are some examples:

Color and Contrast: 2-3 colors maximum, use contrast to highlight important elements;
White Space: Use plenty of it, be consistent with proportions above and below;
Layout: Symmetric Grid. Err…Always. Work ‘above the fold’;
Typography: No more than 2-3 typefaces;
Logo: Long, top left, always;
Compexity vs Simplicity: Look for balance and visual interest;
Visual Hierarchy: Use color, contrast, size and complexity to highlight important elements;
Consistency: With all of the above, whatever you decide, be consistent;
And so on…

One size, though, doesn’t fit all. By bending and even breaking the rules sometimes, you’ll create designs that stand out and, more importantly, meet the real requirements of the brief.

The One Unbreakable Rule

It’s pretty hard to find a “Best Practice” that really works in every situation, but here’s one:

No matter what you’re doing, make sure you know why you’re doing it.

And, just in case you were wondering, “err…because it looks pretty?” and “because it’s easier than what I probably ought to do instead…” aren’t really reasons.

There are clearly situations where a client—whatever they may think—is best served by a simple off-the-shelf approach. Particularly if their budget is more Scrooge than Soros. The thing is, you probably still need to go through a research process to find out whether that’s the case or not.

When And How To Go Off Piste

Before or just after accepting the job, you’ll likely need to do some research with the client. This process should focus on (you guessed it) brand strategy.

Ideally, in the first instance, you’ll build a design principles framework. Whatever decisions you make after that (whether you’re going to stick to the rules or break them) should be justified with reference to the framework.

Here are some examples of situations where you might consider deviating from “best practice”:

You Want to Send a Particular Message

Take this site for a children’s fitness company, for example.

It clearly breaks all the rules about color and typeface, and a few more besides, but overall gives a sense of vibrance and playfulness, which of course is ideal for this market.

You Want to Draw Attention to Something

By ignoring the imperative to “work above the fold” and putting product and logo front and centre, candle manufacturer Waxxy draws the eye directly to their “product centred” philosophy and creates a sense of light and space:

Natale’s Clothing uses additional fonts and a broken grid layout to emphasise content and create a sense of being “out of the ordinary”.

You Want to Keep Things Clean

Legend has it, if you “put everything on the homepage” it’s good for SEO and easier for users. These days, though, there’s often a lot of information, and we prefer to have more space, even if it means a bit more browsing.

If you visit Toke’s site here, you’ll see that they break the animation taboo in a subtle and effective way as well.

These are just a few examples, there are many more. In each case the key questions to ask are:

How does it meet the brief?
How does it help brand strategy?

When To Stick To The Script

A big consideration here will likely be the client’s budget. With the best will in the world, you’re going to struggle to create a logo, design a custom typeface, and build a multi-page site from scratch on $800. If that’s what the client’s asking for, and can’t understand the limitations, maybe consider saying no!

If, on the other hand, there’s scope to negotiate, where budgets are small and, in situations where, for example, the client has a small number of products and/or services, a single page WordPress site will often be exactly what they need. Here it’s not a question of “doing the bare minimum” but rather “not doing too much”. Even so, there will probably be bespoke elements that you can change to better fit the strategy.

Another important moment to check yourself, is whenever you’re not sure if an idea works. If you can’t justify a decision with reference to your design principles framework—or at least with reference to the client’s brand strategy—then it’s probably best to err on the side of caution.

Research or Best Practice?

In a word, both.

There are definitely situations where a “first principles” approach will be exactly what the client needs. Particularly if their budget is small and their needs are simple. Even in this case, though, a great designer will take the time to understand (or help to develop) the brand strategy, and add whatever tweaks are necessary. Each client and each brand is unique, and a designer’s job, if you think about it, is to reflect just that.

When using a bespoke approach, breaking with convention can, as we’ve seen, produce interesting and stylish results. It’s important, though, that each decision makes sense, and can be linked back to the brand strategy. If it can’t, it probably shouldn’t be in the design.

And whatever you do, don’t chew your face off.

 

Featured image via Unsplash.

Source

p img {display:inline-block; margin-right:10px;}
.alignleft {float:left;}
p.showcase {clear:both;}
body#browserfriendly p, body#podcast p, div#emailbody p{margin:0;}

Collective #581

Original Source: http://feedproxy.google.com/~r/tympanus/~3/N-qK3a4dDyc/

Collective Item image

Inspirational Website of the Week: NT

On Nathan Taylor’s portfolio everything is interactive! A true digital pleasure. Our pick this week.

Get inspired

Collective Item image

Magical Rainbow Gradients with CSS Houdini and React Hooks

A great tutorial by Josh Comeau about a very creative way to animate magical gradients!

Read it

Collective Item image

Tiny Helpers

Easily find useful single-purpose online tools on this site made by Stefan Judis.

Check it out

Our Sponsor
Start your own freelance business by becoming a Divi developer

Learn how to develop websites with the most popular WordPress theme in the world and secure your success as a freelancer.

Start learning now

Collective Item image

Exploring the Web Animations API

Charlie Gerard walks us through a practical Web Animations API example.

Read it

Collective Item image

Free Font: JetBrains Mono

A really great looking monospace font made for developers by JetBrains.

Check it out

Collective Item image

An Introduction To React’s Context API

In this article, you will learn how to use React’s Context API which allows you to manage global application states in your React apps without resorting to props drilling.

Read it

Collective Item image

Design Password

A fun designer-friendly password generator.

Check it out

Collective Item image

Dark Isn’t Just a Mode

Steven Hoober takes a look at what it means to be in dark mode, why it exists, and what the research on dark mode says.

Read it

Collective Item image

Is reduce() bad?

Jake and Surma discuss the array function reduce() and answer the question if it’s good to use it.

Watch it

Collective Item image

The paradox at the heart of A/B testing

Matthew Ström writes about how the fundamental ideas of A/B tests contain a contradiction that calls their value into question.

Read it

Collective Item image

CSS4 is here!

Peter-Paul Koch proposes that web developers start saying “CSS4 is here!”, for the marketing effect.

Read it

Collective Item image

SVG Pattern Doodler

A fantastic demo by Niklas Knaack where unique art is generated by an algorithm.

Check it out

Collective Item image

Masonry layout

An exciting proposal to extend CSS Grid to support a masonry-type layout. By Mats Palmgren.

Check it out

Collective Item image

Adding separators to layouts with CSS-in-JS

Mandy Michael writes about how to add separators to a grid using a combination of :not and :nth-child with a pseudo-element.

Read it

Collective Item image

beedii

A hand-drawn Emoji set by Nitish Khagwal and Prafful Kumar.

Check it out

Collective Item image

I have been underestimating JS

Alfonso de la Rocha shares his experience with digging deeper into JavaScript to have better low-level control.

Read it

Collective Item image

Pure CSS dial button

A configurable CSS dial button demo by Jhey Tompkins.

Check it out

Collective Item image

Flexbox Responsive Form

Adam Argyle created this responsive form with four potential layouts that is powered by Flexbox.

Check it out

Collective Item image

30 seconds of code

What started with short JavaScript snippets has now grown into a snippet collection for all your development needs.

Check it out

Collective Item image

From Our Blog
3D Folding Layout Technique for HTML Elements

A tutorial on an experimental 3D layout technique for HTML elements with endless possibilities.

Check it out

Collective #581 was written by Pedro Botelho and published on Codrops.

The Mythical Mythical Man-Month

Original Source: https://www.smashingmagazine.com/2020/01/mythical-man-month/

The Mythical Mythical Man-Month

The Mythical Mythical Man-Month

John Foreman

2020-01-15T13:00:00+00:00
2020-01-16T21:09:01+00:00

As a product leader at a tech company, I am a bottomless pit of need. My job as the Chief Product Officer at Mailchimp is to bring the product to market that’s going to win in a very competitive space. Mailchimp’s aspirations are high, and to realize them we need to deliver a substantial amount of product to the market. Oftentimes to many at the company, it feels like we are doing too much. We’re always at the edge of the wheels coming off.

And when you’re doing too much and you decide to do more than even that, you will inevitably begin to hear The Mythical Man-Month referenced. It’s like one of those stress-relief balls where if you squeeze one end, then out pops the Mythical Man-Month at the other end.

Published by Frederick Brooks back in 1975 (you remember 1975, right? When software development 100% resembled software development in 2020?), this book is rather famous amongst software engineers. Specifically, there’s one point in the entire book that’s famous (I’m not convinced people read anything but this point if they’ve read the book at all):

“…adding more men lengthens, not shortens, the schedule.”

Easy fix. I’ll just staff women to projects from now on (see the Return of the King and the fight against the Witch King of Angmar).

But let’s assume that Brooks’ point holds regardless of the gender identification of the software engineers in question. Here’s the point: software is difficult to build with lots of complex interdependencies. And everyone needs to work together to get it done.

As I add people to a team, they need to be onboarded and grafted into the project. Someone’s gotta carve off the right work for them. The team has to communicate to make sure their stuff all works together, and each additional person increases that communication complexity geometrically. And at some point, adding people becomes a burden to the project — not a benefit.

Here’s the graph from the book illustrating that point:

As you add people to tasks with complex interdependencies, progress grinds to a halt

Add people to go slow (Large preview)

This is absolutely a fair point. That’s why I hear it so much at work. Exhausted individual contributors and exhausted leaders alike will toss it out — we can’t go faster, we can’t do more, stop the hiring, read The Mythical Man-Month and despair! The only solution is apparently to stop growing and kill some projects.

When I as CPO say, “we’re going to do this thing!” the reply then is often, “OK, so then what are we going to kill?” The Mythical Man-Month turns product development into a zero-sum game. If we want one thing, we must stop another. Now, that’s an actual myth, and I call hogwash.

And taken to its pathologically misinterpreted (we’ll get to this) conclusion, the book apparently says that the fastest tech company is one that employs all of four people — four men, apparently. Anything more just slows it all down. Someone should send Amazon, Apple, and Google copies of the book, so they can fix their obviously bloated orgs.

The only problem with this approach is that in a space where the competition is growing and iterating and executing — merely tamping organizational growth — editing and focusing the workload to match can be a recipe for extinction. You’ll be more sane and less stressed — right until you’re out of a job.

And as the owner of product management for my company, I’m not unsympathetic with this need to slow down and focus. We must ruthlessly prioritize! No doubt. But running a product is an exercise in contradiction. I must prioritize what I’ve got while simultaneously scheming to get more done. But what am I to do in the face of the Mythical Man-Month?

Surprisingly, the answer to this question comes from Brooks’ same book. Here’s another graph in the same chapter:

Partitionable tasks requiring communication can still add workers and go faster

(Large preview)

There is a battle in scaling product development. If the work you’re trying to accomplish is purely partitionable, then go ahead and add people! If your work is all connected, then at some point adding people is just wrong.

If someone says that I absolutely have to kill a project in order to start another one, that’s just not the case. If the two projects require very little communication and coordination, then we can scale away.

This is why adding cores to a CPU can increase the experienced speed of your computer or phone up to a point — something engineers should know all about. Sure, adding cores won’t help me complete a complex single-threaded computation. But it may help me run a bunch of independent tasks.

The conflict for a product executive then between scaling and ruthless prioritization can be managed.

You ruthlessly prioritize in places that are single-threaded (the backlog for a product team let’s say).
You scale by adding more cores to handle independent work.

Very rarely, however, is anything fully-independent of all else at a company. At the bare minimum, your company is going to centralize supporting functions (global IT, legal, HR, etc.) leading to bottlenecks.

It’s All About Dependency Management

The job of a product executive then becomes not only creating a strategy, but executing in a way that maximizes value for the customer and the business by ensuring throughput and reducing interdependency risk as much as possible. “As much as possible” being key here. That way you can make the company look as much like the latter graph rather than the former. Interdependency is a disease with no cure, but its symptoms can be managed with many treatments.

One solution is to assemble a strategic direction for the company that minimizes or limits dependency through a carefully-selected portfolio of initiatives. The funny thing here is that many folks will push back on this. Let’s say I have two options, one where I can execute projects A, B, and C that have very little coordination (let’s say they impact different products), and another option with projects D1, D2, and D3 that have tons of interdependencies (let’s say they all impact the same product). It’s often the case that the Mythical Man-Month will be invoked against the former plan rather than the latter. Because on paper it looks like more.

Indeed, it’s less “focused.” But, it’s actually less difficult from a dependency perspective and hence fairs better with added personnel.

Keep in mind, I’m not saying to choose a bunch of work for the company that’s not related. Mailchimp will not be building a microwave oven anytime soon. All work should drive in the same long-term direction. This approach can increase customer experience risk (which we’ll discuss later) as well as the burden on global functions such as customer research. Keep an eye out for that.

Another treatment is to create a product and program management process that facilitates dependency coordination and communication where necessary without over-burdening teams with coordination if not required. Sometimes in attempting to manage coordination so we can do more we end up creating such onerous processes that we end up doing less. It’s a balance between doing too little coordination causing the pieces to not inter-operate and doing too much coordination causing the pieces to never get built because we’re all in stand-ups for eternity.

The contention in the Mythical Man-Month is that as you add folks to a software project, the communication needs to increase geometrically. For example, if you have 3 people on the project, that’s 3 lines of communication. But if you have 4, that’s 6 lines of communication. One extra person, in this case, leads to double the communication! Fun. (This is, of course, an over-simplification of communication on software development projects.)

Different people have different roles and hence receive different amounts of autonomy. Perhaps the project manager needs to communicate with everyone on the team. But does an engineer working on the API need to communicate with the product marketer? Or can the marketer just go through the product manager? A good process and meeting cadence can then eliminate unnecessary communication and meetings. The point is that Brooks’ intercommunication formula is an upper bound on coordination, not a death sentence.

Finally, use tools, principles, and frameworks combined with independent work over actual collaboration to combat interdependency symptoms. For example, if I can coordinate two teams’ key performance indicators (KPIs, i.e. measurements of success) to incentivize movement in more-or-less the same direction, then their independent work is more likely to end up “closer together” than if their KPIs incentivize orthogonal movement. This won’t ensure things fit together perfectly, only that the work I need to do to make them fit together in the future is less than it might otherwise be. Other examples might include using “even-over” statements, design systems, and automated testing.

So there’s a start. But interdependencies take on lots of forms beyond code. Let me give an example from Mailchimp.

Customer Experience Risk: The Hidden (But Acceptable?) Cost Of Firewalling Work

Since Mailchimp’s customer is often a small business owner who’s a marketing novice (and there are millions of small business owners turned marketers worldwide), we must deliver an experience that is seamless and immediately understandable end-to-end. We’re not afforded the luxury of assembling a Frankenstein’s monster of clouds via acquisition the way that enterprise players can. We can’t paper over poorly-integrated software with consultants and account managers.

As a consumer product (think Instagram or a Nintendo Switch or a Roomba), we have to be usable out of the box. For an all-in-one marketing platform meant to power your business, that’s hard! And that means each thing Mailchimp builds must be seamlessly connected from an experience perspective.

But, perfectly partitioning projects then introduces experience risk. It’s not that the code can’t be written independently. That can be achieved, but there’s still a risk that the products will look like they’ve been built by different teams, and that experience can be really damn confusing for the user. We bump up against Conway’s law — our customers can tell where one team’s work ends and the other team’s work begins.

So you try to connect everyone’s work together — not just on the back-end but on the front-end, too. In the ecosystem era, dominated by CX excellence from players like Apple, this has become almost table stakes in the consumer space. But this is a Mythical Man-Month nightmare, though not from an engineering perspective this time. It’s from a service design perspective. As we add more people to all of this “end-to-end” connected work, everything slows to a collaborative crawl.

Other than the third fix I noted above, using tools and frameworks rather than over-watchers and stage-gates, there is another release valve: make some deliberate customer experience trade-offs. Specifically, where are we comfortable releasing an experience that’s disconnected from the rest (i.e. that’s sub-par)? Accepting risk and moving forward is the product leader’s job. And so you use some criteria to sort it out (perhaps it’s not holding new, low-traffic areas of the app to the same experience standards as your “cash cows”), and make a decision (e.g. iteration and learning over polish on adjacent innovations). This, of course, extends beyond design.

You can always short-circuit Brooks’ law by choosing to firewall efforts, including efforts that, in a perfect world, shouldn’t be firewalled!

I’ll caveat this by saying the software I build doesn’t kill anyone. I wouldn’t advocate this approach if I were building a medical device. But at a marketing software company, I can deliberately isolate teams knowing that I’ve increased the odds of incompatibility as a trade-off for scaling up personnel and moving faster.

I’m sad to admit that the Mythical Man-Month is a reality at my company, and I suspect at yours as well. But it’s manageable — that’s the bottom line. Parallelization and dependency mitigation offer us a way out that limits the near-mythical status of the Mythical Man-Month. So the next time the stark dichotomy is raised at your company (scale to go slower or give up your aspirations) remember that if you’re smart about how you line up the work, you can still grow big.

Don’t Forget About The Softer Side Of Scaling

Keep in mind that managing the Mythical Man-Month will not stop engineers from invoking it like dark magic. They’re invoking the principle not only because there’s some truth in it, but because scaling just sucks (always) from an emotional and cognitive perspective. If I think I’m paid to write code and solve customer problems, the last thing I wanna do is change up my routine and figure out how to work with new people and a larger team.

As you scale your company, remember to empathize with the pain of scaling and change. A team that adds even a single member becomes a whole new team from a trust and cultural perspective. People are tired of this change. That means that while you go about managing and mitigating the Mythical Man-Month, you’ll need to manage the emotions surrounding growth. That’s perhaps the most critical task of all.

Strong belief in the Mythical Man-Month by a team in and of itself can bring its conclusions into reality. It’s basically the equivalent of the belief in flying in Peter Pan. If the team believes that scaling will slow them and they don’t buy into the change, they will indeed slow down.

So as you work to manage dependencies and introduce tools to help scale, make sure you clearly communicate the why behind the practices. Get folks involved in selecting the work and processes that mitigate man-month issues, because when they’re part of the change and their outlook changes, suddenly scaling becomes at least culturally possible.

Smashing Editorial
(ra, il)