On August 4 we had a session on software engineering. The aim of the session was to share knowledge and experience about the way we develop software and to discuss the importance of doing it a certain way. After the break we had a workshop that briefly touched the different parts of the software development process.
The quiz on current real-life practices raised a lot of discussion. While we all recognize the importance of source control, automation of manual tasks, testing, documentation and proper incident management many of us fail in a proper implementation of these practices. It is noticed that the Oracle and Java developers are not really different in these matters. However it was interesting to notice that Oracle developers tend to dispute the use of unittesting more often than java developers. On the other hand the use of excel sheets for incident management was equal in both groups.
The reasons for not implementing a good software development process are diverse, but often mentioned is the fact that projects and maintainance are funded seperately. A five percent increase in development is often not acceptable even if it will save a 10 percent in maintainance and thus saving much more than spending (keep the 20 – 80 rule in mind). This implies that a good development process costs extra; which is off course a good subject for discussion. Other reasons are the lack of supportive tools, but also (for java) the abundance of tools, the learning curve of tools, lack of knowledge, not recognizing the importance or possibilities, not willing to change one’s behaviour (‘I’ve always done it this way, why should I do it otherwise’) and sheer ignorance.
In my opinion a good development process always pays off. But it needs skills, knowledge and dedication of the whole team. Most of the time we can just implement it because the customer is often not really interested in how exactly the development process is organized. As long as you reach the deadline(s), he’ll be happy.
The workshop gave an good impression of the possibilities of automating manual tasks. Using ant it demonstrated how to deploy database objects and unittest them (using utplsql), how to perform java unittests, package code in a jar or a zip file and how to check and format code.