Many Software Developers have a strange perception of their work, formed under the influence of their employers, colleagues and industry culture, treating their work as a competition with their colleagues.
Many managers have even stranger perception, treating people as machines on an assembly line, trying to optimize the performance of the business system without understanding the human factor, fundamentals of knowledge work and software product development in general.
Many people are wondering, whether software development is an art, craft or engineering. Or a combination of all those aspects.
Also, there is a tendency to ban the word “career”, as if it is something dirty, political and unethical. Building your career is not the way to make more money. It is a way to empower you so that you can make what you really want.
At Metadevelopment, we try not to differentiate between work and life. Our work is an essential part of life. We came into Software Development because we want to create, build and enhance the world around us. Some people indeed have come to this industry just for money. Most of them have discovered that Software Development is a creative and empowering endeavour.
First and foremost, Software Engineering is a knowledge work. Our main capital is knowledge. We spend substantial time on searching for information and learning new things. We use critical and creative thinking to solve problems. We experience the state of flow. We require mastery, autonomy and purpose for day-to-day motivation.
Second, Software Engineering is a cross-disciplinary subject, including at least technologies, science, psychology, sociology and ethics.
Third, Software Engineering is tightly coupled to business and business systems. We work within businesses and with business systems, but we often neglect this relationships.
Software Engineering and Business
There is a huge, but barely noticeable misfit between business and software development. Business wants to identify and solve real-world problems for real people. Most developers want to solve hard challenges using cool technologies.
Those two worlds does not always overlap.
There are a lot of resources and studies to figure out success, efficiency and impact of software projects. Individual efficiency is always linked to project success and team performance. It's not enough to be productive and single handedly produce high-quality solutions for problems. It's also necessary to solve right problems and enable others (including your future-self) to easily change the solution in the future.
If you want to become an expert in your field and help other people you need to learn how to identify and solve real-world problems using technologies and collaborating with other people.
It means you need to understand both engineering and business at the end of the day.
Focus on Development
Many developers think that it’s enough to be able to just build software from scratch. What they are missing is a bigger picture.
There is a definition of Software Engineering from IEEE90: “Software Engineering is an application of systematic, disciplined, quantifiable approach to development, operation and maintenance of software.”
Notice the highlighted words: development, operation and maintenance. This is what you are expected to do as a software engineer.
At Metadevelopment, we differentiate four levels of professional maturity: programmer, developer, engineer and entrepreneur. We have a model of required skills for all those levels.
Programmer is a solo creator capable of delivering a working app. Developer is a team player, capable of working in an enterprise environment and building parts of the bigger system. Engineer is a systems maintainer, capable of analysing complex environments and non-technical factors to make systems sustainable. Entrepreneur is an opportunity identifier, working with business systems on a high strategical level.
Focus on Hard Skills
At the beginning of our careers we spend most time and focus on getting hard skills: debugging, code construction, systems design, requirements analysis, etc.
It’s only natural that we start thinking that there is nothing more important in our industry than hard skills.
But this is not quite true! There are studies showing that “Star Performers” are differentiated from normal workers on criteria different from hard skills!
Here is an interesting test for you. It will show your attitude towards performance of software engineers. It has just 12 questions. You can easily answer those in 5 minutes.
How many statements out of this 12 are true:
- Star performers are born, not made
- Star performers are smarter than average performers (have higher IQs, are better problem solvers, or are more creative)
- Star performers are more driven and ambitious than others.
- Star performers have more leadership skills than others.
- Clean desk people are more likely to be star performers than messy desk people.
- Detailed time management and organizational systems are keys to high productivity.
- Star performers work longer hours and harder than average performers.
- Star performers are more satisfied with their jobs than average performers.
- Star performers are successful primarily because they play organizational politics and give slick presentations to upper management.
- Minorities and women can seldom be as productive as people who are part of the "old boy" network.
- People cannot sustain a doubled rate of productivity improvement for long time periods.
- I would rather have a team with one star performer supported by four average performers than a team with five performers who are all in the top 5 percent.
Ok, so what is your answer?
Now, the revelation: neither of those statements are true!
We can totally understand your scepticism on that.
This is why we suggest you reading a research-based brochure called “STAR Engineer”. Over a thousand engineers from Bell Laboratories, 3M, and Hewlett-Packard contributed to the original research as both collaborators and subjects.
There is a similar study for managers called “Project Oxygen”.
This two studies may totally change your perception of Software Engineering.