Who are those people that actually do the development work?
I've worked for companies that had a nicely defined hierarchy of roles and also for companies that their definition of structure was "Do what needs to be done". Needless to say that some kind of structure is needed and without one there will be pain and suffering.
I will present my definitions for development roles that are common in my little area of the world. Feel free to share your comments 🙂
So, who is this software development professional?
This triangle represents the facets of a software developer.
The first and main facet is the personal skills, abilities and experience. It is up to the developer to improve his/her skills, they should not relay on anyone, no one can train for them they need to do it themselves.
The next one is the development process. This is defined by the company's management. It is up to management to train developers in how things are done.
The last facet is the actual business. This is important but in big companies developers can get away with doing their job without even understanding the business. This information is usually beneficial to senior level personnel.
Now for some roles, senior roles relay on the base requirements of the junior positions. The list contains technical roles, no team leads/project managers/etc. maybe I will get to that later.
Intern/Graduate
Flexible thinking
Problem solving abilities
Desire to learn and improve
Knows how to program in one or more of the languages used to build our products
Understand basic software principles: - Flow control: If, for, while, etc. - Basic structures: arrays, lists, trees, stacks, etc. - Object Oriented: Inheritance, polymorphism, encapsulation, etc. - Write, compile and run programs
Team player - Clearly and regularly communicate with other team members (status, challenges, issues, etc.)
Able to understand and executes the company’s software development process (Design/Develop/Test/Deliver)
Junior Developer
Graduate/Intern skills
In charge of designing and implementing the requirements of the product (as communicated by the designated person in charge of task assignments) Each code change must be reviewed by the appropriate Code Maintainer
Accountable for his/her code quality
Senior Developer
Junior Developer’s skills
An expert in one or more technical fields Posses knowledge/expertise in a framework/language/technique/etc. that is essential to the company's products
Capable of developing across all of our products
Expected to recommend improvements to existing software
May take on the role of Code Maintainer
Mentor Graduates/Interns/Junior developers
An active participant in requirement reviews
Make sure requirements are clear, follow the principle of “minimal viable product” and cover all the defined use cases
Code Maintainer
A Senior Software Developer
Posses in-depth knowledge of one or more specific business domains and relevant code
Acts as a source of knowledge for the area of expertise (Other developers naturally come to consult with the expert in matters related to his/her area of expertise)
Participate in technical discussions with developers and helps with feature design
Oversees and participates in Requirements/Design/Code reviews of changes in his/her maintained code
Software Architect
A Senior Software Developer
Observe and understanding the broader system environment
Create the principle design of the product
Assist developers in subdividing complex tasks into smaller, more manageable pieces, during the design phase
Grasp the functions of each component within the application
Understand the interactions and dependencies among components
Work with product stake holders to find solutions to business needs
Communicate concepts and ideas to developers and management
Take part in Requirements/Design/Code reviews
Junior QA
Review requirements, specifications and technical design documents to provide timely and meaningful feedback
Create detailed, comprehensive and well-structured test plans and test cases
Estimate, prioritize, plan and coordinate testing activities
Develop and apply testing processes for new and existing products to meet client needs
Monitor and record testing process results
Track quality assurance metrics, like defect densities, open defect counts, etc.
Senior QA
Junior QA’s skills
Design, develop and execute automatic tests using test automation software
Meet with internal teams (e.g. developers and product managers) to identify issues that will hinder testing
Investigate the causes of software issues and train users on how to solve them
Stay up-to-date with new testing tools and test strategies
Junior DevOps
Implement CI/CD pipelines using automation tools, frameworks and services
Should have the skills to use the tools, framework and services
Senior DevOps
Junior DevOps’ skills
Analyze build, package and deployment processes and communicate detailed reviews to development teams with suggested improvements
Troubleshoot production issues and coordinate with the development team to streamline code deployment
Collaborate with team members to improve the company’s engineering tools, systems and procedures, and data security
Optimize the company’s computing architecture
Conduct systems tests for security, performance, and availability
Software R&D Manager
Managing the people:
Resolve personal issues (with HR assistance if needed): - Company/Employee - Employee/Employee
Conduct performance reviews
Allocate bonuses and pay raises
Hire/Fire employees
Oversight - Asses employee skills and suggest ways to improve - Create an attractive work place for potential prospects - Create an enjoyable work environment for employees (to boost moral and improve productivity) - Create professional opportunities for employees - Take part in creating a productive and positive company culture
Technical:
Share professional experience via DRs and brainstorming with developers
Lead large scale projects (organization wide)
Company representative:
Communicate and oversee execution of senior leadership’s decisions and instructions
Conduct periodic reviews and adjust development process to improve its: - Quality - Development times
Manage and allocate resources (money, people, equipment, etc.) to allow development process to continue optimally