How Elon Musk’s 5-Step Process Applies To Software Development

In a fantastic, super geeked-out interview (courtesy of the Everyday Astronaut), Elon Musk breaks down the 5-Step Process he’s implemented to develop everything from Tesla electric cars to Space X rockets. One of the great things about Elon’s explanation of each step is that he speaks in a very blunt manner and uses examples of the mistakes he and his teams have made that drove him to implement these steps. As he explains each step, it occurred to us how these exact same steps can and should be applied to developing software products.

STEP 1. Make Your Requirements Less Dumb

In this clip, Musk says “The requirements you were given are definitely dumb — and it’s particularly dangerous if a smart person gave you the requirements because you might not question them.” Basically, he encourages everyone to assume that there are things wrong with the requirements they’ve received so that they feel much more free to ask questions and make them better (or, less dumb).

In addition, Musk requires all requirements to come with a person’s name attached to them – not just a department name. This way, a person takes responsibility for the requirement and everyone knows who to go to with questions.

How this relates to software development

Here are a few real-world examples of scenarios that we run into a lot with our clients:

  • We ask “Why is this a requirement?” The client says “That’s what the business team wants.”
    The fact that product teams often do not question or challenge why a requirement was a requirement in the first place probably speaks more to a problem with the corporate culture dynamic than anything else. In other words, often times product teams are put in a position of focusing purely on delivering what they are asked to deliver — without being empowered to ask “why?”.
  • We ask “Why does your current software product function this way?” The client says “That’s just how it’s always functioned.”
    This one actually happens quite a lot and it’s often the result of: a product team that can no longer “see the forest for the trees” because they’ve been so close to the product for so long, or new team members don’t feel comfortable questioning things until they’ve earned their stripes.
  • We ask “What drove this to become a requirement in the first place?” The clients says “Feedback from our users”. Then we ask “How many users and what was their specific feedback?” The client says “I don’t know. It’s just what we were told.”
    This also happens quite a lot and it often causes product teams to get sidetracked with enhancements or new requirements that should have a much lower priority than others in their backlog. It’s sort of like the “The squeaky wheel gets the grease” treatment.

Ideally, if product teams followed Elon’s “Step 1” advice, they would attach a name to every requirement and create a culture whereby everyone felt not only empowered but expected to ask questions about the requirements they were given before they spend tons of time designing and developing them.


STEP 2. Try Very Hard To Delete A Part Or Process

In this clip, Musk says “The bias tends to be “let’s add this part or process ‘in case’ we need it” – but you can make ‘in case’ arguments for almost everything.”

How this relates to software development

In art school, they teach “When everything is important, nothing is important”. In UX design, when you make the visual weight of too many things on a given screen the same, you create a visual hierarchy that does not inform the user about what is important vs less important. Therefore, whenever you add something you need to always consider whether it is worth degrading the visual weight of other existing things or if you should remove existing things to make room for the new thing.

This also holds true for adding functions and features to a software product. As Musk explains, the tendency is for product teams to add more and more features to their product when they should be equally considering what they can remove. After all, if the end goal is to make a better product but the bells and whistles you want to add make your product more difficult to use, are they really worth adding?

As this relates to a “Process”, a few years ago we were hired to redesign an existing product but the first priority was to get the live product working. Soon after we engaged with our client, we fixed the existing code and were ready to deploy it – but we couldn’t because the client’s development team was still working out the details of their new CI scheme and how our team was going to get integrated with it. We suggested that, for this particular release, we simply push the updated code files to production manually without CI in place. Then, we will shift our focus to the redesign effort while the client development team takes their time to implement a proper CI scheme for us to use. Processes can be good but when teams get so programmed to follow them, it can prevent teams from considering simple, logical solutions.


3. Simplify or Optimize

In this clip, Musk talks about how he purposely makes this his third step so that it helps prevent teams from “optimizing a thing that shouldn’t exist”. In other words, it’s great that you were able to optimize the performance of that new feature – but did you consider whether it was needed in the first place?

How this relates to software development

This one speaks directly to the creation of a good user experience. When we design a software product, we test our designs before it is developed. When we develop and deploy the tested design into production, we monitor how it is being used and even A/B test different designs to further optimize it. Sometimes our tests reveal what we call a “design thorn”, which is an element in our design that we are struggling to optimize but it continues to cause problems for the users. In many cases, the best way to handle a design thorn is to simply remove it.

This also applies to application and infrastructure optimizations, which can speed the performance of a product and help keep it more stable. A product that performs quickly, is error free, and is always available is one that is far more likely to create a great user experience.


4. Accelerate Cycle Time — or, “Go faster!”

In this clip, Musk says “Go faster — but don’t go faster until you’ve worked on the other 3 (steps) first.”

How this relates to software development

In Agile Development, “Velocity” is an indication of the average amount of Product Backlog turned into an Increment of product during a Sprint. So to increase Velocity, it would help if you made your requirements “less dumb”, deleted features or processes, and simplified or optimized your product. Once you’ve done these, you can be in a much better position to “Go faster!


5. Automate

In this clip, Musk talks about the importance of never starting with automation first and going through the Steps in reverse. This is our favorite video because Musk tells a great story where he’s made this exact mistake when they were struggling with a fiberglass mat that was mounted to the top of the Tesla battery. The installation of this mat was “choking the whole production line”. So, he and his team spent a lot of time working on ways to optimize the automation (robots) until one day Musk finally asked the The Battery Safety Team, “What the hell are these mats even for?”. They told him they were for “noise and vibration”. So he went to the Noise and Vibration Team, and they said they were for “fire safety”. So, they placed microphones and sensors inside 2 different cars and tested the noise and vibration with the mats in and with the mats out and they found no difference whatsoever. Needless to say, the mats were removed.

How this relates to software development

This one can relate to everything from a simple ticketing system to an elaborate e-commerce website. Both require people, processes and technology to be in place before any true automation can be implemented. Much the way the robots on the Tesla assembly line were not implemented until they were designed, tested, and optimized for each step of the assembly line, you should not automate anything until you can support that automation.

In one software product we made for a client, they wanted a Task Management feature that auto-generated tasks for people based on specific triggers within the system. For example, “When X data is entered, generate a task for Team A”. The problem was, the client didn’t have the team to support all the auto-generated tasks — so tons of tasks were getting generated and left open in the system and the users eventually just ignored the whole Task Management feature.


The Importance of a Minimum Viable Product (MVP)

Even though this one isn’t a ‘Step’, it’s a great clip where Musk talks about how the first few Starship rockets all blew up for reasons that were not on their “Risk List”. In other words, the first Starship rockets they launched helped them uncover flaws that no one on their teams expected, which is one of the main points of launching an MVP first. You simply do not know, what you do not know.

How this relates to software development

Too many software product teams have a hard time whittling down the backlog of their product requirements to something that could be termed a Minimum Viable Product. We often hear excuses like “It’s really not a ‘Viable’ product without all its features.”, which is just nonsense. More often than not, a product can be broken down into a logical set of releases that grow from an MVP to and official “1.0” release. Whether you release only one set of features to a small sample of user personas or you release only the core features of the product that may still require manual work to be done on the back-end, and MVP is critical to the success of any product launch.

5 Reasons Why You Should Hire A ‘Dedicated UX Team’

Lately, more and more of our clients are taking advantage of our ‘Dedicated UX Team‘ engagement model whereby we carefully select and assign a group of UX resources to our client’s project(s) throughout the entire duration of our engagement. It seems too many businesses have experienced failed relationships with design firms because the firm constantly reassigns resources from one client project to another. So, unless you specifically request your consulting firm to provide you with a Dedicated Team, you’re likely going to engage in a time and material project where there’s no guarantee that the resources that start on your project are the ones that stay on your project.

Here are 5 reasons why you should make sure you hire a dedicated team:

1. Intellectual Capital

A lot of our clients have businesses that require a deep understanding of complex complicated business rules, regulations and compliance laws, technology requirements and limitations, and even unusual nomenclature and acronyms. So, there is simply no way a resource could be assigned to a halfway through a project’s completion and expect to create a great software product without that deep understanding. With a Dedicate Team, all the knowledge that is gained throughout a project is never lost. In fact, often times we end up presenting things about our client’s business that they didn’t even know about because our methodology requires us to perform specific research and user shadowing activities that were never done before.

2. Continuity & Consistency

Whether a given team people are designing a product, a website or a building, it is important that the design maintains a certain level of continuity and consistency throughout its complete end-user experience. Since a ‘Dedicated Team’ works on a project from its beginning, the design of your product will be far more consistent than if you had team members swapping out throughout your project. Any great design has baked-in design standards, rules and characteristics that are known by those who create them and those that document them. If you don’t maintain continuity and consistency in your product’s design, you’re users will surely let you know about it.

3. Trust & Stability

Throughout the course of any project, team members begin to develop a trust in each others abilities and recommendations. This trust adds stability to the team and makes the overall team perform much better and faster because everyone spends less time doubting each other and more time getting their jobs done.

4. The Best of Each Role

A great UX Team is typically comprised of Lead UX designer, UX designers, Front-end Developers, a Project Manager and sometimes other supporting resources such as researchers, testers and analysts. When you have a Dedicated Team, you can make sure that each resource on the team is focused on what they’re really good at instead of requiring team members to stretch their abilities to do things they’re not good at. The bottom line is that it is simply never a good idea to have Developers designing and Designers developing.

5. Enhanced Long-lasting Relationship

Some firms shield their clients from getting to know exactly who is doing the actual work for them. We believe in building a long-lasting relationship between our clients and their assigned team members. In fact, our clients get to know each team member on a first name basis, which sounds petty but this kind of enhanced relationship leads to better communication and a sense of comradery that helps the team gel and work more better together.

What is a Hybrid App and When Should You Choose it?

To a user, a hybrid app is almost indistinguishable from a native app. They look and feel like native apps and users can find them in the App Store. Hybrid mobile apps allow users to take photos, track physical activity, receive push notifications, and more. Many of the most popular apps available in app stores today are actually hybrids. Twitter, Uber, Instagram, Evernote and even the Apple App Store itself are hybrid apps*.

*Source: http://blog.venturepact.com/8-high-performance-apps-you-never-knew-were-hybrid/

Read more

User Shadowing on The Trading Floor at Morgan Stanley

For about four months, I had the pleasure of working on an exciting new project for Morgan Stanley. The details of the project can not be disclosed for obvious confidentiality reasons but I can speak in general terms about the experience. As with most UX projects, we like to spend as much time as we can observing users in their natural work environments while they perform their daily activities. In the case of Morgan Stanley, this meant spending a good amount of time in the trenches, on the trading floor, sitting with the traders and sales reps. My job was to not only observe the users but also build a sense of empathy for how they perform all their job activities. In fact, one of the main purposes of user shadowing is to build empathy so that you can see your design through the eyes of the users. Read more

Why You Need a UX Team (Part 1)

In Part 1 of this series on “Why You Need a UX Team”, we examine what specific roles, responsibilities and skill sets a UX Team typically brings to the table. Read more

Sometimes, To See “The Big Picture”, You Need To Draw A Big Picture

To truly understand and design the best possible information architecture for an application or website, find the biggest whiteboard in your office and start drawing.

Read more

Why User Experience is More Than Just User Interface Design

If I’ve ever had the pleasure of working with you or for you, you’ve probably heard me preach on my soapbox more than once about how User Experience is so much more than just the design of a user interface. User Experience is, as the term implies, about everything and anything that can impact the experience a user has when interacting with a software product or website.  In this post, I touch on a few areas that can have a direct impact on a user’s experience – but have nothing to do with UI design. Read more

The Healthcare.gov AbomiNation

A Lesson In How Not To Make Software

The recent failed rollout of Healthcare.gov is riddled with so many issues that it’s hard for the average American to comprehend why it happened and who is to blame. Even the mainstream news reports appear to be confused and scattered about what caused this #EpicFail. Read more

What Is Responsive Web Design?

Responsive Web Design is designing and coding the front-end of a website or app so that the layout “responds” or automatically adjusts (using CSS) to a layout that is optimized for user’s display size. Read more

“Go Slow, To Go Fast” When Designing and Building Software

The concept is simple enough: Take the time to do something right the first time and you will inevitably complete the task faster and better than if you rushed it to “just get it done”. Read more