Don’t you wish that headline was true? It’s not. There is no easy button for enterprise software development.
Building software applications is a dichotomy (or worse) when it comes to the time required. Building a small standalone software application with a narrow scope is easy. Many of us have done it — often in a day or two. Add a few complex features and it may take a week or two. Not bad.
Add more complexity, import/export functions, integration with other software and you could be looking at several weeks of development. Now expand into enterprise-scale databases, large user populations, and military-grade security. Such projects may require multiple development teams and months of calendar time. Not easy.
The effort required grows exponentially as features are added, data volumes increase, and security concerns grow. That’s why context is so important when discussing various approaches to managing projects. Those who adamantly advocate specific techniques are always referring to a specific context. What works for them, may not work for you.
Just make it work.
Non-technical, business people don’t understand the complexities of software development, nor should they. Do you understand what it takes to design and build an automobile? What about a high-rise office building? Most of us don’t know or care. We just want our cars and workplaces to be functional and safe.
Yet, software systems are the nerve center of many businesses that simply could not function effectively without the software they rely upon. The pace of business operations seems to increase every year along with the competitive environment. Because software is so important to business people, they want changes and enhancements at an ever faster pace.
Unfortunately, as software becomes bigger and more complex, the pace of advancement slows. Just the opposite of what’s needed and expected. That’s exactly why start-up, software companies often flourish. They don’t have to manage enormous size and complexity enabling them to move faster and be more responsive.
There’s no easy button.
What can we do to simplify and accelerate enterprise software development? Here are a few ideas. Please contribute your own.
- Employ design patterns that offer reusable solutions to commonly occurring problems. Many of the problems encountered by software development teams have already been solved. Check out the Software design pattern entry in Wikipedia.
- Use a standard web application framework like Model-View-Controller. There are many environment-specific frameworks like Zend (PHP), Spring (Java), Ruby on Rails, and Django (Python). Don’t reinvent the wheel.
- Leverage existing applications as working examples. Chances are a software application already exists that does much of what you want to accomplish. Use it as a reference to jump-start your application design.
- Take advantage of cloud-based tools and services such as software-as-a-Service (SaaS) and Platform-as-a-Service (Paas). Options like Salesforce.com, Amazon Web Services and Google App Engine offer a wealth of tools to speed up web-application development.
- (Lastly) Keep it simple. Start small. Don’t boil the ocean. However you phrase it the key point is to break up the solution space into manageable chunks and add complexity as needed over time.
Now that you know what to do, let me add one thing that you should not do. Avoid reusing old code. It’s tempting to reuse, rework, or re-purpose existing source code for a new application. On the surface, it appears that time and money can be saved by taking advantage of what’s already been done.
In practice, this is notoriously hard to do well. Unless the old code was specifically designed and built for reuse, trying to untangle it and get it to do what you need is often more trouble than it’s worth. You may be able to extract some ideas and approaches from old code but it’s unlikely you’ll benefit from reusing old software components.