Here is the truth: they are not doing something crazily different.
Most probably, their coding skills are quite the same you have! They just have some in-demand skills which accompany their coding skills and which they are known for.
So, what can we learn from those people and how can we level up our game?
DEMO model is a handy abbreviation for a high-level set of skills:
- 💼 Domain Knowledge
- 🔧 Engineering
- 📢 Marketing,
- 👑 being Outstanding.
💼 Domain Knowledge
Domain Knowledge is very straightforward in its essence: knowing the rules of the business you are in.
You should understand how processes tick, how the rules are made, what viable strategies for your domain exist.
You should have the perspective (getting a big picture) of the business you are in.
Knowing the domain is beneficial in several ways:
- It makes communications easier.
- It helps to understand decision being made by "business people".
- It helps to predict how the system may scale and change.
Business is a system. All things your create as a Developer exist withing this system and therefore are affected by it's rules.
If you have never thought about business as a system, there is a great book to introduce you to this concept: "E-Myth Revisited".
In general, Engineering is creating systems with predictable systematic effects. Those effects are what people eventually pay for.
In our context, Engineering consists of:
- Code construction.
- System design.
- Maintenance and Operation.
- and more...
Most programmers focus too much on code construction. New frameworks, best practices, OOP vs Functional languages - those topics do not matter as much.
If you find yourself focusing on code, you are missing a bigger picture:
We are paid not for producing well-crafted code. We are paid for solving problems with technologies.
Engineering is the most obvious part of DEMO model. Nevertheless, developers too often ignore "unrelated" part of the craft. Do not do that - expand your fundamental knowledge.
Marketing is the most negligible part of DEMO model. But marketing is the activity which multiply value your create.
Marketing is making people who need your app or service know that this solution exists.
Knowing marketing will help you to answer these questions:
- How and Why people are buying your product or service?
- Who are those people?
- How do you get in touch with them?
- Why do we need to ship some feature before specified deadline?
- Why most people focus on features?
If you need an introduction to marketing, start with "Crossing the Chasm". This book is a bible of high-tech marketing.
👑 Being Outstanding
How can you be outstanding?
Ther are a lot of ways to do that, but most important things are that:
- You work results should be visible.
You need to learn how to talk about your results and surface hard-to-evaluate things. Teaching other people to solve the same problems is a very good way too.
- You should be recognizable among your colleagues.
Lending a helping hand often helps with that. As well as proactively taking responsibilities for cross-cutting things on the project.
- You should be known outside your work for your specialization.
Ideally, you want to be known among decision-makers (CEO/CTO/Hiring Managers/Business Owners) for your ability to solve problems with technologies. At the very least you need to be publicly recognizablein your professional community.
This is where public speaking and networking help a lot.
All in all, being Outstanding boils down to Communication skills. One profound read that has completely changed my vision of being an effective engineer is this study from Bell Labs. It is considered an essential reading for Metadevelopment members.
How to Put This Knowledge Into Practice?
First, it's a good idea to make a basic self-assessment to understand how do you fit into the model. Answer this questions:
- How much do I know about the business I am in?
- What aspects of Engineering am I familiar with? Which aspects do I consciously use in my day-to-day work?
- Do I really understand why people buy the product/service we are building?
- Do people around know that I have that knowledge? Is it visible and understandable from my CV?
Second, make a plan on how to improve in the areas where you do not have much knowledge.
Start with the essential reading mentioned above. Find people who know more than you and learn from them.
Third and most important - put your new knowledge in practice!