Wednesday, October 05, 2005

Talking about software company structures – Part 1

There’s been lot of talks about software company structures, different roles/designations, responsibilities of each role etc. The company I worked for earlier has gone through a restructure and another which I worked earlier is planning for one. And Dinesh is talking about the responsibilities of enterprise architects.

So in a series of posts I’m going to express my views on how a small scale company with an average of 50 employees should be structured, what are the roles, designations and responsibilities etc. this would be how I think things should be. I’d talk only about roles and designations related to the core business.

The main work force in a software company small or large is no doubt engineers who develop and test the software. I’ll name this role as Engineer. There are three main categories, that could be identified in this level; Software Engineers, User Interface Engineers and Quality Assurance Engineers. (In a small scaled company testing may or may not be a specialized task)

The definition of the responsibilities of a Software Engineer (developer) would be “To develop software elements and components” this would include a certain level of designing within those elements and components. A UI Engineer’s responsibility would be to “Design an UI based on requirements and guidelines provided”. A QA engineer’s responsibility is to “Test a certain set of functionality in the product based on project standards”.

I’d clarify “Engineer” as a role, mapped to a project. Designation could be stretched to facilitate a sense of career growth within the same role.

An entry level engineer could be designated as Assistant or Associate Engineer; a more senior engineer could be designated as a Senior Engineer.

Designations could be used as a measure of competency for Engineers when assigning tasks. An Assistant or Associate Engineer should always be deployed under guidance of an experienced Engineer and a Senior Engineer could be assigned with more complex tasks and greater responsibilities to empower him/her within the project. If the project is small and requires only one engineer, it should be assigned to a Senior Engineer. A Senior Engineer also can play a higher ‘role’ in a smaller project with 2~3 engineers.

This eliminates the risk of failure and mishaps which could arise if a task is assigned to a less experienced engineer and is more profitable to the company enabling it to harvest full potential of the engineers.