A Software Career

Many students have asked me what they could do after working as software developers for many years. There are many career paths that experienced developer can select. Following are some:

1) Requirements engineer or Business Analysts: Developer who has few years of technical experience, and a certain depth of technical knowledge could work as requirements engineer to identify business needs of users. Requirement engineer works with customers, users, project managers, and systems architects to ensure that the requirements are clearly written and understood by both sides. This job is a fast growing occupation that is needed in the software industry because it can make the difference between success and failure. Beside technical skills, it also requires good communication skills such as presentation skill, writing skill, negotiation skills and customer relationship skill

2) Technical Lead or Architect: Experienced developers who have advanced technical skills but do not want to work with customers could work as system architect. This position is highly technical; it often involves making key decisions on how the new system will fit into the organization’s overall architecture. The architects must understand customers' requirements, make decisions about how to decompose these requirements into different components that will be required for the new system, how to fit these components into the existing infrastructure, and in what order to implement each component. The architect must identify issues and risks as well as the cost factor and present them to management for approval.

3) Project Manager: Experienced developers who possess technical skills through work experience can advance into project manager position. The project manager is someone who plan, organize and manage new computer systems or devise ways to apply existing systems to additional operations. This job is often responsible for hiring the staff, setting the schedule, and keeping track of the progress through every phase of development. This person is also responsible for assigning the work, dealing with everyday problems affecting that work, and making sure each programmer is working on his own assignment. The project manager can best carry out this function if he truly understands the work he is managing. The project manager must both be a "people person" as well as a "technical person" in order to succeed because he must work with technical and non-technical staff at every level of the organization. Additionally, the project manager has to manage his team effectively to produce the desired product on time.

4) Manager: The ultimate job for many project managers looking to move up is to become the manager. There are several types of manager, the middle manager who focus on managing daily tactical work and the senior manager such as Chief Information Officer (CIO) or Chief Executive Officer (CEO) who manage the company. This position is best suited for very experienced person with many years of work experience because companies want people who understand the business and how to apply technology to make it better. This job requires additional training, especially in business, finance and leadership because being able to follow directions is important, but being able to make your own judgments is equally important.

Beside technical skills, I believe that communication skills are very important for all software people, whether you are a programmer or a president of the company. Everyone should learn to be a better communicator. Of course communication skills take much longer to develop because it requires both experience and training to become effective. Today, most customers do not understand technical to describe their requirements to software developers so it is important that software requirement engineer understand their needs by discussing thing with them using “Regular language”. On the other hand, many technical people do not understand the business that they must implement in the project because many do not like to talk with customers so system architect or technical lead must explain these requirements using “Technical language” that they understand well. Learning to communicate, and having the patience to gain knowledge is an essential skill that many software people do not have and many schools do not teach. Communication is not about talking but also listening, understanding and be able to explain thing in a clear and concise manner.

The key to advance your career in any company is to let management know what you know. You can not stay as programmer for ever because you like to code, you must develop new skills, learning new things and moving up. You must learn how to answer questions that management ask, solve problems when they happen, accept new responsibilities in new projects, and do not hesitate to assume leadership position and do not reluctant to share a better idea. By being pro-active rather than reactive, you could go far because it is the difference between being "just another programmer" or being the top person for a promotion.

Software jobs is very challenging but also very rewarding, beside they are very high paying jobs – Most software people make more money than other fields and it is the fastest growing occupations globally. It also have more chance to work internationally, according to several studies, over 40% of software people will travel to work oversea in the next ten years as the demand is very high globally. Of course, to do that you also need to have foreign language skill.

To answer your question on what to do after several years working as programmer, my answer is to move out of programming into more advanced technical areas or business-oriented positions such as systems architect or project manager. Of course it requires time and efforts on your part but I believe this career roadmap can help you to decide what to do.

During your professional life, please do not forget that as a professional you must know how to balance your life and work because life is not about working and make money but you have to remember that “You are a person first and a software professional later” so enjoy your life as a person who has responsible for yourself, your family, your society, and your country.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University