How do you make people appreciate abstraction and flexibility to “just do it”?

I sometimes have difficulties with other people who want to solve the problem when they want to skip the official interfaces and directly access the main implementation data.

They argue that this will allow them to solve the problem faster. I argue that this will lead to our architecture becoming more closely connected and difficult to change as new requirements emerge.

I note all the work that went into the current design and design philosophy and the value of flexibility, the costs of maintaining and modifying fragile code, the value of encapsulating and hiding data, and layered architectures, and being reliable, so that small changes in the specification lead to small changes to the code. And they say: "But that would be easier."

How do you deal with these people?

+6
encapsulation architecture abstraction
source share
11 answers

Convince them that using shortcuts is a false economy.

Explain that the initial coding effort is less than 30% of the initial development effort, and less than 10% (in my experience) of the overall project effort (including maintenance).

If they remain unconvincing, and you have the right to do so, ask them to do it their own way. If you do not have power, then do nothing. In the end, your leader, if she is worth it, will acknowledge this, and then you will be in office.

+6
source share

Ask them to work on some outdated code that fixes bugs in it. This is pretty much how most people I know learned these really valuable lessons ... the hard way.

+7
source share

Easier when? Now that everyone is not able to flow? Or three months later, when customer requirements have changed and they have a “solution” that is no longer a solution?

I don’t really like structure and rules for the sake of structure and rules, but it’s good to know A) who controls the boat B) what are the rules and C) why we decided to do it this way.

In my store we don’t like to rewrite the code, because we screwed and encoded a bunch of things or created some kind of fragile "solution" to the problem. As a rule, you should not try to follow a more flexible approach when people understand that later this will reduce frustration when things are turned upside down by a bunch of requirements changes. We code the “long way” not for the “need today”, as a rule, therefore the design is made for a reason , and the design is followed for the same reason.

I spent a week of my life (7 consecutive days) rewriting the module because I was in the "do it fast" mode. Seven days of exhausting time, 10-12-hour days do it right, at the end of the game, when I could watch the Super Bowl. It stinks. I learned a lesson. Perhaps your “friends” will also experience this kind of eye socket.

Good luck

+4
source share

I really hate taking a dissenting opinion on this, but ...

To quote Van Halen (quoting a cliche), "there is time and place for everything." Although I, of course, do not defend what is written poorly, never, sometimes you just need to do it and find this happy environment between reliable / solid and hacked / documented. (The documented part is especially important on two fronts: one that you clearly indicate that everything you do is done simply in the interests of its implementation and accepts certain shortcuts, and two - an approximate idea which may be a more correct way to solve the problem.

As programmers, we often strive to write perfect code (well, some of us do), and sometimes lose sight of the big picture - there are several reasons why it can be good (at the level) to play quickly and freely with the code, while minimizing the impact that will take place along the road.

Please do not use this as an excuse - the 80/20 rule applies here, of course. Most of the time you absolutely want to crush any shortcuts along these lines; but sometimes...

+4
source share

Show them! Let them make a small module in "But it will be easier." when you do it right. Then ask them to make from 2 to 5 changes to the requirements (these should be changes) and hold a competition of time for the implementation of changes. It may take a day or two, but they will get it. If you do not, you will have the same discussion of each new project or task.

+3
source share

You can try the analogy with them ....

The rules of chess are pretty simple. You can teach them to your child: “the horse moves like this”, “the castle moves like that”, etc.

If that's all you know, you can play chess and probably have a good time, but someone with a deeper knowledge of the game is about to wipe the advice with you every time. You will beat so hard that it won’t even be fun, because you can’t imagine how they do it.

The same principle applies to programming. Knowing the language syntax and a few simple data structures is enough to get a working program, but you're out of luck with a large-scale application that must endure several release cycles.

Chess sets discoveries, attack strategies, etc. We have design patterns.

+3
source share

It is probably best to push them towards leadership so that they cannot do much damage.

+2
source share

The problem is that most people are not even aware of software development that is different from the most basic concepts and designing a drag and drop style. For every developer who researches and educates themselves on all the best new concepts and technologies, there are ten people who go home and do not look at the PC. You must teach them.

+2
source share

I developed a large and complex system about five years ago. I spent the next five years introducing myself into every project that influenced "my" system to keep barbarians from the hustle and bustle of my architecture. While I applied constant, unforgiving pressure, I was able to keep the architecture pretty clean, but I struggled with a lost battle. That's why:

1) Most people evaluate if they did the work today. No one was ever reprimanded because three years ago they cut a corner (or two) to get the project on time. On the other hand, many people were reprimanded for not having time to receive projects on time.

2) You might want the system to be neat because you have a sense of ownership of the code or application or users, etc. Many people will not have a sense of ownership and are therefore too happy to hack into something to handle. You can lead a horse to water, but you cannot take care of it.

3) If you convince everyone to properly maintain the code, new people will come aboard, and they need to be taught how to do the right thing. Therefore, even if you succeed, you may feel that you are failing because you are always fighting the same battle against new opponents.

4) Perhaps you are mistaken. Will Microsoft think that Microsoft will spend twice as much time programming to make MS-Paint reliable and easy to maintain? Sometimes an ugly hacking system is good enough. Most good programmers do not understand this, but usually because they are good programmers.

5) I swear that there are people who take perverted pleasure from breaking things, either because they can do it faster, or they will be the only ones who understand this, or they have a childhood need to break the rules. You cannot reason with these people, and the more time you spend with them, the closer to the project completion date, which in any case will force you to hack something.

6) A good chance that you understand the system better than they do. What looks like an ugly hack to you may look like a “slightly stepping” to someone who is not so familiar with the system. Or additional efforts to make the code reliable will protect the programmer from a problem that he had never encountered before, and therefore cannot peek. You do not learn to check return codes until something works, because you have not checked the return code. At this moment, he ceases to be "additional work" and begins the "required work".

If you have a small, tight development team, this is possible. But the larger the organization, the less likely you are to succeed. If you manage to get a 250-local IT store to evaluate how to do it all right, then your persuasive abilities are legendary.

+2
source share
0
source share

Tell them to read (not what they will ever be) Encapsulation Theory: http://www.edmundkirwan.com/

0
source share

All Articles