thing, they have never written a real-life enterprise system.
exact antenna position for an imaging radar satellite. This was done by
calculating the Doppler shifts in the data being reflected from the ground. The point directly below the satellite was the slowest moving point relative to the satellite, and hence we could find the mid-point in those Doppler shifts. It was more accurate than using the telemetry data. There was a lot of physics involved, and it all had to be implemented in software in a way that could come up with the most accurate measurement. That sounds highly technical and complicated. The theory behind it was, but once all the equations had been developed it was not a super-hard programming task.
have also built computer language parsers, written device drivers, designed communications protocols, written parts of operating systems,
and analyzed musical harmony. Combining all that with the large number
of enterprise systems I’ve written, it means that I’ve worked on pretty
much every kind of software there is.
different types. These are rough categorizations, as software is hard to pin down. There are always counter examples to any classification scheme. However, for what it is worth:
Cassini mission. It covers all the process control systems in power
plants and electrical grids. It includes all the engineering analysis to design bridges, buildings, and dams. I’m also throwing AI, robotics, 3D printing, and voice processing in here as well. Also, all the operating systems stuff along with network/communications and encryption.
suite. This category also includes graphic art programs such as Adobe
Illustrator and Photoshop. It includes all the business software, like
QuickBooks, and a myriad of other programs that are purchased in some
manner by users. The common thread here is that this software is in
effect “certified” by the manufacturer, as they put their brand on it
and hence their reputation.
that updates automatically. In both cases data can be stored on remote
servers, but that is really conceptually no different than storing it on
a local hard drive or a company hard drive on a server in your office.
requests that result in bundles of HTML, CSS, and JavaScript being sent
to the browser. The software is a combination of the JavaScript on the
browser and the back-end code that runs on the server.
that is integrated into the operations of an organization, with the most
common handling general ledger, financials, payables, and receivables.
So why is enterprise so much harder than the other three?
changes? Do they have to consult with an outside constituency?
you have to try to construct it? If you have to construct it how much
coverage do you generate?
existing information? And are there changes during development?
Scientific and Engineering Software
keep doing this until it was giving me seemingly correct answers. Then I
could process the image and check the fidelity.
or the laws of physics changing. It was totally repeatable and predictable.
data I wanted and image it. Analyzing the image indicated how more
accuracy in antenna positioning improved the resolution of the image.
This meant that there was a massive amount of data that I could use for
testing readily available.
The information that is gathered is totally determined by the team to
ensure that they have enough data and options to do the calculations.
They decide how best to lay out that screen, and what options should be
on it. They make these decisions based on the technology and how it
should be controlled. These are decisions made within the team with very little input from external sources.
an analysis of a dam, or a bridge, or you have one space mission. It is
normally for one particular situation. If it is modified, a whole new
version is produced. The new version might require a different format of data but there is rarely a need to be able to work on the old data.
- Scientific/engineering systems are very much in the control of the project team.
- The test data is normally readily available.
- They don’t have to handle changes as well as operate with previous data.
Packaged Software
technical debt) if lines of code are actually used. Because parts of the code could modify other parts of the code, it required an engineer to carefully walk through the code to see if a particular block of code was ever used. These blocks of unused, abandoned code are like an industrial plant having machines that are never used and gathering dust, but getting in the way of normal operations.
even in the mid-1990s, it was at least a decade old and had been worked
on by a continually changing group of programmers.
yourself. It’s stable and gets the job done without a massive amount of
computer errors.
anything new comes up, it is fixed and the software is completely
retested. This is because everyone knows that any change could cause a
major problem. Any change, no matter how minor, should cause a complete redo of QA. This is just QA 101.
They may have rewritten some areas that were particularly bad, but in
general they had just found a ledge on the steep slope of system stability. By hammering at the testing and making sure that all the thousands of bugs are inconsequential or manageable, they can produce a version suitable for release.
document. It doesn’t matter what the actual words are, they could be
“Lorem ipsum. . . .” What matters for testing is how the software
handles the general word processing characteristics of a document,
things like: very long words, paragraphs that take up more than a page,
multiple columns, pagination, and footnotes. The actual text is
immaterial.
maintains a library of test documents and word processing actions. These
documents form an incredibly rich set of test data that pits the new
version of the software against every problem they’ve logged before, and
a whole set of specially-generated samples of extreme conditions.
people to author content, whether it is a presentation deck or a
spreadsheet. There is nothing in the software that is specialized for a
particular user — everything is general, and hence can be tested with a
generalized test set.
project team. Certainly, marketing gets involved and introduces customer
needs and wishes, but if the team is up against a deadline, some of
those feature requests get cut in the interest of getting the product
shipped. These decisions are made by the project team. Marketing might
object, but if the project team says they can’t get it done on time, they will win the argument. If the programmers say a feature has to be implemented in a certain way for technical reasons, they win that
argument too.
change until the next release. This means that new features can be done
in the time between releases. The data may not be compatible from one
release to another and may therefore require an import program to move
from an old release to a new one. But there is no requirement to have
new feature code work on both old and new data.
- The project team decides on features. There is always input by marketing but the team has the final say.
- Testing is made much easier because there is the ability to have a large test suite.
- New features don’t have to work with old data.
Cloud Software
accessible over the Internet (“the cloud”) and clients run software,
browser or app, on their local computer (which could be a phone) to
display information on the screen and allow input.
continually updated (which some might describe as cloud software’s
biggest advantage and its biggest weakness). However, the current
approach to this is to develop a Minimum Viable Product (MVP). This
means software with the smallest number of features that is still of
enough value to attract a large number of customers.
centralized service that is trying to develop features that are wanted
by the most customers. This means that features are driven by marketing
reasons and certainly not by any outside group.
is put up on the website. Any client logging in after that will be using the new code. Because of this fast fix-and-deploy cycle there is a tendency to use the clients as the QA department. No one client is that important, so if a particular client is inconvenienced it isn’t a major problem. Hence, testing is easy because there is not as much of it done. Early users of these services have a rough road, so it is essential that the service being offered is compelling enough that clients will put up with it (the Viable part of MVP).
- Cloud software companies have totally centralized control and they control every decision made about the software.
- They produce some test data to get started but largely they use their clients for testing. If some features have problems it only affects a subset of the client base.
- There is a requirement to keep the old data a client is using operational
despite the addition of new features. This eventually becomes a major
difficulty that can cause massive problems down the road. The hope is
that when you get there you will have enough money to solve them.
but can become really difficult when the client base grows very large.
Also some of these applications are enterprise applications. However,
they are generalized applications that force the client to adapt to the
service with, for the most part, limited customization. This means that
although it is enterprise, control over features belongs to the
programming team, which makes things much easier.
Enterprise Systems Software
deliverables, but an enterprise system is about having a system that works for that particular organization. I had no real choice. If the system couldn’t handle the union’s operations then it would probably be rejected. I had to add the feature. Clearly, I didn’t have total control over features.
system has to allow people to do their jobs and process information. If a
feature is missing it may mean that someone doesn’t have the information they need, or that they will have to go through a time-consuming activity to produce it some other way (usually using a spreadsheet).
government, the organization has no choice but to respond to it. If
senior management mandates some organizational change, the system will have to respond. Changes happen all the time in enterprises and they
require changes in systems to support the new ways of doing things.
cover a good percentage of the possibilities. Think of all the
possibilities that a person working under a union contract could generate, given all the combinations and permutations of working: statutory holidays, more than eight hours in a day, shifts after midnight, lunch entitlements, booked salary leaves, garnishees, and so on.
for an employee. Each one is either off or on, so the possibilities are a 20 bit binary number which means there are a million of them. Of course, not all combinations are valid and some events are more complicated in that they have parameters.
maintain strict orthogonality (independence) among all of these factors.
base combinations with random legal parameters. You could spend a year
or two and write a generator for random legal test combinations and
spend another year running it with billions of cases until it works flawlessly. To make things easier, in an aerospace application, as
opposed to an enterprise application, the relationships between items
will not change.
change and trying to model an organization structure that no single
person fully understands, you don’t have that kind of time and budget.
direction a radar antenna was pointing, it was clear what was wanted. We
wanted the most accurate angle that we could extract from the data,
because that increased the quality of the image.
implement. In reality some of those features are dropped and some new
ones may be added during the build. But it is the team that really
determines that. It is the software manufacturer that determines what
features are to be included and what ones are not. It is the software
manufacturer that determines how that feature will be implemented and it
does that with input from marketing, who think they understand what
users want, and development, who want to do things in ways that are
easier to implement.
the minds of the operational staff, who aren’t systems people and often
don’t remember something they need until later when they have to perform some task.
control over what is wanted; that power is spread out in the
organization.
change month to month. This can be the result of some environmental
change, such as government regulations, or it can be because of
organizational reorganization, or policy changes, or contract negotiations.
features. As an IT person you can complain all you like, but when the
user says “I can’t do my job without that feature,” you are kind of up
against the wall.
software, not knowing what features you may be required to implement
during the project. If the project takes longer than you have estimated (surely that never happens!), then the number of new features inevitably goes up, because all organizations change over time.
can see how they add to the difficulty of these systems:
- Enterprise systems are trying to home in on what works for the organization. The features needed are not really known until the system is used.
- Testing is really difficult and is usually mostly done by the users when they start to use the system. Once an organization has switched to a new system everything is an emergency. That means that design is ongoing and if there is already a large amount of entropy these problems could put it over the edge.
- Business rules can change from period to period. However, all the old data has to be kept operational as it is combined with new data to produce business reports. This results in a complexity that just isn’t there in other kinds of software. It is like fixing an airplane while in flight.
Summary
later. Testing is almost always done on the live system. Once the system
is running, the code has to be able to respond to changes in the business logic, and yet keep all the past results.
Trying to develop software while keeping it in sync with the activities
of a changing organization is really, really hard.