Software careers - Know your strengths and weaknesses

One of my beliefs regarding you and your career in the software industry is that you need to understand your strengths and weaknesses, and improve both.

It's okay to have weaknesses, but I also believe you should be aware of them, and try to minimize them. For instance, if you're a Java Swing developer, I think you should invest some time in understanding the fundamentals of design. Robin Williams has a terrific book titled "Non-Designer's Design Book" that can get you started in this area.

To help you understand some of your strengths and weaknesses in the software development industry, I thought I'd share a "checklist" here that covers various areas of knowledge in the software development industry. All you have to do is look at each item, and honestly assess your strengths and weaknesses in that category ... and then decide what you want to do about your assessment of your skills in each area.

Strengths and weaknesses checklist

At a high level, software development consists of these skill areas:

  • Analysis
  • Design
  • Architecture
  • Programming
  • Database management
  • Testing
  • Development processes
  • Project management

Programming

Some things you should understand about programming:

  • Understanding one or more languages
  • Understanding language libraries/frameworks (Swing, JSF, Struts)
  • Understanding tools (Ant, Hibernate, Spring)
  • Understanding IDE's (Eclipse, NetBeans)
  • HTML, CSS, JavaScript, DHTML, AJAX

Database management

Knowledge areas in database management:

  • Database design
  • Database maintenance
  • Awareness of different databases (Oracle, MySQL, Postgres, object-oriented databases)

Business analysis

Things you should understand as a business analyst:

  • Use cases
  • UML
  • Database design
  • Data flows
  • Cost estimating
    • Function Point Analysis (FPA)
    • Cocomo, or something like it
  • Roles in the analysis process
  • How to interview
  • How to write use cases and requirements specifications
  • Design

Quality

Knowledge areas in the field of software quality:

  • Testing (unit, regression, code coverage, GUI testing)
  • Six Sigma
  • FPA as it relates to quality

Communication

Your strengths and weaknesses as a communicator:

  • Technical writing
  • Verbal communication
  • Ability to lead a team
  • Communication as a manager
  • Communication as an employee

Software development processes

Your knowledge of software development practices:

  • Scrum
  • XP
  • Other "agile"
  • "Heavy" processes, like RUP
  • Being a "team player", i.e., understanding your role(s) on a team

Business

Your understanding of businesses, and how they make and spend money:

  • Business
  • Costs
  • Decisions
  • Income
  • Processes
  • Sales (even great ideas have to be "sold")