Friday, May 29, 2015

Primary Roles vs Supporting Roles in Software Development Companies


There are 2 primary roles within any software development organization:  Engineering and Sales.
All other roles are secondary, but play a role in supporting one or both of the primary roles.  Secondary Roles include: product management, project management, program management, user experience, quality assurance, marketing, business analysis, technical writing, customer support, etc.

In a way this has a lot of parallel's to the concept of Pigs and Chickens in Agile Methodologies. Engineering and Sales are representative of the Pigs.  They have skin in the game and are responsible for creating the product and getting people to buy it.  The secondary roles, or Chickens, are supportive roles to help make the primary roles successful.

Surprisingly, it is not uncommon for the organization to get this wrong, which can have catastrophic consequences.  From a development point of view, the most common mistake is making engineering a secondary role.  Most often switching places with Product Management.

Engineering software solutions is half art and half discipline.  Because of this, driving solution design without input from the engineers themselves will almost always lead to a less than ideal technical solution.  Unfortunately, everyone likes to be part of determining the solution.  This is not a problem as long as people understand that there are always trade-offs that need to be made.  If time of delivery and cost are not an issue (and they always are), then we can all work together to design the perfect solution.  Too often time & money is spent in gold-plating a solution instead of building a product that delivers value to the customer.  This could be as simple as adding features or functionality that is easy to market or demo's well, but doesn't really solve a problem.  These features can be expensive to build and maintain and ultimately lead to a poor customer experience because they don't return on the marketing or sales promise.