Explaining why “just adding another column to the database” is a bad idea for non-programmers

I have bean sellers and counters who are trying to sell settings to customers, and that's fine. But when a complex change request arises, I send back a big estimate, they get confused. Often they come back to me: "Why can't you add another column?" which to others, they mean a dozen or so custom PER client columns.

So far, all I can return is "We are trying to normalize the database", which means nothing to them. I tell them that I can create a table system that allows each client to define their own set of custom fields, but, of course, it takes more time and money than "just adding a few columns." And, of course, they want to have their own cake and eat it too.

So how can I understand them?

+52
sql database architecture normalization communication
Nov 12 '09 at 18:32
source share
15 answers

The best way I've found is to show how you can create a new function from what they ask, since you cannot add only a couple of customized columns. Features are better than settings, especially when you can blame someone for it.

Try to do a good business for your part before you get into the technical material.

+30
Nov 12 '09 at 18:45
source share

I tell them that I can create a table system that allows each client to define their own set of custom fields, but, of course, it takes more time and money than "just adding a few columns."

I think you should push this option to your bosses, since customization is obviously a feature that is in demand. Emphasize that an individually configured (rather than generalized, limited customizable) system for each client means that patches and updates must be created for each individual client (which will lead to a longer deployment time and higher costs); that non-standard installations mean that HelpDesk tickets will take much longer (which will lead to unsatisfied customers and higher costs); and etc.

In other words, selling short-term pain for long-term benefits, showing that the cost of their decision is much higher than the cost of your decision.

Sellers are focused on selling. This is what makes them a commission. They do not care about what happens. However, bosses focus on value. Sell ​​to your superiors, and your bosses can sell to sellers.

+55
Nov 12 '09 at 18:45
source share

Ah ... a little knowledge is a dangerous thing.

Try the following:

You: Which companies we could not sell?
Sales: Acme Industries, OCP Corp, blah blah blah

You: Well ... why can't you make a couple more phonecalls?

Of course, the answer is not so simple. Neither software development. If they really don't want hours of explanation regarding architecture and maintenance, I suggest they trust your opinion as a software developer.

This is the problem here, trust. You must explain to them that they show distrust of your abilities by making these statements.

+17
Nov 12 '09 at 18:58
source share

You can tell them that a poorly designed database means that in the long run:

  • they will need more time to retrieve their data - do they really want to wait and wait?

  • will it be harder and take longer to design queries for reporting - again, if they need this query tomorrow, they need to say that it still works?

  • it will be a nightmare to maintain, with error prone errors likely to be recorded.

+10
Nov 12 '09 at 18:39
source share

If they are sellers and bean counters, then they will definitely understand the omnipotent dollar (pound, euro, etc.). Can you demonstrate that the time taken to maintain these additional columns does not justify the added sales?

Be very careful and make sure your argument makes sense. I found that in the past I persisted in the settings because I did not want to ugly my rather small domain model, than because it would be really difficult to maintain. A decent analysis will help you determine why you resist tuning.

Remember - the bottom line is that you need to keep customers happy in order to stay in business. We thoughtful developers sometimes lose sight of this in our quest to make things convenient and simple.

+10
Nov 12 '09 at 18:40
source share

Google "technical debt"; Show them the results.

+9
Nov 12 '09 at 18:49
source share

If you are selling the product along with the settings, the product should support the settings without having to fork the assembly every time they sell it.

It sounds like you tried to explain it, but to no avail. Instead, try to estimate the cost of adding your “correct path settings” for a single table, supporting, say, half a dozen product versions with different settings and fixing the error. My opinion is that they will see that they will soon receive money, having a single code base and scheme. And a developer who is not crazy.

+7
Nov 12 '09 at 18:41
source share

Tell them that when people make a car, and then they want the model to move faster and do more than the previous one, they usually don’t add another engine.

+7
Nov 12 '09 at 18:41
source share

The problem is that “we try to maintain the normalization of the database” is almost certainly the answer is wrong - it plays the ball in a court of mistrust and cross-purposes.

You need to pay attention to the ultimate goal, how best to fulfill this final goal (possibly in several versions) and what it will cost in the short and long term. I noticed that the mention of technical debt in the responses and estimates should take these factors into account.

Could it be a bad idea to "just add another column?". You really didn’t give the whole business case. On the other hand, they challenged your negative answer with an uninformed technical question. This does not go to the point to help you understand this requirement, because they did not like to hear no. (I would like to know what the original statement of the problem is.)

Normalizing the database is a technical problem and is not related to the requirements that the system must satisfy - this is the principle of system design that you use to deliver systems with certain properties, such as maintainability. But supported systems that do not meet the needs of users have a value of zero, and invalid systems that satisfy the needs of users have a non-zero value (which can be exceeded by the cost of service - which is a problem for the business). Regardless of whether EAV or some other mechanism is required, this is actually not the case — it simply leads to an increase in system complexity or cost.

If the requirements are too expensive to implement, then this is part of the business case. You have not sufficiently informed us about the architecture or type of entities that use these tables. Say you have 100 customers. Columns in a specific object may have overlap. Just as 95% of customers will never use the optional Billing-Address or Middle-Name column, this does not mean that these columns are not taken into account - and not only that, they are often in the original design! Alternatively, if this is the Products table, and each client wants a lot of special columns, and there is no overlap, you may need a user-defined field system (EAV / XML / tag - the design must meet the requirements) instead, to maintain a holistic system design .

I rarely found that a business ignores the argument for technical debt, especially if the proposed solution can be met by the needs of the user, and flexibility can be a selling point. What I discovered is that business often prefers if you offer solutions as quickly and thoroughly as possible without spending more time explaining why something cannot be done or how much it will cost than it would take to fasten a couple in the afternoon and actually do the work done.

+6
Nov 13 '09 at 4:23
source share

I never tried this myself, but I thought about it: draw an analogy with the legal system. Legal loopholes exist because lawmakers try to patch the system with lazy clogs. The software equivalent is errors, security holes, etc. The only way to solve these problems is through careful planning and hard work.

+5
Nov 12 '09 at 18:36
source share

Make them understand how much development costs are, will this change require one or two developers to take time? how about testing? if complex requests are more expensive, then the company as a whole does less at work. The account / project manager must be the intermediary who downloads these types of requests.

+3
Nov 12 '09 at 19:01
source share

You do not explain this to anyone from a technical point of view. You need a metaphor. Emphasize this to the person you are talking to if you can. If he / she is a car freak, ask them to think about engine modifications. How much would it cost Ford to offer three different engines in Taurus or custom mods on demand?

Once they agree with this comparison, even if they do not fully understand this, you can begin to understand why the metaphor is being applied.

There is another great way to help them see him on their way - spend some time to see him in your image. When your salary depends on giving the customer what they want, you don't care what Propellerhead in Engineering tells you. If you get a lot of tuning requests, you should consider architectural and strategic approaches to making these settings, where possible.

+3
Nov 12 '09 at 19:03
source share

... I tell them that I can create a table system that allows each client to define their own set of custom fields, but, of course, it takes more time and money ....

Looks like you want to create some kind of common data model? Entity-attribute-value ...?

These sample models are often very slow; they cannot be indexed properly and confuse the query optimizer. It is often easy to add multiple columns.

Do a very thorough benchmarking before you go along the general road.

It may depend on the db provider, but if you are using Oracle, I would prefer the road to “just add a few columns” above the road cost-attribute-object.

+2
Nov 12 '09 at 18:57
source share

To expand the tuinstoel clause (avoid the general attribute structures of an attribute object): Although I generally like this structure for easy use, excessive (whatever that means) usage would degrade performance as indicated. Such structures may not be well indexed. I wrote and supported one such system. By the time we had 50,000 "entities", each of which had 10-100 keys, it was slow even on mid-level hardware.)

However, they are very useful and fairly easy to implement. Therefore, if for each client it is necessary to add many arbitrary "additional fields", then this can make the most sense.

Another possible option would be to add several unused common columns to the corresponding tables, which will be used by clients for their own purposes. Some business applications do just that. A sales table can contain ten or twenty columns CUSTCODE01 for CUSTCODE10, which each application deployment can use in different, fully customizable ways.

It may look awful at first, it can be a happy environment. There is enough space for individual customization for each client without a) "just adding a column" and disrupting the application or development process, or b) introducing a potentially slow overall system. However, you get a limited amount of felxablity, and there is a lack of self-documented column names (but column descriptions can be customized as needed).

+2
Nov 12 '09 at 20:15
source share

You can explain this problem by comparing it with the library. There are a lot of books. Small and large, thin and thick - all this can be imagined. Now, if you want to store more information somewhere, it would be easier to add some new pages to the book than to enlarge some individual pages - if there are several pages of the book larger than others, it’s not very reliable and how to find this information, if she has no entry in the contens index? It might be better to save new additional information in another book, new with a certain structural one. Imagine how you can get information if all the contents of the library are recorded in one big thick book? Nobody could find anything until you find what you want and return the book to its place ... if you can carry this huge book. Why extract the entire Livestory if you only want to know the person’s birth date?

These people should not understand the architecture of the database, but they should trust you. And you organize it so that they can throw their information into this big database hole and return it whenever they want - quickly and reliably.

+1
Nov 12 '09 at 21:03
source share



All Articles