I have worked with some of the brilliant product groups at Microsoft, Google. I have worked with startups to build exciting technologies. I have worked as a software consultant to world’s best companies. And now, I run a software development company.
I have been thinking about the general state of software engineering which majorly boils down to building useful quality software and ship them on time. This heavily relies on engineers who are building the software. In my experience – there are two kinds of engineers I met – software engineers and product engineers. Among many, these are high-level differences I experienced on how they approach their work.
|Software Engineers||Product Engineers|
|There are often reactive and usually finish a task assigned to them without seeing the big picture.||They understand what problem does the feature solves for the user before starting the development to ensure scope is well defined.|
|They often delegate quality to a ‘test or QA’ team.||They take ownership of quality from development to deployment and focus on writing automated test cases.|
|They often move on to next set of features after the code is deployed and leaves it to the support team to handle production issues.||They think about creating alerts in production at the time of deployment so they get notified when something goes wrong.|
|They are often indifferent to how the feature is used in the product once shipped.||They put analytics in place to determine usage/success of the feature.|
In a nutshell, product engineers take ownership of the feature end to end rather than delegating to others. That’s the biggest difference I have observed which results in a great software product. It’s a habit, and just like any habit, take years to develop.
This has been guiding principle to me and my team at JTC. If there are sustainable engineering personal practices that you have cultivated, please do share in the comment.