Introduction to Engineering Software as a Service
Most engineering software as a service projects fail either because they are over budget, missing function, late, or a combination. Some of them are so poorly executed. In fact, it is not surprising to find them cancelled before they are completed. Engineering software projects that use modern technologies such as J2ME, XML, Java, and Web Services also obey this rule. Highlighted below are best practices for engineering software as a service for software development projects.
1. Development Process
When developing software, it is important to select the most appropriate development lifecycle process that is most suitable for the project because all other activities will be derived from the process. Many developers prefer to use spiral-based technology over a waterfall process. It is better to have a process than have none at all. In many cases, it is even better to pay more attention to how the process is executed rather than what process is used.
The success of a project greatly depends on agreeing upon and gathering of requirements. This does not mean that all requirements should be fixed before any architecture, system design, and coding is done. However, it is crucial for the development team to have a clear understanding of what needs to be developed. There are two kinds of quality requirements: functional and non-functional. Functional requirements are best documented using Use Cases while non-functional requirements are used to describe the characteristics of the system and performance of the application. They should be gathered because they have a significant impact on the application architecture, performance, and design.
It is important to choose the right architecture for your application. For instance, on several occasions IBM is asked to review an unsuccessful project and they have concluded that in many cases the development team failed to apply well-known industry standards and architecture best practices. Tried and proven true practices are known as patterns. The study of the numerous failures has given birth to the concept of antipatterns, which provide useful information regarding what does not work, including the reason why.
Despite having a good architecture, it is still very much possible to have a bad design, as many applications are either under-designed or over-designed. The two basic principles that apply here are “keep it simple” and information hiding. For most projects, it is crucial to perform Object-Oriented (OO) analysis and Design using UML. One of the great promises of OO is Reuse, not often realized due to the extra effort needed to create reusable assets. Code reuse is one among many others offering better productivity gains.
5. Construction of the code
This is just a mere fraction of the entire project. Regardless, it is still a critical component and often the most viable. Besides construction of the code, other work of equal importance includes project requirements, analysis, architecture, design, and testing. In some projects lacking development process (so-called “code and fix”), the abovementioned tasks also take place, but under the guise of programming. Best practice for construction of the code includes the daily build and smoke test. Continuous integration integrating the concept of unit tests and self-testing code is highly recommended. While continuous integration and unit tests have gained much popularity through XP, these best practices can be used in virtually any type of project. The use of standard frameworks to automate builds and testing, for example Ant and JUnit are highly recommended.
6. Peer reviews
Reviewing other people’s work can also be helpful. Experience has shown that this method solves problems and that reviews are even more effective than testing. You should also review any artifact from the development process, including plans, requirements, design, architecture, code, and test cases. Peer reviews will help you produce quality software at top speed.
Testing is an integral part of software development that needs to be incorporated in planning and should be done proactively; planning of test cases is done before the coding starts and test cases developed whilst design and coding of application is carried out. A number of testing patterns have also been developed. The main purpose of performance testing and why it is done last is to catch system defects.
8. Configuration management
It involves being aware of all the states that your system or project is comprised of, including management of these artifacts and releasing versions of a system. Configuration management is more than just source control systems.
9. Quality and defects management
Quality priorities must be established, including release criteria for a particular project so that construction of a plan is done to help the team produce quality software. In the process of coding and testing of the project, the defect arrival and fix rate can be used in measuring the maturity of the code. Moreover, a defect tracking system linked to the source control management system should also be used. By tracking, it becomes possible to gauge when a project is ready to release.
This is the stage where the application is released for users. Reaching this far with a project is not an easy job. Regardless, things can still go wrong at this stage and a plan for deployment is needed.
11. System operations and support
Deployment and support of a new application is impossible without the operations department. This department is critical in responding and resolving user problems.
12. Data migration
Most applications are just enhancements, rewrites, or advancements of existing applications and not really brand new. Data migration from existing sources to another place is normally a major project on its own. This is not a project for the typical junior programmer. Just like a new application, this project can be very challenging and needs experienced programmers
13. Project management
This is an important aspect of any successful project and a good project manager for engineering software as a service already knows about the existence of best practices. Proper planning is required in project management. “Failing to plan is planning to fail.”
14. Measuring success
You need to measure your development process against industry standards. Implementing the best practices can place you in a better position and help you conduct a successful project.
Doing things right puts you in a better position to complete your project successfully and in good time. Following best practices for engineering software as a service can help you improve your success in software development projects.