If you’ve ever heard the term “hard coded,” you’ll have a good foundation for premise of this short essay. Hard coding in the programming world is when you embed data directly into the source code of a website or application rather than getting it from an external source such as a database or a content management system.
Generally, it’s looked down upon because it’s an unscalable or non-flexible way of programming. In order to make changes to the website or app, it requires a developer to change the source code and release an entirely new version rather than that data updating dynamically.
Let’s take Instagram for example. If they created the feed by simply building a long list of pictures, avatars and comments, the only person who could update that list would be the developers who built it. To add a new picture, they would manually insert the picture into the code and you would have to download a new version of the app to see it. Seems ridiculous right?
In product design, I see a lot of designers who create beautiful designs but they effectively “hard designed” it into the context of the current iteration of the product. As soon as something changes, the pattern breaks.
As an example, let’s say you designed a tool bar that fits three buttons in it comfortably.
As soon as your team adds a fourth option… what happens? Do all four suddenly have reduced widths, cramming the text too close to each other? Does it wrap so that one action button is all alone on the second line? Does the menu scroll horizontally?
The way in which you design that tool bar can either be a high leverage design pattern that sets your team up for rapid product expansion as they create new features, or it can bottleneck you into redesigning that element every single time a new feature is released.
High-leverage, flexible design patterns are not only beautiful in the current iteration but allow room for creativity, iteration, expansion and flexibility within the product while maintaining the integrity of its original purpose and function.