views:

1195

answers:

12

There are some major issues in my company regarding practices, procedures and methodologies.

First of all, we're a small firm and there are only 3-4 developers, one of which is our boss who isn't really a programmer, he just chimes in now and then and tries to do code some simple things.

The biggest problems are:

  1. Major cowboy coding and lack of methodologies. I've tried explaining to everyone the benefits of TDD and unit testing, but I only got weird looks as if I'm talking nonsense. Even the boss gave me the reaction along the lines of "why do we need that? it's just unnecessary overhead and a waste of time".

  2. Nobody uses design patterns. I have to tell people not to write business logic in code behind, I have to remind them not to hardcode concrete implementations and dependencies into classes and cetera. I often feel like a nazi because of this and people think I'm enforcing unnecessary policies and use of design patterns.

  3. The biggest problem of all is that people don't even respect common sense security policies. I've noticed that college students who work on tech support use our continuous integration and source control server as a dump to store their music, videos, series they download from torrents and so on. You can imagine the horror when I realized that most of the partition reserved for source control backups was used by entire seasons of TV series and movies.

  4. Our development server isn't even connected to an UPS and surge protection. It's just plugged straight into the wall outlet. I asked the boss to buy surge protection, but he said it's unnecessary.

All in all, I like working here because the atmosphere is very relaxed, money is good, but I simply don't know how to explain to people that they need to stick to some standards and good practices in IT industry and that they can't behave so irresponsibly.

EDIT:

Something I forgot to mention: I went through big drama this morning with a 20 year old chick who is kinda... an office assistant and tech support. I asked her to turn the music down because I couldn't focus on working, and I was verbally attacked in front of other employees.

I feel very disrespected by this to say the least. I can't change jobs because the economy sucks around here these days and there are zero jobs on the market, literally. If this kind of bad environment persists, I don't know what I'll do.

The lead developer who just quit recently did so because he wanted to work with the pros and was sick and tired of bad practices around here.

+20  A: 

You are in a position where all you can do is gently influence and lead by example. Do the right things and gently encourage others to do the same. If you are political about this, your influence will naturally grow. It is not easy and there is no guarantee that things will improve nearly as quickly as you would like.

I should mention that this kind of frustration led me to move from employee to employer. When you own the place, you can make things work the right way as you see it. Even then, you have revenue pressure and customer pressure that will sometimes force you to do things in ways you might not like. We live, as Buddha said, in an imperfect world.

Good luck.

Tom Cabanski
+1 for "Lead by example"
David Stratton
At least primal chaos no longer reigns
kibibu
+8  A: 

Sounds like a fairly typical small company. Perhaps you'd be happier somewhere larger that cares about SEI practices. Boeing might be hurting these days, but I'm sure Lockheed is hiring.

The plus side of this is that it sounds like there's nobody there who would care too much if you implement the practices you find best. Make your own unit tests. Delete those movies and claim you were out of space on the disk if anyone comes and complains.

T.E.D.
That's right, the OP only needs to be put in charge of DO-178B certification (http://en.wikipedia.org/wiki/DO-178B ) and in a few months he'll miss the old place.
Pascal Cuoq
Can't agree with moving to a larger company. He's happy with the environment. Besides, some of the best and most innovative software development companies are quite small.The rest, thumbs up!
Tom Cabanski
I'm equally sure that Lockheed is laying off. But it is a big company so I guess some parts may be hiring while others lay off.
High Performance Mark
@High: Given the way my company's military business has been going the last few years, I'd wager LMC is hiring. Wars are good for their business, regardless of how the rest of the economy is doing.
T.E.D.
I wouldn't feel comfortable coding for killing systems. I'd be happy to create hammers, even though they can be used to crack human heads. Creating cannons is somewhat different, though.
sbi
@sbi: I understand. I've turned down jobs making missiles and smartbombs for just that reason. Most military work has more to do with saving our guy's lives rather than taking others though. Examples would be building simulators, shipboard engine control systems, encryption systems, etc. NASA work also falls under DoD.
T.E.D.
@T.E.D.: While many people draw the line somewhere between a hammer and an atomic bomb (not all people, or we wouldn't have atomic bombs), it is very different where exactly they draw it. I'm not trying to condemn anyone drawing it closer toward atomic bombs than I do. Everyone has to find her/his own comfort zone and there are many factors playing important roles for that decision - like, for example, your level of patriotism. One such factor, however, is how much they have thought through what they are doing and where that leads to. And I'm all for raising everyone's level of awareness.
sbi
@sbi: Agreed. I found I can justify darn near anything short of actual missiles and bombs. Some can't go that far, and I can understand and respect that. Some have no trouble with the missiles and bombs either, and doubtless feel I'm a hypocrite. Good for them. Someone has to make them.
T.E.D.
Don't delete the movies. Just replace the files with zero byte files having the same name :P
Andrei Rinea
+3  A: 

Sorry to break it to you, but there is only so much you can do to affect such an entrenched environment. If even management doesn't see the need for the basics, the only way they will learn is if something major goes wrong. (For example, a breach that results in a loss of customer data, and a PR black-eye for the company, or a major systems failure that could have been prevented, or a failure of a PCI audit, etc).

I'm working in a shop that has been moving away from bad practices like those you posted and toward following best practices. Even with management support, it's a hard road to travel. Your best bet is to keep preaching, keep pushing, and ALWAYS make sure that everyone understands that your pushing is because you love your company and have its best interests in mind.

If you can show the financial benefits (reduced coding time, risk mitigation, etc) you'll have better luck with management.

David Stratton
+7  A: 

You could volunteer -

  1. To become build master. Lock down the source control/ CI server.
  2. To seed the office with books. e.g. "Clean Code", "Code Complete"
  3. To do some lunchtime or after hours coding sessions where you will introduce some good practices.
  4. To accompany your boss to some local events where the "gurus" speak.

Kindness,

Dan

Daniel Elliott
+1 for lunchtime sessions, we sometimes do that and it's relatively popular
Zsolt Török
+39  A: 

I work at a similiar small company, except I've been here for ten years and now I'm a partner in charge of all software development. In my time here we've gone from being an Access and ASP classic shop with no source control to an extremely competent, ever-evolving .Net shop with some big name clients like Citrix and Wyndham.

We got here... Slowly. And there is still work to be done. Also, it wasn't all me - I work with some brilliant people. I tried to be a good example, and I forced our organization to learn from the bad situations caused by our practices.

Here's the thing: craftsmanship, or the lack thereof, is cultural. You might be 10% of the culture over there, so if you lead by example you can make things happen. A lot of the culture comes down from the top, so I would try pitching some ideas to your boss -- things that will clearly improve efficiency or save money. Don't focus on TDD which is so contraversial at the moment that I understand they recently changed the name. TDD is awesome but it's a big change, and it's too easy to say that it's expensive and just dismiss it. Focus instead on easy wins. We don't do TDD here but I've gotten automated unit testing widely adopted. Maybe that will become TDD some day. Things like that.

Just don't be obnoxious. We nerds have big egos. If your co-workers feel like you're looking down your nose at them, you will have a hard time getting any kind of buy-in.

Brian MacKay
Aww, man, why can I only upvote once? :) Exactly right on all points.
GalacticCowboy
@GalacticCowboy: Hey, thanks! :)
Brian MacKay
+1  A: 

This has got to be a dupe (how to implement best practices without support of management), but I'm too lazy to look. Faster to write an answer.

Are you the senior developer/team lead? If you are the boss, then seek buy in, then mandate the improvements. If you're a follower, it comes down to managing your manager, a useful skill.

Implement process on your own. A lot (but not all) of process and better practices can be implemented in isolation. The code you check in can follow patterns and use unit tests, even if you collegues doesn't.

If the industry is correct and process and good practices do have value, then company won't live that long. You won't need to quit, there will be 3-4 pink slips in a few months (or years at best).

MatthewMartin
+6  A: 

Well, people will learn to respect good practices once they get burned enough times. You could just sit back and wait for this to happen. Or, you could identify a list of risks that your company is running by not following best practices. For each risk:

  • Explain the risk (EG: data on the development server could be corrupted in the event of a power failure)
  • As best you can, estimate the costs (in $$ and time) to correct such as risk after it has occurred
  • Explain how to prevent the risk from occurring, or at least how to mitigate it (IE, buy a UPS). If possible, list multiple alternatives, since everyone loves choices! :)
  • Estimate the costs of each alternative

Use this to educate management, and let them make an informed decision.

Justin Ethier
+1!!! The management understands the "risks" language.
Andrei Rinea
+2  A: 

Speaking from experience, you probably are not going to get anywhere. You can't teach a bunch of Morts the right way to do things; if they're ignorant of why using design patterns is a good thing, or why they should bother having tests (not necessarily TDD, but tests in general) then they're never going to learn since it's obvious they don't care. You might even end up getting fired for suggesting better ways of doing things (I've seen it happen, and had it happen to me a couple of times).

Your best bet is to use good practices in YOUR code. If you have code reviews, you can explain why you used what you used. If not, then eventually you'll get to a point where your code works right, and theirs is bad/buggy/etc and you can subtly suggest they improve the design of the code to avoid that 4-hour bugfix or long weekend spent fixing those strange errors.

Wayne M
Fired for trying to improve things? How did that happen?
VexXtreme
Team and manager felt things were fine and that I wasn't a "team player" by trying to explain better ways of doing things. Both team and manager had been with the company for years, I was the "new guy" and was better versed in proper software development practices, so I guess one or more of them felt I was a threat. It happens often... manager is afraid that somebody new knows better than he does and might get his job, so they eliminate competition.
Wayne M
People get fired for pushing too hard for what they perceive as positive change all the time. That is why I warned in my answer to be gentle and politically-astute when advocating change. Many folks cannot handle criticism even when it is right. Critics get fired all the time.
Tom Cabanski
You're spot on about being criticized. It's unbelievable how people take business so personally. Point out a mistake they made in code, and they think you're trying to put them down. It's really strange how most people have fragile egos.
VexXtreme
I totally agree. The squeaky wheel doesn't always get the grease. Sometimes the wheel gets replaced altogether.Change is hard to make happen. I would take Wayne M's comment further and say it's time to look for a new job. Easier said than done, because more companies "do it wrong" than "do it right". At the very least, you should find a company that "does it better".
Braintapper
@Tom Cabanski: To quote a friend, "If I liked people that much, I wouldn't have gone into software". Nobody goes into this business because they're politically astute and have good social skills, so don't expect too much.
David Thornley
Here's a different data point: I worked as a SE in a small company for almost a decade. When I arrived there, first thing I did was to introduce VCS, since they didn't have any and synchronized their work by swapping around changes between a dozen programmers once a month. Years I lobbied for stopping ignoring exceptions. Unit tests took even longer. But with steady persuasion and much examplaric work by two of us over a decade the shop developed to a point where they (still just a dozen developers) now add 4MLoC to a product of a huge company selling several millions of copies worldwide.
sbi
@sbi it sounds like you're one of the lucky ones, then, but even in your success story it took almost 10 years. Most of us now would be burned out long before that time just with the prevalence of poor development practices we would have to deal with. Again speaking from experience, it's very hard to be productive when you know better than everybody else you're working with.
Wayne M
@Wayne M: I think an important factor for me was that I wasn't alone in doing that. (The other guy became dev head after a while and I certainly had even better support after that.) Otherwise I'm not sure I would have lasted that long. Constantly running up against walls and only being able to make small dents can be very frustrating. As for your last sentence: I so wish I could work somewhere where there's someone I could actually learn some C++ from. More than a decade of teaching fellow-workers, but myself only learning from books, articles and online communities, is quite frustrating, too.
sbi
Sadly that's pretty much been my entire experience working with "developers". None of them ever seem to know or care about better ways to write code (and even if they do there's always some badly-written core app that can't be touched), and I end up looking like a know-it-all because I make an attempt to use proper software engineering techniques.
Wayne M
+2  A: 

I've seen some of what you are describing even at large national companies where someone who is higher up feels they can simply use the server to store their music/porn/etc. Unfortunately it's hard to invoke change in those situations, but if you are aware of it you can take some steps yourself to try and keep things safe. Monitor/make backups yourself. Keep them secure.

I've seen many people thinking UPS and backups are unnecessary until a storm comes through and destroys things.

Thyamine
In addition, file sharing and illegal downloads can also introduce risk of viruses and/or loss of intellectual property. (for example, an indiscriminate file share that ends up exposing proprietary information...)
GalacticCowboy
@GalacticCowboy: And heaven help you if one of the music labels finds out there's illicit torrents of copyrighted songs running on the server.
David Thornley
+3  A: 

How you handle this depends on how attached you are to your job.

Over time, you could perhaps change attitudes to improve the way things are there. But, you're never going to get to that point if you push too hard - as some of the other respondents have said, this is more likely to lead to you being edged out, if not just kicked out. This is particularly likely in a smaller team, since they may just feel that you're being an obstruction and not a "team-player".

If you genuinely want to stay there, even given the situation, keep your head down and try to change a little at a time. Don't be confrontational about it, that'll give them one more reason to show you the door. As you grow in seniority and experience, your opinions will count for more and eventually you'll be in a position to change things.

Good luck!

Stephen Orr
+3  A: 

I must say I've encountered the same everywhere I have worked, no matter how highly respected the institution is (I'm in academia). Despite a cool reception and the same weird looks you've described, after a while people have started coming to me for advice. People are often embarassed to admit that they actually have standards themselves, but one-on-one they will be all ears. Even among scientists, people are reluctant to look like geeks.

Also, I started browsing Stackoverflow because this is one place where like-minded people can discuss these things. Keep in mind that although the most important aspect (person-to-person contact) is lacking, there are other avenues.

Joel J. Adamson
Another interesting aspect of the "Why do you want to do all that?" (people have used the EXACT same wording with me!) is that I know one day that I will be a professor and that position alone will encourage some people to listen. Everybody questions my decisions now, but nobody questions the professors who do the same as I.On that note, one place you *are* more likely to find like-minded people is in academic computer science. Consider going to graduate school (or whatever the next logical step in an academic career).
Joel J. Adamson
+1  A: 

This sounds so familiar, I thought someone from my company wrote this post.

All answers so far are very insightful. I would add only one question. Do you think about the problems at work when you go home? If you do, leave. The jobs should support your life, not the opposite. Even with the tough job market, you can always get an extra acreditation like PMP (Project Management Professional), which, trust me, is easy, and go to the next level. You may get more respect and informal power in your current or future work to make changes.

Miroslav Jeliaskoff