Nowadays, the world becomes flat and people have so many options for their expected products and services. How can you make your products becomes the first choice of consumers? how can your products and services compete the others’? and most importantly, how can you create the new world for your products and services?
Not covering all kinds of products and services, I do believe in creating differences in the world of software development. It’s “Quality”.
1. Introduction
Software quality is the level of satisfaction which client has from their needs. There’re three factors forming up the quality: people, process and tool.
• People: who directly or indirectly create or provide the software products.
• Process: steps required to produce the software products.
• Tool: including software, templates, guidelines etc. to increase the team’s productivity.
Let’s talk a look in details on these factors. For me, if you really put the quality on top of your mind, you’ve already had a good start to succeed.
2. Achieving software quality
Firstly, you need to understand sufficiently client’s need. Sun Tzu said “if you know your enemies and know yourself, you can win a hundred battles without a single loss”. The need must be written down, not putting in one’s mind, “no document no work”.
The way you write the need effectively is “Tool”. Is there any pre-defined template? “who invents the wheel”. Which template is the most suitable? If you find nothing suitable, start developing a template. By the time, templates need to be kept improving.
Is it right for delivering only the installation package or the source code? The answer is obviously “No”. There are many other artifacts need to be considered such as Software Requirement Document (SRS), Software Architecture Document (SAD), Test Cases (TCs) and so on. All of deliverables need to be discussed and agreed clearly with client at the beginning phase of the project. This often takes you at least 20% effort and you need to plan clearly for this, “fail to plan means plan to fail”.
The next step is to analyze to find out the solution. You need to explore all possible options before making decision. Using historical database is one of the very best practices. One another best practice could be “asking the expert” to find out the best option/solution.
Once you have the solution, don’t start coding immediately. There must be at least some design work before coding. “First coding and last questioning” is the common reason of many failed projects. It is for the product to be used in the present, not in the future. Lacking of analyzing and designing will produce the product which doesn’t meet client’s expectation. You need to rework to satisfy client or they’ll not pay for the product. If the product is not paid, you will not be paid.
The next step is testing, what need to be tested and who perform the test. We need to understand two important roles of who involve in testing/checking. Firstly, Quality Assurant (QA) needs to involve from the beginning to ensure the project team is following the right steps. Following the right steps/process reduces the risk of low quality. Quality Control (QC) performs the test on the product before it is shipped. The focus of testing is to make sure the product has high quality before shipping, not to find bugs.
So who is responsible for the software product quality? The answer is all project team members. The project manager needs to control and set this right expectation to the team. Moreover, work performed by the team needs to be monitored for quality frequently. I like the Germany saying “Trust but verify”
3. Conclusion
The software product quality is a series of relative steps and each step needs the cooperation of people, process and tool to define and satisfy unified request of customer which make the important part in creating compete factor in “Quality”.
4. About the Author
Vo Thi Ly – Project Manager/Quality Assurance Manager.
Tuesday, 7 June 2011
Thursday, 2 June 2011
Road to Destination 2 - Moving up to the next Levels of Profession – is there really a shortcut?
Moving up to the next Levels of Profession – is there really a shortcut?
This is a follow up to my recent post about Road to Destination - How to move quickly on the career path of software development. The road which I presented on that article is quite straightforward. However, there are still other roads to the destination of your dreaming profession, some of them could be shortcuts.
1. Introduction
Throughout this article, I’ll tell you the real stories of my connections. One very interesting point is that while some of the stories are anonymous (in grey background) some others are onymous (in light yellow background). The onymous are the real success stories of real leaders whom most of people in the industry may be aware of. It would be great if experienced people could also give their observation which makes this article become more attractive.
Basically, I see the below roads:
· Straightforward. This is exactly the same with what I presented on the Road to Destination.
· Supported by Big Bosses. Your big bosses see you have a special ability which helps him to grow his business.
· The Return of Viet Kieu. You work abroad for years, you understand and manage client expectation very well and you take part in growing the business. As the result, you stay on top of local team.
· The Assistant. You work as an Assistant for Project Managers, Directors etc. One day you know everything about what your boss is doing and you take the chance.
· Taking Adventure. Not waiting for the opportunity too long, you just look for it outside.
· The Crisis. The leaving of key resources creates opportunity for others.
2. Straightforward:
Let’s take a look at the senior management team of some leading companies in Software Development Industry, you will see some managers who have been with their companies more than 10 years. Initially, they worked as developer, tester or so and they just moved quite smoothly on their profession. These people are deserved to be treated with a lot of respects from upper management and subordinates for their loyalty and credibility.
An Cao Dai VP at Global Cybersoft When talking about Global Cybersoft, there is one person who has gained a lot of respect from all staffs. That is An Cao Dai, a Vice President. He started as a developer just like the others. The difference is that with smart working ability, strong communication skill and passion, he has contributed a lot to the company. While many people looked around and left, he has stayed with the company, even when it’s up or down. As the result he has moved steadily on his profession. |
3. Supported by Big bosses:
After graduating, Tu worked as a developer for 3 years. One of the projects which Tu worked on was special and required the attention of the chairman. Tu had resolved the obstacles in not only technical domain but also in business requirement very well. Especially, with the good education background and excellent English communication, he had built a very good image to the chairman. One day, the company opened a new business unit working on Mobile and Embedded Application which was the new technology to most of people in the company. Tu was remembered first and assigned to be the leader of this unit. He now becomes a Vice President at the age of 31 and is leading a unit of a hundred people. The name of the character has been changed |
Nhat Do Hoang, PMP Software Development Director at TRG-Enclave Nhat worked as a developer for 3 years before joining a leading software outsourcing company as a member of a team called “Process and Training Improvement”. Luckily, this team was led by a member of BOD who was also Nhat’s direct boss, a big boss. Nhat worked very professionally in supporting his boss and as the result he had built the trust to the boss. Two years later, the boss ran his own business and Nhat was his right hand. Nhat was offered to be the Development Director of the new company. |
With the support from big bosses like the two above stories, people moves very fast on their profession. So, if you have an opportunity to work with big bosses you have an “if” condition. The “only if” condition is that you must have the potential capability which the boss is looking for. In the first example, that is the working ethic. In the second example it is the strong education background and especially the strong English communication.
4. The return of Viet Kieu
After working 2 years for a leading software outsourcing company, Le moved to US to study his MBA. Besides studying, he supported the business of the company, he understood and managed client’s expectation very well which help the offshore team a lot in delivery. With good experience in working directly with US clients, after coming back to Vietnam, he was appointed to be the Vice President at the age of 27. With the size of more than 500 people and many senior managers, he met some difficulties at the beginning; however, with the strong communication and the excellence in applying what he studied from US, he had built the trust to not only his team consisting of Delivery Directors but also to most of staffs. The name of the character has been changed |
Similar to Le’s story, Linh studied at a university in Australia. After graduating, he had an interview for the position of bridge engineer working in US. The interview was done by the chairman who lived in US. Linh is very smart and clever in communication; he had built a very good image to the chairman very quickly. As the result, Linh not only worked as bridge engineer but also supported the presales activities together with the US sales team. During 4 years in US, he had a great contribution in supporting the offshore team and growing the business of the company. When coming back to Vietnam, Linh was appointed to be the Delivery Head taking care of the delivery of a hundred people. The name of the character has been changed |
Because of the nature of the industry, most of clients are from Western countries. Having the open and strong communication is a very advantage point to move fast in the profession. This is why Viet Kieu and Expats often have better opportunities than the local Vietnamese.
5. The Assistant:
After graduating from one university of Australia on Computer Science, Thuy came back to Vietnam. Instead of starting working as a developer, a BA or so Thuy started working as a Project Manager Assistant. With good education background and strong English communication, Thuy supported the Project Managers a lot especially when facing with client. During 3 years working as an Assistant, she observed and understood clearly not only the work of the team but also the work of project managers. One day, her company needed more project managers and she was absolutely capable of taking this position at the age of 27. The name of the character has been changed |
6. Taking adventure:
Someone told me that “you can't move quickly if you don't have opportunity”. I don’t totally agree with it. Now, let’s take a look into more stories.
Le Nguyen had been working as a Project Manager for 4 years. Besides being mature with knowledge and experience in project management, she also had solid experience on software engineering during years of working as developers and technical leader before. She had wished to move up to the next level of management since last two years. However, the opportunity hadn’t come yet. Moreover, looking at the structure of the company, Le thought that the opportunity won’t come in at least 3 years. Even though if her division expanded, other managers would take the chance first instead of her. Thinking carefully, Le decided to move to another company which she thought the opportunity would be clearer. After one year, Le was appointed to be a Program Manager. The name of the character has been changed |
Similar to Le’s story, Son had been with the work of project management for 5 years in one company, from Project Manager to Senior Project Manager. The opportunity for Son to move up to Division Head was just very near. Due to some reasons, Son didn’t think he could stay long with the company. However, if Son left the company at this point he would only receive an offer outside with the similar level of project management. Son decided to stay longer for a few more months and finally he got the promotion to be the Division Head. Being at the level of Division Head, Son easily found a good job outside at Program or Division management. The name of the character has been changed |
7. The crisis
I remember when my boss in my former company left, he created a crisis because he had been with the company for years and contributed a lot. Moreover, there were so many things depending on him and his leaving made the board of management worried. However, at my view it was good for his subordinates though as it created many opportunities for them, especially for someone who has built the trust and the credibility. Let’s see another real story.
Cuong Dinh Viet QC Manager at Pyramid Consulting After graduating in 2002, Cuong worked as a QC for a leading software outsourcing company in Vietnam with more than 200 people. Via the projects which he worked on, he showed very good capability in English communication and especially a wide understanding in software testing techniques. This had built a very good impression not only to his direct boss but also to the board of management. One day, the QC Manager left and the company needed a replacement (which I call a crisis). While there were many senior leaders and managers, Cuong was appointed to be the QC Manager at the age of 26. With a good education background and strong communication skill, he had done a very good job in taking care of the quality of the whole company. |
8. Conclusion
The straightforward road seems to be the one that most of people choose to go. It takes time but it is quite steady. You’ve experienced with programming, you move up to team leader or project manager to manage programming work. You’ve experienced with project management, you move to program manager to manage multiple projects or project managers and so on.
Not many people can move on the other roads. If you look back to the stories again, most of them seem to be shortcuts of profession. People who moved on the shortcuts are also very special. In general, the have the below capabilities right at their young age which not many others have:
· Advanced English speaking skill and clever communication.
· Very confident in communication and public speaking skill.
· Very fast in thinking and making decision.
· Very good background education.
· Very good application of what they have learned on what they do.
Hopefully, from the stories which I’ve gathered here you could find the best suitable road to move on your profession.
Friday, 20 May 2011
What makes a good programmer?
The success of any project depends on many factors: strong manager, effective process, good planning, good support… And lastly, an important factor: strong team members. Without good individuals, the confidence about the success of a project will go down. That is why the best people are always chosen for the hardest tasks/projects, like you have seen with the Seal Team 6 recently (although it finally turned out that it was not really a tough battle for them).
1. Introduction
In software development industry, good programmers are valuable “properties” of a company. Many software companies treat interviews and tests really seriously when recruiting people, because they want to have the best person out of the bunch of applicants. It is the company/project perspective. Regarding personal perspective, if you are a good programmer, you can get your job done in a quick timely fashion; the output absolutely meets your boss’s expectation even though he has given you the toughest task. Then you have very good advantage and opportunity to move fast to success and gain big achievement for your profile. However, not all developers are aware of what makes a good programmer, or what is the “essential luggage” on the road to destination.
From my own point of view, good programmer should have a couple of core values as below:
- High work quality and productivity
- Good job knowledge
- Good soft skills
- Strong English skill
Those are my top-of-mind items. I often talked to my new project team members or new staff in my line about them so that they are aware and can prepare a plan to improve those values. So far the outputs of their preparation have been pretty good.
Victory loves preparation
The Mechanic
The Mechanic
2.1. High work quality and productivity
This is one of the most important keys to success. The work quality of each member contributes to the success of the whole project. As you know a software framework is formed from various modules, layers and components. Even when 99% of the modules are perfect but only 1% fails, the project is still in a high risk of failing.I have read a very impressive study from the “Code Complete” book, which I consider a very clear example of how quality should be taken with high care. The study was done on professional programmers with 7 years of experience in average. The chart below shows the comparison on the output between the best and the worst programmer:
The result above shows us that there is no relationship between years of experience and quality/productivity of a developer. Number of working years cannot say a programmer is good or bad.
So how can we have good work quality?
2.1.1. Equip yourself with good coding skill
Make your code simple, readable, modularized, layered, well designed, robust, elegant and clear. That code usually runs with high performance and has fewer bugs. There are nowadays loads of books that teach us how to write good code. You should have from basic to advanced knowledge on code refactoring, code smells, anti-patterns, design patterns, coding principles and best practices. 2.1.2. Always test your functionality with high care.
Test carefully your functionality yourself before you hand it to testers. Always try to test all the cases. People usually do happy-path-testing but forget exceptional cases, in which most of the bugs appear. Make sure there is no silly or careless-mistake bug. In most of the cases, number of bugs can indicate a developer good or bad.Some programmers think that they don’t need to test too much because QC team will always do the full test. This is a wrong idea. Programmers have to be responsible for their functionality first. Several well-known companies have even eliminated the existence of QC/QA team.
2.1.3. Be responsible for the productivity of your work
It is very important to keep your work productive especially in project types that don’t have deadline or fixed target. For example you are assigned to work on a list of 300 bugs in 2 months. Your boss didn’t say you must fix how many of them. Therefore you can end up 2 months with one of these 2 scenarios: - Have 40 bugs fixed (1 bug per day, spend most of the time reading news or chat chit, or get stuck for a long time with difficult bugs)
- Have 150 bugs fixed (concentrate on the task, define a smart strategy to fix as many bugs as possible)
Both scenarios are still fine for you because there was no target at the beginning. However the more bugs you fix, the more you show your ability to work with high productivity and effectiveness (which is definitely good for your project).
2.2. Good job knowledge
A programmer needs to know as much as possible about the system of the project he is working on. Dig deep inside into its framework to know its components, layers, components, understand how each component works and how all of them run together. The more he masters it, the easier for him to work on the task assignments. Once he knows the most important sections of the framework, he will soon be the key person of the project and can gain creditability more easily.Besides, invest your time to practice and research on the technologies, frameworks, languages or methodologies required by your career path. You don’t have to try to know everything unless you plan to become Solution Architect or Technical Manager. However, you have to know well the ones you work on daily.
2.3. Good soft skills
Hard skills will get you an interview, soft skills get you the job (and help you keep it).
You can’t be good programmer by just coding and coding. Soft skills take an important role in your success. This value helps you make the difference and can be a very strong point of yours if you have really good soft skills.
Soft skills include many individual skills such as: communication, time management, problem solving, decision making, critical thinking, team spirit, presentation, delegation… Every skill has its own importance.
Apply your soft skills to work the following things:
- Manage your time to complete the tasks on time
- If you can complete task before schedule, it is brilliant and is a plus sign to your manager.
- Don’t keep silent in meetings. Make the meeting productive by contributing your ideas.
- Be active in your work. Communicate with PM when you are overload or feel the project plan has problem. Let PM know when you run out of work (don’t just sit and play games).
- Willing to support others
- Always treat any colleague with respect.
Each programmer should know which of his skills are good and which one should be improved. The skills can be developed on an on-going basis through trainings, reading, observation and practice.
2.4. Strong English skill
This is a highly important skill required by software companies in Vietnam, especially the outsourcing ones. Good English helps you to have more confidence in communicating with English-speaking people. In other hand, bad English speaking and listening skill will reduce the productivity of your work when you have to talk directly to customers frequently. It may even make the customers feel unhappy whey they work with you. You may misunderstand their idea and cause things to go wrong. Furthermore, if you are good at technical but bad at English, you still can’t move fast to success.Learning or improving English is a time consuming work. It takes years and requires everybody’s patience. No one can be an English master over night. So if you think your English skill needs serious improvement, don’t hesitate to register English classes. From my experience, English classes are the best places to improve the skill. And as I mentioned above, it needs years of continuous learning. But you will gain benefit from what you invest.
3. Conclusion
Coding skill is just a small part of good programmer’s skill set. In order to get your job done well, you need to prepare for yourself some important core values. They will make the difference. You may find some of my points are useful, but you may also have your own ones. My points are very basic ones that target the junior programmers. With higher levels, there are a lot other values waiting out there.4. About the author
Principle Software Engineer
Harvey Nash Vietnam
Subscribe to:
Posts (Atom)