A couple of years ago, I posted on a fairly popular forum lamenting the software design practice of first building a data-driven software application in Access and then simply up-sizing it when it got too big to handle. One of the things I didn't talk about in that post was the necessity for a solid database design. As a company's data is the foundation of that company's overall business, I thought it might be prudent to flesh out more of my thoughts.
Data driven applications, whether on the desktop or on the web, all have one thing in common, apart from the (obvious) reliance upon a database engine. They all must consider the concept of scalability, or the ability to expand on what the original design expects, if the overall project is going to succeed in the distant future.
I say this because I believe that, even as a Software Engineer, it is possible to work yourself out of a job. Projects begin and end all the time. Some only last a couple of minuets and never make it out of the meeting. Others last for years, and grow to encompass entire companies over time. The latter projects are the ones that wind up having been designed with an eye toward the future, and the trend continues throughout the life of the system. As new features are added an obsolete ones are deprecated, the one constant that remains is the possibility of change, and making allowances for it.
Whether you learn in school, or on the job, the one thing that we as engineers must consider is the structure of our product. How easy is it to maintain? Is someone after me going to be able to make sense of this without stepping through code for a month? Am I, as the one who wrote it in the first place, going to remember what was going in this or that section in one or two years? When a contractor builds a house, no matter what the floorplan, there are standards that have to be met. That's why inspections are required for certain portions before any other work can continue on the house.
At this point in time, with all of the tools at our disposal, we should be not only promoting this concept, but training those that will one day sit down, at their desk or in their cubicle, to make changes to that thing that we poured ourselves into, to think through their design first, and then look see where they can leverage what already exists, without re-inventing the wheel.
I will now yield the floor...
I say this because I believe that, even as a Software Engineer, it is possible to work yourself out of a job. Projects begin and end all the time. Some only last a couple of minuets and never make it out of the meeting. Others last for years, and grow to encompass entire companies over time. The latter projects are the ones that wind up having been designed with an eye toward the future, and the trend continues throughout the life of the system. As new features are added an obsolete ones are deprecated, the one constant that remains is the possibility of change, and making allowances for it.
Whether you learn in school, or on the job, the one thing that we as engineers must consider is the structure of our product. How easy is it to maintain? Is someone after me going to be able to make sense of this without stepping through code for a month? Am I, as the one who wrote it in the first place, going to remember what was going in this or that section in one or two years? When a contractor builds a house, no matter what the floorplan, there are standards that have to be met. That's why inspections are required for certain portions before any other work can continue on the house.
At this point in time, with all of the tools at our disposal, we should be not only promoting this concept, but training those that will one day sit down, at their desk or in their cubicle, to make changes to that thing that we poured ourselves into, to think through their design first, and then look see where they can leverage what already exists, without re-inventing the wheel.
I will now yield the floor...