The world of software development is constantly changing, and what was good advice at one time may no longer be the best suggestions for current circumstances. Looking back over the years, I've picked three things that I think were the right ideas at the time, but are no longer the best suggestions for software developers.
When I first encountered Agile methodologies, they looked like a train wreck and for good reason. Let's look at the landscape then (roughly 2005 or 2006):
- Lots of people were working on locally installed applications;
- The tools for deploying Web apps were non-existent, and deployments were still a very manual process;
- Unit testing had not become mainstream; and
- The browser incompatibilities were very deep.
It is easy to understand why the idea of releasing a new version every week or two scared the pants off of me. Now it is a different story; Agile methodologies are now a perfectly sensible alternative to longer cycles.
Development has overwhelmingly shifted to the Web, and the native apps that get a lot of attention are mobile apps, where deployment/install is simple and automated. New tools and systems have emerged that dramatically reduce the pain of deployment to the point where it can be totally automated. Unit testing is a common part of the development process, and is also very automated now (including the creation of tests). And while browsers are still incompatible in many ways, various libraries and tools exist to smooth those out, and the gaps have closed to the point where it is no longer the mess it used to be.
Hoo-boy, I distrusted the cloud, and in some ways, I still do. But at the end of the day, I've come to distrust in-house IT just as much and oftentimes for the same reasons. There are tradeoffs to using the cloud, but as technology improves (particularly well-priced, fast, reliable broadband connectivity technologies like cable modems and FIOS), those tradeoffs tip in favor of the cloud.
A large part of my change in heart was spending more than four years managing a pretty complete stack of Microsoft servers. It was a lot less complex to run a server room five or ten years ago; the applications had fewer connections and integrations, they did less, and expectations were lower. Now, companies need 24/7 uptime, failover, redundancy, and backups in depth, and expect services like full email/calendar capabilities, online conferencing, VoIP, infinite and instant Web server scale out, and more -- and that's for small businesses. The needs of larger organizations have grown even more. Companies that were perfectly happy with a single Windows server with file shares on it now find themselves with a pile of physical and virtual machines to provide their entire infrastructure. It's too much to handle.
While the cloud still isn't perfect, it is a lot better than it used to be. Companies like Amazon and Microsoft are delivering cloud offerings that are much more stable than what nearly any IT department can deliver, with the flexibility that modern businesses need. And for small companies (especially startups), it makes too much sense to spend their money on development, not IT staff, to not give the cloud a fair shake. It may still not be right for everyone, but it is no longer the "stay away!" that it once was for me.
HTML and web applications
When I started writing for TechRepublic, some of my most popular pieces were about HTML's deficiencies and the developers writing it. Times have changed for the better.
At the time, HTML 4 was pretty much a train wreck of incompatibilities and vague specs. Libraries like jQuery did not exist or were in their infancy. When the Web supported richer UI metaphors, it was nowhere near the quality of native desktop apps. Few developers unlocked the secret to building out enterprise-class architecture on Web technologies, and when they did, it was clunky and a lot of hard work.
It is just as easy to build a Web application the right way as it is to build a native desktop application; and with the modern tools and libraries, it will look good and perform as well too. Combine that with cloud servers, and you have a combination that allows you to handle rapid growth, and a business model that eschews the worst sins of the traditional model; it also allows you and your customers to approach each other with an attitude of partnership and mutual respect. That's a winning combination in my book.
In a future post, I will highlight three pieces of advice for software developers that still hold true.
J.JaKeep your engineering skills up to date by signing up for TechRepublic's free Software Engineer newsletter, delivered each Tuesday.
Justin James is the Lead Architect for Conigent.