Product Engineering
When it comes to software products, there are several key factors for a successful engineering. Here are my personal top 4.
1. Personal commitment and dedication
Personal engagement of the people involved is extremely important. If you are doing something among other things it is not likely to become a success. The Customer (or the Product Manager) must demand usability, the Engineers must demand clarity of the requirements, and the Project Manager must demand compliance between the other two. Every party should contribute to the common goal, and if someone starts to loose focus, should be reminded by the others. Make sure everyone is aware of the stage the product is in all the time – this implies the team has a direction and follows it. Make sure everyone has enough time to do the tasks properly, otherwise people might think that it is more important for you to complete whatever/however possible on time, than producing something meaningful.
2. Communication and team work
The team should communicate freely, and make sure everyone knows it in advance. The Engineers must be able to ask questions all the time, to be able to understand what the feature is and how it fits into the system. The Customer must be able to change a feature, when it does not look good (even if it functions properly). The Project Manager must know the status of the tasks in progress, what is coming up and what should be changed. Organize regular team meetings. Try to ensure that the team gathers together at least for the iteration planning.
3. Early Feedback
Use the software as early as you can. If you are lucky enough, you may even be able to involve real users of the system, the ones that will be using it after it is completed and released. Make sure you know the earliest date the software can be deployed and tried out. Changing something that was just released into the system is much cheaper than if you want to change something months after it has been completed. Not only that, but if you intend to try all the features at the end of the release, you will probably not be able to pay enough attention to each and every one of them. And make sure there is a feedback, let the team know what is good and what is not. Don’t wait for the release date to realize that you did it terribly wrong, and the users expected something completely different.
4. Simplicity and Continuity
Do it simple, one step at a time. Do not try to do everything at once. Try to achieve usable result as early as possible – this indicates that the team has already accomplished something. And this is a value, you already have. You will have time to do all the complicated features later, one at a time. Focusing on a few small tasks each couple of days will relieve the Engineers of the burden that the endless feature list brings to the table. And don’t fool yourself, your requirements will change. So, prepare them when they are needed, not before the whole project starts.

