One software development trend that seems to picking up more steam year after year is the mainstreaming of technologies that aid the software programmer, but also encroaches on the territory of other software personnel. I view this as a good trend because it allows programmers to be more productive and deliver more quality out of the box instead of waiting for other people to complete their work and then having to integrate them.
- Database developer/administrator: No more waiting for the DBA to write stored procedures. You can use your favorite ORM and access your data without knowing much SQL. With NoSQL, you don’t even need to worry (much) about table schema. Of course, if you have an established DBA in your company, this is an uphill climb. DBA want to write stored procedures because it provides “a layer of abstraction and more control over performance and security” (valid, but not insurmountable concerns). If you are starting a product / company from scratch, the need for a database developer is very low. And now, there are tools that reduce the need for many admins.
- Testers: Unit testing, which has probably displayed a few testers, has been around for sometime. But testing web UIs has traditionally been the domain of manual testers or automated testing tools. But now with programmer-friendly tools such as Selenium RC, within a few minutes, you can create an application in Java, Ruby, Python, Perl or C# to automate a web application and test its functionality on different browsers (IE, Chrome, FF, Safari, etc).
Most of the tasks shifting to developers are the low-hanging fruit that was labor-intensive rather than mind-intensive. By removing the easy stuff, the other software people are forced to improve their skills at the higher end.
For example, instead of wasting a DBA’s time programming stored procedures, the DBA could be more specialized in the specific database server technology and looking at ways of improving performance and security. We have heard nightmare stories of missing or corrupted backups even at large companies who can afford more and expensive admins. I suppose part of the problem is that the admins are pulled in directions that they don’t need to be. They should be left alone to be more involved in the critical tasks of server management, not distracted by the needs of some programmers.
Similarly, testers can spend time trying to devise ways of bringing down the system, instead of wasting time testing the regular flow of the application. Coming up with good test cases that can uncover bugs is an art. Also, testers can spend more time on tasks that really need manual effort, such as user interface testing. For example, are elements laid out in an aesthetic manner? Are they intuitive? There is a whole area of research in good user interfaces and reports that is only being exploited by highly paid consultants such as Jakob Nielsen and Edward Tufte. We need to bring some of that expertise to the average tester so that common issues can be captured.
All this is simply to say that like programmers, other people working in the production and maintenance of software applications also need to improve their technical skills so that they are not caught blind-sided by technological improvements that make them obsolete.