I realize that developers don’t have a Hippocratic Oath but I figure if it did exist would follow in the same footsteps.
I swear to complete my task to the best of my ability. I will not settle for good enough to complete a task. I will admit when I don't know and seek help from those who are more knowledgeable. I will never obfuscate to ensure my continued employment. I will prevent future issues by taking care of current ones.
And so on. Now this may not fit with all developers, but I have to think there’s a decent amount of developers that would like to hold this oath as a guideline for development.
“Aye, and if my grandmother had wheels, she’d be a wagon.”
I would have to think that such an oath would work if lives were at stake like they are in medicine. After all, there’s a pretty good indication of failure when a person lives or dies. Programs for the most part are a bit more gray. How many times have you walked into a new job to work on a system that is less than optimal? Then how many times have you asked how the client can stand it and the answer is, “They’re used to it.”
As horrific of a statement that seems to a developer, to the business it’s really not that big of a deal as long as the customer keeps paying. Rewrites and major updates just aren’t going to happen due to the old adage, “If it ain’t broke, don’t try to fix it.” After all, taking time to fix may delay any new features and then could open up a window of opportunity for the competitor. Beyond that, it’s probably a tough sell to the customer. “Sorry we need you to pay more for what you have now because the people we had before working on it weren’t very good. But we seriously have good people this time around! Looooooove youuu.”
So most programs are set in this sort of “Fix it however you can now and we’ll address later” which is the development equivalent of “Don’t call me, I’ll call you.” Of course fixing however it can be fixed only leads to more issues down the road. Around and around the wheels go on the bus.
Because of this unfortunate paradox, I think a little of us dies each time we work on a system. We start to break our oath a bit more every day until the point where we either jump one sinking ship for another or just phone in the code and learn to say, “It’s just work.”
Kind of the overdone cliche about a state representative that sets out to change the world only to end up being accused of snorting cocaine with hookers in Vegas.
I think a good amount of people, and maybe I’m insane (Which I am), want to do it the right way. They want to constantly improve that they’re working with. Problem is, this just doesn’t fit the business mind in the US. (Or other countries, but I can’t speak to that) The US Business culture just isn’t about doing it right, just doing it fast. So systems get built fast, are poorly tested, and covered with layer and layer of “fixes” to the point where it’s so massive that no company will pay to rewrite it. And even if they do, chances are the same attitude that build the mess in the first place will just show up again. Two months after pulling the company off a ledge, you’re ready to get up on that edge.
So how can we solve this? Can it be solved at all? Do any companies get this right and if it does, are they few and far between? Do you have to be in the 90 percentile to get that job?
I have to admit that from time to time I’ve wondered about this. I mean sure you hear of the mystical land of Google or Microsoft, or places built on magical things like TDD and Agile development. But hell, there are only so many jobs and only the top people get them. Does this mean the dream is dead for the unchosen many? Is it possible to bake your oath and eat it too?
Quote:
So how can we solve this? Can it be solved at all?
It can be solved but not under a system that is only about profits, as you described in this article. The only answer I can find is to change the system that society lives by. Watch the film “Zeitgeist: Moving Forward” which is freely available here: http://www.youtube.com/watch?v=4Z9WVZddH9w
Well unfortunately the system may be too much to take on. Hard to change the way a tornado works so that it goes against its nature. In the end, the change really has to come from us the developers.
Not going to get into some long winded speech about the power of the people or push some political ideology, but there is something to be said about there being a need for the developer community to start changing itself. Basically we as a group need to take the power back. After all, developers are probably the most important part in a team. Project Managers, Business Analysts, QA, ect can all be dropped provided the developer is still there. Hell, how many developers have had to wear all the hats at some point in their lives? Too bad we don’t act like we’re important. Most are too quick to ask, “How high?”
As a group, we need to learn to push back. Not just because it helps to prevent over work but also because it gives more time to do a good job not some hack job.(Which seems to be the accepted norm)
Of course someone might say that it’s idealistic and that real world things like kids and houses necessitate having a job and therefore there is no pushing back. Fine, you get to keep your job,,, but is the stress and health issues that come from it worth it?
I was going to write a quick response but once I got started I couldn’t help myself since the issue is frustrating, complicated and I feel it is about so much more than just job dissatisfaction. It’s a systemic issue. Before I could discuss the dissatisfaction of developers I needed to reason where this dissatisfaction was coming from.
I understand that you may be hoping for a simpler solution but I don’t believe there is one. I have not heard of one and was in the same boat as you: So how can we solve this? Can it be solved at all?
I would love for a simpler solution. I would be right there with you if a reasonable idea surfaces. Until that happens I have only been able to find one idea that has some merit. It also helps all people in all jobs with the same frustrations. We aren’t the only ones feeling this way about the work we do. This isn’t just an issue with the software developers.
——————————
As I again read your “Developer Hippocratic Oath” why do you believe that most developers don’t already follow it? Is it really the developers not doing their best work or is it their best work based on business restraints?
The goal of every business is to maximize profits, period. That is accomplished by keeping costs down and prices as high as the market can bare. That is the foundation of our free market/monetary system. Money is the bottom line.
One of the costs is the workers. Business provide adequate working conditions and compensate the workers for their time to creating a product, repair a product, or service a customer of a product. They favor workers that best meet their business goals and getting tasks completed quickly helps reduce theirs costs. The compensation they give to the workers also pays for all outputs they produce, thereby becoming their property.
It doesn’t make sense for a worker not to be efficient since this impacts on profits and also has an impact on their jobs. If the business is not profitable enough then they will replace or reduce staff as a way to reduce costs.
I know that this is very generalized but for the majority, if not all, successful business this is true.
Where is quality in this business perspective?
I’d like to look at the automobile industry as an easy example and readily understood by most. Why are there different classes of cars? They have several classes of cars to reach different (market) segments of the population based on income. Remember prices are based on what the market can bare. Well this is where quality comes in. For high end cars we will produce a better product. It will include more expensive materials and it will last longer. The low end we will produce something that is adequate to meet basic standards so as not to incur lawsuits. Lawsuits eat into our profits. The low end car uses cheaper materials and the car will break down sooner. More profits can be made with these low end cars from repairs. They will need to purchase part more often and we create a new industry called mechanics, to maintain the car. Awesome, we make profits on the sale of the car, we make profit on the parts to fix it and we create new jobs in the form of mechanics.
If profit wasn’t a motive and quality was number one then the cars would be nothing like they are today. They would use the best technology that is available today. They would use the best materials for every part. The cars could then last 20, 30 or more years with far fewer repairs required. They would be far safer. They would use technologies in all cars that would prevent them from hitting each other and from hitting pedestrians. They would add technologies in every car so that it wouldn’t start if the driver was intoxicated. They would add technology that would safely slow the car and move it to the side of the road if the car started swerving, assuming the drive was incapacitated (or asleep). There would only be one car, the best one with your choice of aesthetically pleasing body design and color. The only reason to create a new car is because of improvements in technology.
That can’t happen in our system? It would break our system as we know it. How would a business survive under those conditions? They need repeat sales so building the best product is not in their interest. Fixing problems is also a very profitable business plan. So why again should they produce the best and error free products. More profits can be made by produced the next version that has the fixes to the current product and adding a few new features. The more frequently they can release the next version the greater the profits.
So where does the developer or any worker for that matter stand? The business lays out what our tasks are and when they need to completed. During the process they may change several functions and features of the product and you need to make the necessary changes but the completion date has not changed. How do you produce the highest quality of code in this time constrain? Can you do your best work or are you doing the best you could do in the time allotted?
Many projects end up going past the original date and in a crunch everyone does their best but simplest solutions to complete their tasks. It doesn’t have anything to do with the developers standards but the lack of time to produce their best work. If it works then they are successful and their employers are happy.
The question you asked is, can we fix this and how? First I have to ask is fix what? Are you talking about the product or the quality of work/time to complete the work? I pose that we have no choices while working for a company if we wish to continue to have a job. If we take too long to complete our tasks then we will be replaced. As long as we are successful at completing the work then the quality is not a factor to our job unless it affects other peoples tasks. Again we would be replaced if we don’t meet a minimum standard. We have no say on the product at all other than suggestions. They will be taken under advisement and then the business will make the final decision whether you agree or not. Besides it is their product not yours. You have been compensated for your input and it now belongs to the business.
A worker’s only recourse is to leave one business and look for another that meets their standards. Getting a new job is based on competition. You must prove to that business that you are the most qualified for the job or that you are willing to work cheaper. All business’ have the same goal. Some may offer better benefits or more time to produce results but in the end there is always a limit imposed by the business based on profits.
You could try starting you own company to meet your expectations but money and profitability issues are then placed on your shoulders. And they will become an issue because you need to make sure the business is successful so that you can pay to put food on your table, a roof over your head and cloths on your families back. If you can’t do that then you will have to again work for someone else and work by their rules.
OK maybe this is going to far and somehow we can affect change inside of our work places. What can we offer the company by them allowing us to produce a better quality product? Remember that it needs to meet their needs which is profits. I can’t come up with anything but I’m not a marketing person so it just might not be my expertise. My limited take on it is as follows. If we produce the highest quality product maybe we will make so much more profit that it will offset the increased costs(more pay to workers + other costs)? Can we still keep the price lower than competitors? Does it matter since our product is better? Maybe there will be no change since either way people are buying our product. If it looks like we will make the same profits by keeping costs down (reduced quality and quicker releases) or by producing better quality products at likely a higher price. Why not take the quicker approach?
Maybe we need an organization that promotes these ideals of quality and by mass company’s will have to listen and produce better product. How would this help? This does not meet any of the business’ needs. There isn’t any worker related issues, that’s why unions were created. This organization’s only premise is an ideology. Business does not share this ideology if it does not meet their needs for profit. Besides they already expect you to do you best work because that is what they paid you for.
You also have to consider the economic climate. Everyone is in fear of loosing their jobs, unemployment is at it highest. There is many people that will take you job for less pay. They will do what the company wants because they need to support their families which takes money. They likely would still agree with you about quality but survival is more important.
What are our choices? The system perpetuates the conditions where profit is everyone’s master. Even when we know there are better ways we can only suggest it. Our only choice is to attempt to do it ourselves but we still have to make it work in the same system.
My final thought is what are the guides to quality. When is it good enough? Do we only stop when we produce the perfect product? Do we release the imperfect products before the final product is ready? Just because you think your work is of the highest quality, someone else may not see it that way. They may be able to improve it by making it faster. That’s a form of quality. Is speed more important than design? Are they equal? How do you decide. Business has decided that profits and the current market is the key for when to stop.
I would also love to discuss you response, “Hard to change the way a tornado works so that it goes against its nature”, but I will just make it brief. First we are not tornado’s and it’s a terrible analogy. The type of people we become is all based on the environment we grow up in. “Our nature” opens a whole new argument. But I completely agree with “In the end, the change really has to come from us the developers.” While I agree, you still have blinders on right now because you just see your job. This issue is everywhere across the world and not just in your job but in every job. Once you see that, you realize that it is a people problem do to the system we live in, not just a developer problem.
I feel your frustration. I am still there but I feel I understand the problem a little better. There is no easy answer. It’s complicated and global. Its perpetuated by the system. My answer here is short and only a quick response that doesn’t come close to really discussing the full issue. That is why I linked to the movie. It can explain it much better than I can. Maybe it will give you or someone else some ideas for some simple solutions. I’d love to hear them.
“… I know that this is very generalized but for the majority, if not all, successful business this is true.”
How many companies have you worked for? I’ve worked for 11 or so, and this has never been the case. I have a feeling you’ve either not worked for many companies or have been fortuntate. I’ve worked with start ups to Fortune 500 businesses and it’s not all that different. I find that it’s lack of understanding, or care, about good code and bad code. They only understand results. No one cares about how it’s built, just that it is. With that in mind, it no longer is about building a good product, it’s just about getting something out. Businesses generally don’t care about quality, just getting it done. I have also found that most develpers will just go along with this as long as there is a money coming in. Whether it’s giving up due to constant pressure or being a paycheck programmer from the start, the end is the same. Pushing back is not an accepted strategy for developers and the code suffers.
I have yet to find a company to work for that the code base isn’t broken at best. Massive time constraints by the company compounded by desperation hiring (And lack of knowledge or care about the difference between good and bad developers) just fuels this.
“The goal of every business is to maximize profits, period.”
This is pretty much the heart of the issue. Most businesses don’t care about quality, just cost and time. They want it done soon and for little money. Outsourcing is one of the effects of such actions. How many companies outsource just to get things done? I’ve worked with 3 large companies that have done this and it makes little or no sense beyond just saving money NOW not later.
In the ideal world, you would have companies that at least try to develop solid software but that’s a rarity. I’m sure there are some out there, but these are probably companies either started by develpers or filled with say the 90th percential.
As for the carmaker example:
The term you’re looking for is “Planned obsolescence” and I’m not sold this is true with cars or the car industry. Do I think certain features are held back to slowly introduce? Possibly, Apple has done this with the iWhatevers. Do I think that the car companies purposly built poor cars to sell more later, not really. I think you give them far too much credit. A lot of the issues you see are from nothing more than trying to build things as cheap as possible without throwing up red flags… Except there are always red flags. Recalls have been a part of cars since there were government agencies to catch the issues. Do you really think that if the car companies could get away with cars that are unfit to drive they wouldn’t? How many times have car companies been caught ignoring issues or covering them up so they can keep costs down as far as possible? If they were really concerned about builing the best car possible, they wouldn’t be pushing factories off shore because it’s cheaper. In the end, keeping costs down is number one. Not safety or quality. Safety and quality are just biproducts of the public shifting its trust in the companies.
With that being said, I’m not sure the automobile industy is the best choice of comparison due to many things. It’s been around longer, it’s a lot easier to physically understand the process of building, and there’s a visible physical limitation to building. Software is much harder for people to understand since there is a lot that isn’t understood by high ups due to how hard it is to visualize the process.
“… My final thought is what are the guides to quality. When is it good enough? Do we only stop when we produce the perfect product?… ”
I think there’s a fine line between good code and trash. There are some basic ideas that can be followed in order to at least provide code that other people can jump into without having to pull hair out. Concepts like decoupling, anti-patterns, and unit testing aren’t exactly beyond the reach of most developers and give at least a decent base to start with.
“I would also love to discuss you response, “Hard to change the way a tornado works so that it goes against its nature”:
Yeah, I admit that wasn’t the best way of expressing what I was trying to say. What I was trying to get at is that you can’t stop a tornado, this is a constant. So to avoid the damage, you have to change things about yourself or your environment. You can move, build a in ground house, make sure you know exactly where to go when one hits… ect. The way business is done in the US isn’t going to change anytime soon. It’s the constant. However, there are things we can do ourselves to at least make the situation better within our environment.
“I feel your frustration. I am still there but I feel I understand the problem a little better. There is no easy answer. It’s complicated and global. Its perpetuated by the system.”
I agree but again we need to get passed what we can’t change and work on what we can.
As for global, I can’t speak for that since I’ve only lived in the US.
But still in the end, my original post might be rehtorical as there may be no real answer, only idealistic dreams.
I do appreciate your responses though. Its really a facinating thing to discuss.
I just came across this blog and I love it. This is what I deal with every single day. There used to be a fine line between between doing the job right, and getting too carried away in your coding “art”. However now Its just band aid after band aid. Then when those band aids start falling off you just use twice as many band aids around the dges to help hold it all together.  At the end of the day, my bosses job is to make money. He couldnt care less about my techical mumbo jumbo. If it doesnt transalte into dollars, its a waste of time. While in reality it may translate into dollars in the long run, its impossible to prove.
I wanted to be a successful programmer one day, but that got cut short when my professor told me that I was wasting my time 🙁 He took his anger and bad attitude out on me.
Â