The attitude that every engineer should have, in every field of engineering, is:
I can solve this problem the right way.
Whatever the problem is, there’s always a right way to solve it. The right way can be known, and it can be implemented. The only valid reason ever to not implement something the right way is lack of resources. However, you should always consider that the right way does exist, you are able to solve the problem the right way, and that given enough resources, you would solve the problem the right way.
The “right way” usually means “the way that accounts for all reasonably possible future occurrences, even unknown and unimaginable occurrences.”
A bridge that could stand up to any reasonably possible environmental condition or any reasonably possible amount of traffic without constant maintenance would be built the “right way.”
Software code that maintained its simplicity while providing the flexibility needed for reasonably possible future enhancements would be designed the “right way.”
There are lots of invalid reasons for not solving a problem the right way:
- I don’t know the right way. Often this just requires more understanding or study, to figure out the right way. When I run into this situation, I walk away from the problem for a while, and then often I’ll come up with the solution when I’m just out walking, or the next day when I come back to it. I try not to compromise on something that isn’t the right way just because I don’t know what the right way is yet.
- The group cannot agree on what the right way would be. Sometimes a group of people have argued about what would be the “right way” and the subject has gotten very confused. Groups are not very good at making decisions. As we all know, you don’t design software by committee, and I suspect that “design by committee” in other fields of engineering is just as bad. The solution here is to assign an experienced and trusted engineer who understands the basic laws of the subject you’re working in to determine the right way by himself or herself, probably after carefully studying the existing arguments and collecting relevant information, following standard, valid engineering procedures.
- I am too lazy/tired/hungry/discombobulated to do this the right way, right now. This happens to everybody from time to time. It’s 1 in the morning, you’ve been working on the project for 15 hours straight, and you just need the damn thing to work, right now! Give it a rest, though, and come back later. The world isn’t ending, and the problem will still be here and solvable later. Go to sleep, go eat something, take a walk–do whatever it takes to get into a mental space where you’re willing to solve the problem the right way, and then come back. If you’re in a state where you can’t solve the problem the right way, then it’s really time to take a break. You’re not being delinquent in your duties if you do so–you’re actually correctly taking responsibility for the success of the project by saying “this needs to be done right, and the way to do it right, right now, is to take a break and come back later”.
Mostly, it all just takes the constant and continual belief in yourself that you can solve the problem the right way.
“…even unknown and unimaginable occurrences.”
Those don’t exist, as I’m fairly confident that my ultra-powerful imagination can dream them all up 😉
Hahahaha. Well, sometimes it pays to be a little bit humble in engineering. 🙂
its very useful for me mr.max
Strongly disagree with the “only one correct way” approach. We humans are too fallible to predict all futures, from all perspectives.
There are multiple correct things to do, and they vary with how you see the problem.
“Lack of resources” also translates as “cost-insensitive”, and costs are almost always a part of nearly every problem.
Get many eyes! Think through many perspectives! Identify many needs and risks, and balance them by various equations! These ways of thinking are more realistic than insisting only one “right way” exists, and anything else is “wrong way”.
Hey John. Yeah, what we’re running into here is somewhat of a confusion inherent English. “the” does indeed mean “that specific one”, but there are of course always an infinity of solutions to any given problem. Some would be more right, and some would be less right.
The problem is basically that “a right way” sounds strange and would have been confusing–engineers tend to say “the right way”, so I used that. (“a” means “any particular one”, of course, whereas “the” means “that specific one”.)
Sorry if I jumped the gun. 😉 If we’re talking about “design it soundly, plan for contingencies, don’t take shortcuts, look ahead”, then I’m definitely with you, thanks.
Yeah, that’s definitely what we’re talking about! 🙂
Speaking as a structural engineer, I wouldn’t call that a bridge that was built the “right way”. I’d call that a bridge that was over-engineered and a waste of resources. Every highway overpass out there is not designed to withstand a 10.0 earthquake while subject to a hurricane, bumper-to-bumper traffic, and a tornado–and with good reason.
Engineering isn’t a search for the ultimate answer, it’s a search for an elegant solution to multiple constraints, and part of being a good engineer is knowing how to pick the right set of constraints.
Well, by “any environmental condition” I meant “any condition that could reasonably possibly happen in the environment of the bridge”. Obviously it’s extremely unlikely that all of those things are going to happen to one bridge, so you take what’s reasonably possible, not just “anything that could ever happen”.
I’ve updated the post to make it clearer. 🙂
Totally agree about the importance of nurturing a positive and laid back attitude about engineering.
If you were a manager, what incentives would you put in place so that the engineers on your team feel motivated to do things “the right” way?
That’s a good question. 🙂 I think the simplest motivation is just to always point out kindly when people do do things the right way. I think it’s way more important to encourage correct behavior than to attack incorrect behavior, and as a code reviewer I personally spend so much time correcting people that it’s important that I also tell them always what they did right.
So, it looks like we should leave negative feedback to machines only, people are served best with positive feedback 🙂
Hahaha, exactly! 🙂
Max, how to ensure that we don’t over engineer in the name of ” a right way “.
I actually talk about that in my book, and I think I’ve covered the same stuff in one or two of my blogs, although it’s not as clear as it is in the manuscript I have for my book.
You could look at it as part of the definition of reasonably in “reasonably possible”. For example, it’s not reasonably possible that somebody will use a web server that doesn’t support the CGI standard, so we don’t have to care about that in Bugzilla. Trying to account for that would be overengineering.
Only that there are sometimes problems where “the right way” to solve them is not solving them at all. Unfortunately, occasionally we don’t have a choice (cough… management… cough).
Hahahaha, no kidding! That’s why I’m so glad that I work on open-source, where most of the time, if I think a problem doesn’t need to be solved, I just don’t solve it! 🙂
I think I fit into the third category most often, not doing things the right way because I’m too lazy 🙁
I am really impressed by your views.e
But for me sometimes there are situations where we have to take the best possible way OR the Most convineint way out of a problem owing to the available resources , may be in any form i.e. lack of man power or conditions prevailing . So, according to me THE BEST POSSIBLE WAY may not be the right way always…..so there are many exceptions to your theory…..Wat say???!!
Well, I hear that argument a lot, but I think that the things that “force” people to do things “the most convenient way” are actually less “forceful” than they think. There’s almost always a way to get things done the right way, particularly with a little more insistence on the part of the engineer instead of caving to external forces.
It’s true that sometimes you need to do a “quick hack” on something, but then you can go back and clean it up afterward, and that’s still the right way.
I agreee to some of your points, except one- Engineers cannot take decision in groups.You said that ENGINEERS cannot make any decision or cannot make any right way out of a problem. So, I would like to ask you what is the purpose of conducting a meeting then in a company or factory or any Organisatio????As you said that engineers cannot decide or find out the right way by discussing anything in a group. And as such meetings are conducted for rectification of problems and not mess them all up again!!!!
That’s a good question. What IS the purpose of meetings? There are FAR more meetings in the average engineering organization than there should be. Sometimes they are very important, to inform the group about how things are going to go in the future, or so that information can be shared between the group members. Administrative decisions are made by the leaders of the group based on the information gathered at the meeting. Technical decisions can also be made by the engineering leaders based on that information. But it’s not the group’s job to make a decision–meetings are mostly to share information.
I’m agree with your view, but every engineer have not that type of attitude. I’m studying engineering. My many of friend try to solve problem right way I’m not try to so. Many time when I’m tell them to teach one point which I can’t understand that time they make ascuse to not teach like they don’t have time, they also forgotten they point, I will teach you later. Every engineer thought thier branch is more sucessfull then other is right even i’m also beleve it. Many time when we sit to study in group but we can’t study we start making fun of each other. what u say about it????
Well, the thing to do is to make up your mind about things yourself–that’s one of the first parts of doing things “the right way”–is to take one’s own observations and act on them. Then one must develop judgement through experience, and then you can decide what’s right and wrong. Anybody sitting around arguing theory who doesn’t have any experience to back it up…well, they usually can be ignored.
I am agree by yur veiwes but.I am not agree with your secound reasone” The group cannot agree on what the right way would be”beacuse
sme time group decussion is solved many hard problem in easy way. All time group is not fail in take dission.
when you are in some bad situtaion in your life than donot talk with your friends and get some right way o get out from this bad situtaion in your life …… what you say?
Ahh, yes, but it’s still YOU that’s making the decision. Groups are fine for coordination and information. But they don’t make decisions–individuals do.
From this as engineer attitude the first point i can solve this problem my way i’m really agree with that because different person have different ideas at any point and also share to solve problems…
by decision we can even find some unknown problems of difficulties that can occur,that an engineer had never thought about that?????
according to my point of view,in your personal life there is always or most of the times you have a solution of your own problem,but in engineering life there should be the solution but it should not be in right wayor not proper,at that time we have to be satisfy with our solution because you have any solution in any way is better than you have no solution……what you say
Well, often that’s true, that “any solution is better than no solution”. But I think that sometimes engineers give up too easily on finding the ideal solution–that with a bit more thought, a few more days of research, something better really could be found, and maybe it’s better to put off solving the problem until you’re more certain about what the best way would be.
The attitude that every engineer’s should have that “I have solved problems in right way”.But most of engineer have not that type of atttitude.your some point are true like engineers not take decision in group because when we take decision in group at that time in the class many types of nois will prouce.and it’s not true that engg.students solve problems in right way because naw adays in exams marks are important right way is not important….
Yeah, it’s unfortunate that in school, people often value their marks over the actual rightness of their solutions. But in actual engineering, there are no “marks”, there’s only real solutions.
I agree with your views but i can’t agree with your 2nd reason because everybody have thier own views on any problem and if everybody solve a problem in group then many answer of one problem is occur that time you right but if one have no idea about that problem then if he go to the group and solve the problem. So according to me that’s true that group discussion is helpful for engineers.
Yes, group discussion can sometimes be helpful, but it’s always the individual in the end who decides how to deal with the situation. I often go to my peers as well, with questions, when I don’t know the answer. But when I fix the problem, *how* I use that information is up to me.
According to my view, for solving the problem in right way some knowledge is requre about problem. For solving problem you have to study and understood problem. Then think about that which terms is require to solve problem. As you said that engineer can not find out the right way to solve problem by group discussion but according to my view to solve the problem group discussion is require. So by that procedure very points is clear regarding to problem.
I agree that you have to study and understand the problem, you’re right. 🙂 Sometimes, asking other people for information or a discussion of the issue is a good way to do that–you study the problem by getting other viewpoints. But the final decision should be made by the individual, because they are much more capable of making good decisions than a group is.
Sometimes the “right way” is inconsistent with “the fastest way” or the “easy to maintain” way.
Occasionally a small hack like the Fast Inverse Squareroot can be the “best way” while not being the “correct way”.
Well, sure. I mean, you have to consider the reasonably possible environment that the system will be operating in and your actual requirements. Sometimes you have to get a little complex in order to accomplish the requirements of your system at all. The Fast Inverse Squareroot is good enough for the use in question, and it made the systems fast enough at the time, so it was he necessary way, even beyond being a “right” way.
Really its a very nice thing you told- that last line. “Mostly, it all just ……. the right way.”
[…] thing we know about software design is that the future is important. However, we also know that the future is very hard to […]
[…] thing we know about software design is that the future is important. However, we also know that the future is very hard to […]