On Getting Management Interested in Improving Quality?
npoole asks: "Like many of the Slashdot readers, I am a programmer and have been pushing out repetitive database content for about a year. The work simply doesn't stop and the more we get it seems the less we ensure quality work. I have been debating telling my boss that either we take less clients, less money, more quality work or I am leaving. Is this a smart thing to do? I'm making very good money doing quick hacks to push out websites, but it's not very project oriented as much as it's become 'throw in pre-written, pre-used functions'. Any advice on how to ensure quality in our work without telling my boss it's either my way or the highway?" Of course, improved quality in any product affects the bottom line, and it's the bottom line that managers are paid to keep up. How can a developer communicate to managers (both open and closed) the value of better quality in development, and how long should one try before giving up?
They decide how much money they put into developing quality. The customer decides whether to buy the product or to go with a better product. All you get to do is find someplace cool to work. If you have fun where you work, stay. If not, don't. Maybe there are moral issues about programming hack jobs, but that's up to your conscience.
The best thing you could do would be to start up your own company if you think you could make more money doing things your way.
Sounds like npoole wants to change the quality of his workday, not necessarily the quality of the software he produces. While I'm sure we programmers can sympathize, I think he'll have problems getting the point across to management.
-- If no truths are spoken then no lies can hide --
You might want to consider getting some QA in place (if you dont have one already). Also, there is a series of books published by Microsoft Press (Yes Mickey$oft!) called Software Development Classics that can probably help. The books are: 'Debugging the development process', 'Dynamics of software development' and 'Software Project survival guide'. The most useful being the second mentioned by Jim McCarthy who has plenty of sagelike advice, some of which will certainly be useful in your conversations with this project manager you mention.
? I'm making very good money doing quick hacks to push out websites, but it's not very project oriented as much as it's become 'throw in pre-written, pre-used functions'
Is this necessarily a hack? I could easily understand how it could be boring (as noted in a post above), but I was under the impression that being able to re-use your code across multiple projects was a Good Thing (tm) -- in order to get them out the door faster, among other benefits. Just because it's a new client shouldn't mean that you should have to re-invent the wheel.
AHHHHHHH! I'm burning with goodness again!
- Reakk, Sluggy Freelance
First Try this.....
If you want to show your boss that quality is suffering look at your quailty survey history, if you have one, that will back you up. Talk to other programmers that you work with and see if they agree that quality may be getting worse.
You have to prove to them that it is a problem, most management will not cut into profits from what just one employee says. You need to have facts to back you up.
If that doesn't work try this
Are you a valued employee?
will they give a rip if you quit? If they need you then you can get away with the "My way or the Highway" bit but if not then you maybe pushing your luck. If you don't know if they value you, you will find out real quick
It's not the OS it's the user that sucks. If it's user friendly, you get stupider people. - clinko
I see two things here: One, perhaps the boss is trying to get as much work as possible so that billing can be at a high level. Second, (s)he may have the same QOS concerns you do, but has reasons not to address them at this time.
What ever you choose to do, a calm, reasoned approch is always a better way than a hot-headed, "My way or the highway" attitude. You can leave if it bothers you that much, but don't leave in a huff. It won't do you any good and will cost you later.
Necessity is the plea for every infringement of human freedom. It is the argument of tyrants; it is the creed of slaves.
Not an impossible task, but you need to consider your approach. As developers, we like clean, pretty code. However, the people that keep us fed like profit. Saying, "I'm a geek, I like it like this" will get you nowhere. Instead, push for quality control - some sort of lifecycle methodology (in which writing code is a small part of the overall process). Point out that 80-90% of the life an application is maintenance, not original development. By pushing for a structured development process (requirements, design, development, QA, deployment) your projects will come out clean and well implemented. Of course, the bottom line is profit - if the "extra" hours to ensure quality can't be translated into billable hours, there's no hope. However, whatever you do, DON'T QUIT. The market is sh** right now. I repeat, the market is sh** right now.
The best thing about a boolean is even if you are wrong, you are only off by a bit.
First a word of advice: If you're getting paid, and the company you're working for isn't about to go out of business, then strongly consider staying where you are.
Perhaps you can approach the problem a different way. You could try talking to your boss about the issues you're dealing with; it seems the worst one is repetitious nature of the code you're working on.
Anytime you're doing something repetitive with a computer it's usually boring, and it's a sign that you're doing something wrong.
Perhaps you can work with your company to develop a more abstract toolkit for your application area. If your programming lanugage/library doesn't support abstraction very well, perhaps you can come up with a code generator.
It may be easy for you to push out quick hacks. But how easy is it to write a program that can do the same? That could be a good challenge, and it would benefit the company because they could complete projects quicker. You might also get to use some new techniques or tools.
An employee who's constantly eliminating his own job is highly valued by good managers. Not that really good managers are all that common either...
In my experience, the company's reputation does not suffer. I speak mainly of web development shops in this matter, but all to often there is oversell by the salesdroids, and there is no reasonable (sometimes even technilogically feasable) was to meet the targets.
But the company has this nice fineprint in the contract: "Quote is an estimate only; billing for actual hours worked will apply", or something to that effect. Basically everything is cool until the deadline, then the client starts jumping up and down demanding their software, which they get 100% late for twice the bill.
They bitch, moan and complain, but still come back to the company because of lock-in; not contractually, but because everyone else they talk to admits that to modify (update, maintain) the application will be difficult and costly for them without the original company's knowledge, design docs, etc (which, incidently, aren't part of the software and not purchased in the contract - bummer).
I know this goes for the UK and South Africa, and I'm sure there is at least some incidence of it in the US. "Churn it out fast 'n ugly, 'cause then they will pay more to maintain it" is the general rule. One day companies will catch on to this extortion, but they aren't at the point yet.
I know a number of damn good programmers who are simply not allowed to produce good code, because the company feels it is a waste of time. Sadly, the companys where they have produced good code have gone under in the dotcom slump ... why? Because they took longer to do the job, and (sometimes) quoted higher in the first place. The perception is that anyone who can quote can do the job properly, so you go with the lowest bidder or the most established.
/end_rant.
i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
...I would suggest that this economy is no longer the kind of economy that will support an employee dictating "my way or the highway". It is very likely your supervisor will pick "highway" even if you're very good, because there are many, many highly-qualified candidates now coming into job interviews. It wasn't like this a year ago. I realize other slashdotters may challenge me on that, because it's not a very nice thing to tell someone that they're possibly expendable. However, your boss may very well think that way, regardless. So be careful.
In addition, the "good salary" you claim to be getting may be due to the fact that you're churning out sites fast but charging the same rates you did back when you custom-built them. By asking to change the process, you may be getting a change in salary too.
Finally, don't forget that object-oriented, modular programming is supposed to make cookie-cutter work possible. If you're reusing your code over and over, sure, it could be sloppy, careless work, but it also may be that you've got a system working well and just object to the monotony more than the code. If that's the case, ask to be put on different projects, rather than taking a hard-core "reform-or-I-walk" stance.
My Greasemonkey scripts for Digg &
In just about any organization you have leaders and you have workers. It sounds like your boss is saddled with the responsibility of being a leader, and you have the role of a worker. For that reason *alone* it would be well worth your time, money not to stick your opinionated nose in where it doesn't belong. Don't get me wrong, I'm on the same side of the fence that you are, but rarely does an approach like you suggest end up making any change for the better for *anyone* involved. It may be that your company makes more money doing quick hacks; in the long run if they think they can make more money doing project based non-hacks, they will. If in the long run your clients finally realize that more careful planning up front is worth it's weight in gold down the line, they will go that route too. You can't control the average intelligence around you, you just sound like the fool on the hill... trust me on this one.
That said, I think a better way to look at this is
a) ignore the money aspect (both yours and your employers) Always trust that a business will do the thing that makes it the most money. You won't change this in the near term. If the money is that important to you, you should either stick it out or try to find a job that pays similarly doing something you *enjoy*
b) If you aren't happy doing what you are doing, look for guides on the web that give professional suggestions about how to bring it up, what to do and not do, etc. with your boss. do NOT just give an ultimatum, especially not in public company
c) If in the end, after rationally sitting down with your boss and explaining your position in a professional manner, you still aren't happy with the work, and your changes don't make business sense for them (even if you still know you are right -- you can lead a horse to water and all that) maybe you should consider leaving! It doesn't do much good to be in a job you don't enjoy.
A computer without Microsoft is like ice cream without ketchup.
Most of what I do doesn't involve databases but networks of terminals (serial, RF, and PC UI) are becoming more and more important to us. I have just defined a general-use flat data structure that allows virtually anything to be related to anything else within the sphere of what we do, without a DB engine and very fast, and with the ability to add virtually any kind of record to an existing set on the fly. It's harder to code this than a fixed-record field for a particular customer's app, but I only have to code it once, and then I can use it for everybody. In the long run, it will clean up a lot of old spaghetti while greasing the path for new jobs.
Brackets contain world's first nanosig, highly magnified:[.]
As someone whose primary job it making things work more efficiently, I have to tell you that sloppy code is the way the world works. Get it done, get it out there, fix it later if there is a problem.
Maybe in acedemia programers have the time to achieve loftier goals, but in the business world elegance isn't very valuable.
I'm sure that there are places you could go where you'd be able to write programs the way you like, but I'd make damned positive that you'd found one before you leave your current job for what is admittedly a "philosphical difference".
Kind thoughts do not change the world
You're paid to program, you're not QA.
Quality is the responsibility of everyone. Do you think you can write whatever and however you want and expect the QA department to magically instill quality into the product?
QA assure quality, they don't create it.
This seems to be a repeated theme from folks coming out of the academic world into the working world. In school, the ideals of creativity and perfection of a project are emphasized, whereas in the working world the focus shifts to making money and getting the job done. The truth is, you're probably not going to find very many employers who want to pay you to come up with high-quality, original, and "A-quality" work instead of focusing on rolling in the customers. You should probably try and channel your creative energies into something productive while still acheiving your company's goals, like finding innovative ways to roll out those websites or deal with influxes or traffic.
Now, if this bothers your conscience or you just prefer to not be associated with "good enough" work, do seek employment elsewhere.
If the client hasn't budgeted for overages due to quality assurance, your boss will ignore your pleadings.
-- @rjamestaylor on Ello
Let software quality make your products stand out from others, not features. There are many "elitist" companies in every industry that use this tactic. Take the Leica camera company for example (I'm into photography). They make some of the simplest featureless cameras in the market, yet they are the most expensive cameras in the market. Why? Because people don't buy their cameras for features, they buy them because of quality.
You can do the same thing with software. Make it nice and simple, but make it stable and fast. Take the basic and most important features that people use all the time, and make them work the best they can. With a good solid base system, minor features can easily be compensated for or even forgotten.
Outdoor digital photography, mostly in New Engl
One thing you might try is to suggest that management charge for "extras" whereby the customer can somewhat pay for quality, or at least explicitly decide against it. For example, charge for some things like "Developer Documentation", "hours of QA", or certain "Robustness Guidelines".
That way, you can be assured that you're not pulling one over on your customers, and your management can be happy that they're able to sell extra services.
Why are you letting these clowns ruin our country?
On the other hand, some owners get bamboozled by their own management -- and that is really bad news for everyone (except the managers) because frequently the owners of such businesses are themselves, of a solid technical background -- and that appeals to customers that are vitally interested in quality. I've seen this happen to some of the best who become successful -- they lose touch with their technical roots and luxuriate in the warm fuzzies provided by their own management -- typically made up of raconteurs with advanced degrees in some technical field and usually a claim to having actually accomplished something -- even if only the authoring of a book on management (which is exactly what happened to the Xanadu project, BTW -- one of the key aspects of that history that Wired Magazine didn't report on in "The Curse of Xanadu").
However, there is a more insidious dimension to mismanagement of software engineering projects that is one conceptual step beyond "The Mythical Man Month":
The Mythical Line of Code
The idea that "a debugged line of code" is some sort of measure of productivity, as posited in TMMM above, is the last refuge of the incompetent software engineering manager who is still trying to build an empire at the expense of the business owners.
I won't start a flamewar by getting into programming langauge debates, but suffice to say that in software engineering, a corollary of Occam's Razor applies:
"One should not multiply parse tokens beyond necessity."
By minimizing parse tokens, within the constraints of necessity (ie: schedule, budget, efficiency of execution, etc.), the true underlying theory of the code becomes more comprehensible and therefore more impervious to security exploits and hidden bugs. Indeed, it is such code that approaches the semantics of a specification as oppposed to its compilation.
Seastead this.
This is what meetings are for-- as a programmer, you probably hate them. But say to your managers, "I'm feeling pretty burnt-out here, and I think that the quality of our work is suffering. Can you see where I'm coming from? What do you think we can do to make things work better?"
Your managers are *not* out to get you, and may believe as much as you do in "doing good work." Odds are, they will react reasonably if you can communicate clearly with them.
Of course, it could be that you're just getting to the point where you know how to do 90% of your job automatically, and it could be time to make a lateral move into a different sort of programming environment that is more challenging. In that case-- say the same thing to your manager: "I'm getting tired of this work; is there some way that I could move to projects that excite me more?"
I have worked for a small software shop for 3 years now, and we recently started implementing Extreme Programming into all of the development.
Ths difference has been astronomical. Deadlines are more realistic, the our releases are far more stable, and basically, the whole "chaos" of development seems to have taken on an organized form that makes everyone happy, even our extremely hyper CEO.
It's customer-driven, it's organized, and it has simplified life at the company immensely. I'm not a shill for it, I'm just relating our experience.
I would highly recommend picking up a couple of the XP books. There are several chapters devoted to how to sell the idea to your bosses, as well as recommended means for showing them how well it's working, which is essential when dealing with people who are obsessed with ROI.
Explain the quality issues to your boss.. but remember: He is not in business to write shining examples of software; he is in business to sell the product/service you are working on.
Unless the 'lack of quality' starts hurting the bottom line, there is no reason to change the way things are going. In fact, it's more reason NOT to change them.
If you can demonstrate, in financial terms, how taking longer on each project to increase quality will cut down on support costs or something, you might have an angle.
Otherwise... you can only strive to do the best you can in the time you are allotted.
This is very important. Your concerns just have to be explained and "sold". Any half-decent manager will get a clue when their technology is second-rate: their customers will tell them.
Management will not start out asking for the perfect system, they have deadlines. However, they also don't want a bunch of crap that will cause them to lose customers.
That's where the refactoring is important. It's rare to be able to throw everything out and start over But every update can be an opportunity to improve the system. And over time, that means more reliable technology, and less programming labor costs, which management pays attention to.
This can work. Your boss cares a lot about what you deliver, but you have control over how you deliver it. I've used this technique a lot in my career, with good effect.
If you have to threaten to resign over quality, you're working for the wrong organization, period. Don't quit in a huff, just find another job. You're working for an organization where non-technical people are calling the shots on how software is developed, and they aren't accountable for when there's problems with the code. Since when is buggy code the manager's fault? If you push unreasonable deadlines and get buggy code as a result, you can always whip the programmers because it's their mistakes that caused this problem.
As a rule, I will *never* work for any organization where project management is in the hands of people who are not technically current. They are a non-entity at best, at worst, they can ruin the lives of their employees. I've interviewed enough of these "manager-managers" that I find their attitude towards managing the software development personally offensive. Mostly it's focused on perserving their authority and cracking the whip over their staff. "Beat the rock harder, beat it faster, more guys with sticks! Oops, wrong rock! Beat that rock over there!" No wonder so much software sucks out there. It's even worse that in most projects, the requirements are pulled out of management's hat, and have little to do with actual customers desires. How many of you have had to re-work a piece of software because of poor RA?
Now that I've ended the rant, enlightened management is always concerned about quality, and at the very least, is running the software on a regular basis to keep their thumb on the pulse of the software, and they have a good feel for what the customer experience will be. Customers don't reject products because they're short on features, they reject them because of crashes.
I strongly recommend Tom Gilb's "Principles of Software Management", which describes phased delivery of software, and rigorous requirements analysis. It's a forerunner of "XP" which is the latest trendy book, but it seems that some managers use "XP" as an excuse for "open-plan" offices, and more shouting, and kinda forget the automated testing and refactoring parts...
Since the mid-60s, my father has been a huge proponent of Quality Assurance and Total Quality Management, having followed the teachings of W. Edward Deming long before even General Motors had taken a liking to him (Deming, not my father). Since I was very young, I knew that my father's job was to make companies make better products. Sometimes he'd cost a company a few hundred thousand dollars in new quality programs that would, in several years, pay the company back millions of dollars in decreased support or re-work costs.
I also knew that when the United States fell on hard times (relatively so, like in the 70s, early 80s, mid 90s, and now), my father would inevitably spend several months looking for a new job because the companies he worked for could no longer afford the overhead that a Quality Assurance program introduces. There was never any question of a Return on Investment in quality, but there was always the question of how much cash the Quality Programs required. What's worse, Quality Assurance is a cost center: cash flows in but revenue never comes out. Most improved processes in all parts of the company can no be directly tied to an increase in revenue or a decrease in costs, so even though people understand that Quality Assurance is something beneficial, they don't know how to quantify how beneficial it is.
Because of this, when a company needs to tighten its belt, Quality Assurance staff are the first out the door.
It's a great thing to get management interested in improving quality. There are many people who truly believe the principles that were taught by W. Edward Deming, that are awarded by Malcolm Baldridge, and that are supported by the ISO 9000 certification process, but given today's economic situation, now is probably not the right time to be bringing this up with your management.
Oh, and if anyone knows of any upper-management positions for a long-time Quality Assurance guru with an impressive track record and who's been through the ISO-9000 process many times, send me e-mail. My father is, yet again, looking for a new job in the Los Angeles/Orange County/San Diego County area.
--
The is called the REAL WORLD boys and girls. It's a world where the corporate mentality is MORE is MORE and you'll produce or hit the highway.
They don't care if you leave, the down tech sector has produced starving database programmers who are willing to take your place and readily dispense with the "quality" tripe.
I was a contractor at a major automotive plant, when hourly workers complained that the transmissions don't fit into the prescribed holes, the plant managers said "Hit it with a rubber mallet until it does line up, and do it quick so you don't fall behind".
Gotta love the corporate work quality mentality. Either quit, or sell your soul.
Hope this helps.
The problem with software reuse may not be that the software is bad, but rather, that it isn't just right for the new site. For example, a script that displays selected records from a database may format it in a fixed format that looks fine on the first site, but looks crappy on the second site. Now software like that isn't all that reusable, but really good software that can be plugged in well would have to handle a lot of different things that take time to put together. And if you're billing time to customers, while it may be tempting to bill one customer for the time it takes to develop something that customer doesn't really need, management won't like that when the customer says the hours were way too many for what he got. The end result is each customer is minimized and good portable reusable software doesn't happen. If there was down time available to do stuff not specifically for any one customer, then that could be used to put together good reusable software. But as long as business is coming in, I'm sure the employers want to deliver to those customers and not lose them.
I see this as building more opportunity for the future. If businesses are cranking out crappy web sites today, then in the next year or two, some site owners will eventually realize that and have to look for someone to re-design it. Thus there will be more turnover of work to come during the economic recovery. Since the economic mess was caused by the MBA types, I say stick it to 'em and let them pay for the recovery.
now we need to go OSS in diesel cars
One of the best ways to approach this is to point out cases where poor quality has hurt the bottom line - time spent on fixes, lost productivity tracking down bugs, etc. to your boss. There have been a number of approaches to the issue of quality management as a means of reducing costs. Research that aspect and use it.
The reason we do things as fast as possible sometimes at the expense of quality, the reason we write for MS Windows instead of the other platforms, the reason we keep the source code instead of licensing under GPL, the reason software sucks, is all because the customer doesn't ask otherwise.
I don't know what can be done to change what they want.
As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
For example, Microsoft is the biggest software company in the world specifically because they realized early on that consumers are less interested in getting quality than they are in getting something that meets their perceived needs.
This is an important point, because unfortunately the most important aspects of software quality are usually hidden from the end user. Since most consumers actually do realize that they don't know jack about the inner workings of their software, they elect not to get inovlved in the esoterica of which kernel is more stable or which file system kicks ass.
Let's make the assumption that your company's clients aren't consumers. Let's say they're aerospace engineers. Smart peope. People concerned with quality. But the quality they are most concerned with is the quality of their own work. So their attention is primarily focused on how well the software you build for them will help them create quality aerospace products.
Also, keep in mind that the cash that runs your client's company and your company has to come from somewhere. Cashflow can often be a huge issue for clients. If a client knows that they can spend $50k for something they know they'll get in an imperfect form one month from now, versus $100k for something that they know is more elegant more cost-efficient over the long haul, they may elect to spend the $50k because their short-term financial concerns dictate that they deal with a lower quality solution now if it will give them just enough to do what they need done.
Even if your manager understands that the quality way is better, more likely than not she'd have a tough time convincing the client of that. In fact, in my experience, clients often don't really want to hear about deep quality issues. "Just tell me the tradeoffs, and I'll make the decision" they'll say. They simply don't want to really know the nitty-gritty details. "That's what I hired you for!"
The Bottom Line is money, and if your software is good enough that your clients can make money with it, most of them will vote with their pocketbooks. Most companies simply follow the buck, from quarter to quarter.
One thing you might try is to evaluate your next employer not just on the work conditions and pay, but also on who their clients are. There are companies out there that actually think long-term. An excellent book on the subject, "Built to Last" goes into detail about the characteristics of visionary companies. Yes, it sounds like cheesy business-speak crap, but these guys conducted extensive research, and they avoid easy answers.
Find a company that serves long-term oriented clients, and you may find yourself a lot happier.
Read the EFF's Fair Use FAQ
The problem could be that it takes time to build this kind of good, flexible, reusable, modular components. I've done the same thing myself. But rarely can this be done on employers time (who do you bill for the time ... when there's enough work to keep everyone busy). One might try to argue to management that if they spend a couple weeks putting together some slick modular tools, that over the course of the next few months it will pay back well with even faster deliverables. But when business is rolling in and customers are saying "the other company promised it in 3 days, but if you can deliver it in 2 days, you've got the deal" then management is loath to pay people for what to them seems risky. The answer may be to put together those tools on your own time, put them on some not-well-announced project on sourceforge using a "pen name" as the owner, then come to management one day and say "Hey look what I found, I think we can use this and speed up our work. We should try this out before anyone else discovers it". And the fact that it is already out there on sourceforge would prevent them from trying to take ownership of work done on your own time.
now we need to go OSS in diesel cars
In Fred Brook's "Mythical Man-Month" he quotes from the menu of a New Orleans French restaurant, "Good cooking takes time. If you are made to wait, it is to serve you better and to please you". If only such attitudes on quality prevailed in the software industry!
I am a SAS programmer working on clinical trials in the pharmaceutical industry. Since our work is (1) important in the proper evaluation of safety and efficacy of new drugs, and (2) apt to be audited by the FDA, quality control is an important component to our work. My management insists that proper QC procedures be followed, and we do.
My point is that programming jobs exist where quality is an important consideration. There is a great demand for good SAS programmers in the pharmaceutical industry.
Quality is a personal value and preference: if quality is important to you, consider a job such as this, where quality is emphasized.
managers (including the poster's) evaluate the costs and benefits of QA. the benefits of not pursuing quality include lower dev costs, and a shorter turnaround on investment. the costs of not pursuing quailty include customer churn, bad image, tech support costs. balancing these costs and benefits and their attendant corporate politics is probably quite tricky, so the manager therefore probably won't be that interested in being told how to do his job by someone who doesn't know how the company works (unless it's a blindingly obvious way to reduce costs - such as reusing old code ...).
As an example:
If your work is repetetive, this indicates to me that there is room to automate parts of it. You might talk to your boses about setting aside 10% of your time to improving the website creation software. This could make your work time more interesting and make the company more profitable.. a win all the way 'round.
What's possible is only limited by your imagination. Just remember that the easier you make the change for your management, the more likely that they'll agree to it.
Free Software: Like love, it grows best when given away.
I agree. Don't give management a decision to make. That just gives them more power whether they say "yes" or they say "no". Instead, keep the decision making to yourself. You decide if you can do things like create better tools on your own time, or if you just want to walk. Maybe you can tell them why on the way out, but personally, I wouldn't even bother. Usually if they can't figure it out on their own, they won't understand it when explained by someone who doesn't talk MBA-speak (which I'm assuming you can't do if you asked this question of slashdot in the first place).
now we need to go OSS in diesel cars
Honestly, I could see the issue if the lesser-quality work was causing problems with your company's business. However, you fail to present reasons why this may be the case, and hence I am unable to see any motivation for you to want to create more quality work than merely because you feel it is the "right" thing to to.
Your company's customers are ultimately paying you for your time. They get what they pay for.. if they didn't feel they were, they would go somewhere else. You don't owe them anything. There is something to be said about taking pride in your work, but, especially in this economy, you need to realize where the difference is between reducing the pride in your work and doing what is best for you and your company.
Perhaps if the shoddy work was backfiring and causing customers to leave you'd have a case, but if they keep coming, then why change what you're doing?
I suggest that you tell your boss that you realize that the work that's been getting released has not been up to par with your personal standards, and make the point clear that customers could potentially be charged more for higher quality in the cases where you feel they've been cut short. Your boss doesn't care about morals.. tell him how you can make more money by increasing quality and you get your self-satisfaction AND your paycheck.
--
And another job is probably not going to be waiting for very long. Any business that has enough work to need to hire another person is probably very concerned about making deliverables to their customers (or else they would just have the existing staff do it and save money on salaries). Given they probably got 500 resumes for the job, and interviewed 20 excellent candidates of which they might well like to hire the best 5 to 10 if they had the open slots, if you get the offer, you better take it right then or risk losing it to #2 who is probably just as good as you are anyway. Then you can decide if it is worth explaining it to your old boss during the exit interview (if you even bother with one).
now we need to go OSS in diesel cars
That was a huge mistake. I was "talked to" by several people above me, and my superiors wondered if I was "on crack." When I tried to explain my standpoint, and how quality would improve and six-day workweeks would be unnecessary if we could produce more quality work on a consistant level across the development teams, here's what I was told:
So what it comes down to is that the profit margin is the bottom line, always, and the beauty of the insides of the machine you're building take a backseat to doing things the way they've always been done, as long as everything gets done on time.
Is it crappy? You bet. Am I comfortable working this way? Not at all. But like everyone else, I have bills to pay, and I'm looking forward to a future where I can start my own small company, and run things in a manner that I'm comfortable with. It's a sucky situation, but the more I learn about anything, the more I learn that the bottom line is always the trump card in every situation.
It's also true that the market does suck, but smart people will always be needed, and if you're smart enough, you can find a way out that both benefits your career and improves your workstyle. It may not be this week or the next, but it will happen.
I gave up trying to use the 'quality' argument years ago... companies aren't out to produce a quality product, they exist solely to make lots of money for their shareholders.
The great mystery is how managers can shout at programmers for producing buggy software, then shout at them for missing their (unrealistic) deadlines by only 24 hours (and this is after pulling a week of all-nighters).
To management it's a simple equation - product=customers=money. Quality doesn't come into it - in the real world if a program works for 24 hours you've probably made the sale... and if it breaks after they you can charge them for the upgrade too!
So next time you find yourself in the middle of a block of 15 year old code that didn't even work then, let alone now, that management won't let you touch, take solace in the fact that every other programmer is probably going through something similar...
I'm not sure what code reuse has to do with poor product quaility, unless the modules themselves are broken somehow. What you've described really sounds like a development manager's wet dream. Drop-in, pretested modules with a minimal amount of modification? That's the holy grail of the coders-as-cogs management mentality! If the customers themselves aren't complaining about quality, I doubt management is going to give a hoot what the rank and file thinks.
If you really insist on pushing this, I've got a few pointers for you:
Best case, management addresses your issues, and you look like a "team player". Worst case, they drop kick your arse out without even giving you a listen. The outcome depends on how you play your cards.
No boss can accept that you - a mere worker - tell the company to take less money! Not unless the company has so many problems that even a boss can see that something drastic needs to be done, and then it is too late!
No, you have to tell him to take less clients, charge them more so you can take the time to do things right, make more profit, and avoid all the complaints and expensive modifications and overrun schedules and/or whatever problems the boss thinks the company is having.
Or, do it all yourself! You have earlier established how long such a project takes. Now you can do the work much faster, with all your reuse and better knowledge of the systems. So, let the boss have a quarter of the advance, and use three quarters for yourself! Take an extra hour to clean up the code you are working on. Take a day to make a routine more general! Every week, add to the collection of documented tools you are using. In the end your boss is as happy, since he doesn't know you could work any faster; you are happier, as you have time to do some things right, and the company is happy, because in the end you produce better quality for the customers, who stop whining and come back for more. Probably you also end up working even faster - remember to reserve more time for the important tasks!
If none of this works for you, abandon the sinking shop! Best of luck!
In Murphy We Turst
There is a trilogy of dimensions at the core of the issue: cost, time and quality. Every organisation needs to balance these. The management of your organisation, like most I have worked in, don't understand the quality issue in relation to software because it is more subjective than the other two dimensions and therefore it doesn't get the emphasis it deserves.
From the little I know about your situation, here is my take on what you need to do:
But the basic form of the business case is:
Another way of saying the same thing is:
If you have other people who have the same focus as you, pool your talents and resources together.
If you want this change and it's important to you (which it sounds like), then you need to put in some work to make the change. Don't make an ultimatum because it's an employer's market - they can just take you up on it and that won't help anyone, especially you.
Remember, anyone can be influenced if you can show them that what you want makes it better for them too.
I hope this is in any way helpful. I have had similar battles myself and still do, but life is always slowly improving!
Mark
It depends on what you--and the customer--defines as "quality". The simple answer: "enough [but not too much]". A solution needs only the quality sufficient to perform its job; any less makes it unreliable; any more makes it less cost effective.
Can you have too much quality? Yes. Web applications typically don't need, nor can they afford, the level of quality demanded by life- or safey-critical applications. (And speaking from experience, most programmers won't, or can't, tolerate the demands of such critical development. I approached work every day with the perspective of "if this harms someone, can I state honestly and credibly to a court of law that I did everything in my power to prevent it". Now do that for a couple years; it gets very old very fast.)
Before you start in on management about "quality", have a good definition of it is you're after, what is enough, and why you think what you're providing custmers isn't sufficient.
Define "quality" before trying to make "quality" code. "Quality" doesn't mean one single thing. It can and does mean different things to different people. I've seen people use "conformance to spec", "fully documented", "feature rich", "crashproof", "fast", "easy to use", "surprising", "first to market", "bug-free" as all or part of what "quality" means.
Figure out what you mean by "quality", then find out what your boss means by "quality". You may be talking across each other. You might want to look at Gerald M Weinberg's Quality Software Management for a better discussion of the meaning of "quality". I'm not sure about the rest of the book, but the section on what "quality" means is relevant.
My other advice: ignore consultants and companies who peddle a Process (a process to reach SEI CMM level 5, or ISO 9000 status, for example) as a means to acheive "quality". They often leave "quality" undefined or vaguely defined because then they get to use opposing meanings as convenient. When convincing programmers to use The Process, quality consultants will use "bug free" or "speed to market" as the implied meaning of quality. When talking to managers, they use "feature rich", "on schedule" or "completely documented" as the implied meaning of quality. When talking to corporate leadership, the use "cheap", "speed to market" as meanings. Often, some tension exists between various definitions of "quality". "Cheap" often opposes "bug free" or "fully documented". "Feature rich" can oppose "high performance". "Speed to market" can oppose "fully documented". You get the picture.
The day I have to "be thankful to have a job at all" and not speak my very experienced and bright mind as I see fit is the day I stop programming for a living. I wouldn't be worth a damn without being able to speak up and actually make a difference.
Not taking a stand, if done by enough employees, guarantees that your job, or even your entire company will be the one with its head on the block next.
Not caring about quality because your company doesn't is a most excellent way to hate your work and lose your spark utterly. Don't do it. The paycheck isn't worth what that will do to you if you take such advise. I know what I am talking about.
'As a rule, I will *never* work for any organization where project management is in the hands of people who are not technically current.'
By far, the biggest problems in technically-oriented companies are the non-technically-oriented managers. They are generally making far more money than they would at a non-technical company. They are willing to do anything to keep their jobs, including making life miserable for everyone else.
The best acting I have ever seen was not in a Hollywood movie. The best acting I have ever seen was by a manager trying to make everyone believe that he could manage without thorough understanding.
When they sink their companies, they are generally able to get another job, because the people who hire them are faking it, too.
The dot-coms failed because they hired good actors and not knowledgeable people. The dot-coms did not fail because of highly complex situations that could not be understood in advance. They failed because they did extremely foolish things.
The use of non-technical managers will continue as long as there are investors who will put money into something they don't understand.
Bush's education improvements were
Dude, trowing out pre-written, pre-used functions is what good software engineering is about. That's the whole point of good design, preventing you from having to re-invent the wheel every time.
If you're getting bored, try to get higher up the design hierarchy instead of sticking in your lowly code production job.
It's a hack when you have to write from scratch essentially the same thing again and again. NOT when your are re-using stuff. Get with the program.
Even if you are cutting and pasting code, quality shouldn't go down if the code was written well in the first place. If you had made a proper middleware for each of the various languages you use for your web development, all the time you spent would be with custom content and not cutting and pasting code. Productivity would go up, quality would go up, and time and cost would go down. You would also have more time to spend on the "cool" stuff.
In 1986 David L. Parnas and PC Clements published a paper entitled, A Rational Design Process: How and Why To Fake It. Parnas and Clements present a strategy for imposing overlying order upon the often fractured development process; the goal of which is to produce better software. Doing snippets of work for managers/clients who don't care about quality as much as they care about costs is often a cause of this fracturing.
I couldn't find a copy of the paper online, but it has recently been re-published in Software Fundamentals: Collected Papers by David L. Parnas.
A couple of friends and I have dealt with this in a number of jobs. What we finally settled on is over estimating our project deadlines a little bit and using the extra time to improve quality. This method has worked well for us in both contract and full-time positions. Just my two cents.
http://nwbagpipes.com/
For genuine truth-in-advertising there should also be others in the series with titles like `how to tart up rubbish and get it out the door by deadline' and `managing your wont-fix list'.
Got time? Spend some of it coding or testing
If you find yourself concerned about the quality of the software you're writing, you're in the wrong job.
You seem to be a programmer working a code monkey position. You've suddenly realized this when you say to yourself "the quality of my work is sucking and it pisses me off". Congratulations, you're not a scumbag.
The reality of this is unfortunate. If you complain, they're much more likely to realize that you're not the person they need either. They need someone who took a crash course in ASP and won't care about profit diminishing things like quality, or taking pride in your own work -- something that's much more important to you.
So, are you willing to prostitute yourself? That's exactly what it is. And no one will blame you for saying yes. The only person who you owe anything to is yourself.
Choose wisely.
Money.
Let's face it: If you talk technical details most managers will get that blank stare after a while. Either they don't understand what you are talking about or they are not interested, probably both.
But if you can show them how to save money on the bottom line, they will listen to you. And yes, you can boil it down to money. Better code means less time spent on correcting errors, time which most likely is not billable. If that time (a.k.a. cost) can be removed or better yet converted to billable time, it will affect the bottom line positively.
So in order to be allowed to make better quality, you have to calculate how much it will save on the bottom line.
Also, be honest and don't oversell your stuff. You may think that what you propose will earn say a 20% saving. Tell your manager that the saving will be at most 10%. Why? Because you will most likely run into snags and teething troubles that will diminish the initial savings. And if you don't, well, performing better than promised is usually not a sin.
My opinion? See above.
I totally agree with this. There are proper geeks out there running the show in some places. They're not easy to find, and now probably isn't the right time to uncautiously jump into unemployment, but there's the odd place you can get away with quality work.
If all else fails, go earn shit money for a while, working in a place where you learn and can do quality work, then in a few years come back with a title like 'architect' and you can *decide* to do quality work.
toeslikefingers.com - because
How can a developer communicate to managers...
Keep in mind that managers, such as yours, are likely to have a different priorities. Delivering a 'quantity' bottom line is as important to management as you producing 'quality' code. Moreover, the manager is likely NOT to consider the programmer's cry for quality if there is no such echo from the paying client.
"but it's not very project oriented as much as it's become 'throw in pre-written, pre-used functions'"
Welcome to the maintenance phase. I don't know your particular circumstance, but it sounds like your project has hit a certain plateau. As a result, much of the work takes on an ad-hoc flavor. Managers love this if it's a time + labor type contract. The problem is, this can become very maddening to the programmer as he/she is compelled to write code at an unspecified, moving target. Which is then followed by fixing or modifying such code because despite the client's belief that we, actually cannot read his/her mind. At times, it is like chasing one's tail.
'The work simply doesn't stop and the more we get it seems the less we ensure quality work'
...).
... but with nothing negative to say about me.
I would LOVE to have nothing but bleeding edge work all my life. However, with almost twenty some-odd years in the industry I've learned that maintenance happens. Which is bad because it's happening to me, but good because I am the most fixable element.
Sounds like I've succumbed to the pointy-headed-boss ? Perhaps, but consider my most recent situation, which sounds similar to yours. Realizing it was going to be a bit repetitive, I built some libraries and some code generation tools. Since management only cared about getting the web reports out, I told them I needed several reporting languages on the server (e.g. php, perl, python, jsp, etc
I got about 2/3rds of what I asked for, and kept interested learning new stuff on their nickel. They didn't care, as long as the client was getting what they wanted within a reasonable time frame.
Because a portion of it was repetitive, I built libraries and code-generation for the rest of the programmers. This in turn bought the programmers on staff, including myself, time to focus on quality. Taking a bit of extra time these tools bought us to call the client and figure out exactly what they wanted before we put code to compile.
I know this sound a bit preachy. But I'm not speaking as some great genius, but rather someone who's learned from their mistakes. More than once I got myself in a jam because I didn't understand the simple reality that when I point the finger at someone else, I'm also pointing three back at me. And that since I have more control of my situation than that of my manager and my client, it's often smarter, easier and more profitable to see if it's possible to make changes on my side first.
When that's not possible, then I don't waste my manager's time with complaints, I just field my resume and leave them scratching their heads
healyourchurchwebsite.com - WWJB?
The point was to emphasize that when a pizza is delivered to my house, I don't care if it was cooked in a Vulcan or Middlebe-Marby oven, if they used X or Y management style or if they were driven by this factor or not.
All I care about is that if the local manufacturer of circular pseudo-Italian cuisine:
delivered it fast enough;
delivered it as specified;
wasn't stuck to the top of the box;
didn't taste like the top of the box.
... yet amazingly enough, even in those cases, I didn't give a fig about how the restaurant was managed.
I mean if I wanted "quality" Italian, then I'd get dressed up, take the wife downtown, spend some time and some bucks
healyourchurchwebsite.com - WWJB?
Your boss wants
The trick is to find an approach which fulfils both these sets of goals. Several exist, but the most obvious one is to work over the course of several projects to turn what you have (which you say are all very similar) into an actual product. This means
Your boss gets
In addition you both get
To successfully sell this to your management you will need to be able to demonstrate that this can be done off the backof your regular project stream, and does not have to mean that some guy gets to sit in a corner contemplating his navel "writing the product" for a year. You will never sell that to your boss. Instead, devise a plan where you use the code for project A, and generalise it a bit and add customisations to support project B. By the time you have delivered C and D as well, what you have is a product.
To make this work, you will have to retain the IP on the software you write, which I guess you don't at the moment.
The best way round this is to tell the clients explicitly that they are getting a product (clients often like products because it means that the project delivery risk is reduced).
But the client will refise to allow themselves to be marooned without support. Hence you do a deal with them whereby they get a non-exclusive license to modify the code which is transferrable if the business is bought or sold. You can also tell them that this means that they are free to seek support for your code from elsewhere (but that they cannot sell the code on). They may well like this (it has several good features, e.g. insulating them from risk of your company folding). Your support agreement will need to be clear on the fact that you won't support the code if they have just hacked upon it madly.
In short: develop a strategy that benefity you, your boss and your clients, and think about hoe to sell it to all three.
Sounds like a lot of Slashdotters need to watch Jerry Maguire.
Whether you're a coder or a sports agent, the grind's pretty similar, as will be the reaction if you suggest "fewer clients for less money".
...but here's what I did...
In a process I was in charge of, it took a certain amount of time to get a certain task done. Obviously as our experience grew along with the tools we wrote to help automate that task, it took less time to complete.
We just never told management we could do things more quickly now. That way they get things done in the time they expect...so they are happy...and you have time to focus on the details, or make things even more efficient, or study what you will need to know for the next phase of the project or for other projects, which kept us happy.
You just have to know how to play the game on their terms. They'll never allow you to take time away from real production to do things the 'right' way, so you have to come up with ways to allow you to do so while keeping management happy at the same time.
First, remember that business is about profits.
Business in most of software companies is almost never about profits -- it's about vanity, power, politics, be it at the worldwide level or between lowly paper-pushers with MBA, pet projects, ass-kissing, blatant fraud, VCs' money-pumping machines, etc. At best it's about looking good in the eyes of few "important customers", in which case someone might influence company through them, but that still requires a lot of political bullshit, that programmers usually aren't capable of.
Contrary to the popular belief, there indeed is no God.
Actually Mozilla has a very crappy design -- it's more structured, but just existence of structure doesn't make design good.
Contrary to the popular belief, there indeed is no God.
Sorry, you can't teach and old dog new tricks. And the bigger the dog is... the bigger a dog it is. Quality comes from within, it is not imposed upon from above.
Translated: if your company doesn't have an internal, automatic, innate, sense of quality, forget about it. A real company will either have bosses that unconditionally heed concerns about quality and say "go for it", or, they'll already know and you'll be doing it. Look for a new job on your spare time, and move when the time is right.
When building a bridge, the banker DOES NOT GET TO SAY "oh, use some less cable-ties here to save a few bucks". You're the engineer, they're the money-men. You engineer.
I can explanate how to administrate your network. You must configurate and segmentate it, so it can computate.