Regarding my previous experience in software development team, as developer and project manager, I’ve found some capabilities that are required to be a good developer to put a valuable effort in the development team. As mainly I have worked with web based database driven applications, these capabilities are closely or loosely relevant to that context.
Of course you can consider some other capabilities regarding the software development context in broader sense, but here I consider the very basic things, that came in my mind on the fly.
- Punctuality: This is a basic virtue that helps project managers to meet the estimated timeline in a more specific and sharp way.
- Discipline: This is a basic virtue that is required to maintain a developers work efforts effectively, that includes obeying team/organization hierarchy, along with other rules and regulations
- Team Player: This is focused on how a developer shares his knowledge with his following/sibling developers/team members
- Planning: Involves a developer capability that how s/he is planning his/her assigned tasks to be completed on time, along with the integration with other modules or code segment
- Problem Solving: This capability is a major factor to solve, code, design complex business/computational programming logics.
- Coding Quality (.NET): Includes the coding quality, as putting proper comment, following coding standard, way to utilize important API methods (such as DB, UI etc), using powerful language features etc. Also the capability to write high quality code that is manageable, understandable, along with utilizing best practices with available built-in and external programming resources.
- Coding Quality (Java-script): Includes the capability to write codes that creates high-end user end experience.
- Coding Quality (Robustness): Includes the capability to write error/bug free codes
- Learning Capability: Capability to learn required technology quickly
- Eagerness to Learn: Although learning capability is one of the main virtues to be able to be productive based on application requirements, but eagerness to learn is another factor that plays an important issue, besides the capability to learn.
- Communication (Written): Capability to document code, communicating with software development stake holders via IM, mail.
- Communication (Verbal): Capability to understand and explain problem domain, communication with team members and project manager to explain accomplished works/codes.
- Technical Concept (OOP): Includes a clear understanding of Object Oriented Programming and Technology (encapsulation, polymorphism, inheritance, design patterns etc), along with the ability to utilize them in proper context.
- Technical Concept (Database): Includes the capability to normalize, de-normalize data relations in most optimized but requirement specific way.
- Technical Concept (Web): Includes a clear understanding to web based technology along with the best practices and standards (html, xhtml, web 2.0, div, SEO friendly code, CSS, browser independence etc)
- Technical Concept (Software Engineering Best Practices): A solid understanding of Software Development Life Cycle, Unified Process etc)