When I was a child, I wanted to become a locomotive driver and engineer. But later, I had changed my wishes. Eventually, I became a software engineer, as I decided it’s a career that fits me very well, although I would have loved to have skills to do other “more interesting” things:
As software engineer, initially I though I’d rather be developer only, and, at most, become a software architect (which is, in my opinion, just a developer with improved skills and experience). But today I find myself doing a bit, or a bit more, of everything else in the domain, too:
For clarity, in my opinion, these are the main responsibilities of each primary role in the software engineering field (as listed in the second chart):
- Project Manager: based on preliminary discussions with other stakeholders, decides the project development methodology (such as traditional or agile), establishes the development team and the project planning based on the available budget, and follows the project and the team at all times during development;
- Analyst: gets the requirements from the customer and writes them down in a clear and consistent fashion;
- Architect: gets the requirements from the analysts, and provides specification to developers;
- Developer: writes code based on the project specification received from the architect;
- Tester: tests the development output, comparing it to the established requirements, and reporting issues back to developers for resolution.
Note: there are a few other related roles which I also take sometimes, such as User presentation/documentation management and Deployment/release management, but I decided to not list them in the chart to make sure it doesn’t get too big; moreover, there are some technically specific roles (such as Database-related design and development) which I have considered as included within their associated generic roles (such as Architecture and Development).