Tact…
… is not something I’m known for. Being an introvert, I’d rather avoid the uncomfortable dialog. If I can’t avoid it, I want to end it as quickly as possible. My “normal” method is to lay out my argument as logically as possible. If that doesn’t work, I go for the throat and attack the inner most issue at hand. Pulling out the nasty gore and exposing it to daylight, so we can address the core problem and move on as quickly as possible.
So…
I am struggling with my current client. The lead is… um challenging. Let me give you a bit of background.
My current client is moving about 65 reports form a mainframe/Cobol into a .Net framework. Some of these routines are 30 years old. I’ve got “creation dates” from 1980. No joke. There was a conscious choice to not architect a solution before development began. The entire team has less than 2 years experience with C#/.Net/Visual Studio. Most of them are part-time programmers with other responsibilities. There are only two full-time programmers on this project. So, their individual and collective experience is very small. My understanding is none have done any .Net programming before this project started. Nor has any of them seen anything beyond the current project. Trainers were brought in to get everyone up to speed. And as far as I can tell, none of them do any .Net programming outside of the office. They’ve grown up in this strange little bubble without any outside influences. Closed environment. Closed minds. Egos are being protected about the interests of the project, team and even the company. Not exactly an ideal situation.
–
None of them had ever heard of design patterns. None one cares to find out what I’m babbling on about either.
Refactoring is basically banned. Once code is laid down, no one is willing to change it. “Can we change that?” “No. We might break something.” “Don’t you have unit tests?” “Not enough so we just leave everything as is.” <snort> “Really? You’re serious.” Think about that little exchange. Code written by a part-timer with less than 2 yrs experience cannot be changed. Fuck me running…
I have bringing books to show the lead other ways of solving a problem (Clean Code, MS Best Practices for C# & VB, Enterprise Architecture In .Net). He politely ignores me.
The lead refused to even look at the Microsoft Press TDD book I brought in today. I won it at PADNUG this week. It’s written by a couple guys that wrote NUnit. Still, it’s just too much effort to even open the book. “Our system works…” Really, so why are you having performance problems with your relatively tiny install footprint. Kryptiq had a much larger and complicated system and their performance was super-fast while being rock solid.
The global naming schema is a joke. Classes related to a single topic the same name across DLL and layer boundaries, regardless of the actually intent of the class. The repository shares the class name with the actual class that holds the attributes. This is kind of hard to explain… Where I would have FruitRepository, Fruit, FruitFactory, and/or a FriutManager spread across multiple layers. They have a Fruit object in the data, business and UX layers/DLLs. Then, they use aliases to “help” get around the name collisions. This all comes AFTER I was pointed to a Microsoft Best Practices reference.
I can’t think of a single area where they truly follow MS best practices. Variable naming? Nope. Class naming? Nope. Method length/naming? Nope. Namespace naming? Separation of concerns? Mocking? Nope. Nope. Nope. Fakes? You’re kidding right?
<sigh>
I ran FxCop and my system barfed. Seriously. I had over a 1000 warnings.
It’s so bad, it’s almost funny.
Today, I was told to move an object that generated a report out of the business layer and move it into Web.BL. What? I’m confused. Is it a Web/Ux layer or a business layer. I had already lost this debate for clarity two weeks ago, so I simply moved the files and remapped the namespaces so I could get on with it.
I’ve already written more tests in 3 weeks than they have in created in 2 years.
How the hell do you even write tests for all of that crap? Well you don’t. Why? Because he requires a nested Mock object in EVERY business class. If you run the default constructor, the Mock object becomes the data access point. What? Fruit.Mock holds live data by default. Instead of passing a reference to the data source (IFruitRepository), I’m supposed to pass in a Mock object. There’s even a RhinoMock reference in the business layer. What ass-backwards is that?!
–
It just seems to me that some people are just trying to make their own lives difficult. The lead is so proud of all of his work arounds and hacks. Work-arounds for problems I have never heard of. (That’s not really surprising, but you’d think “bugs” in Visual Studio related to data binding would be something I’ll seen before.) There are solutions to problems that don’t exist. Why use Session variables, when making a property public would take care of the problem in fewer lines without any casting and without requiring the server to handle the session variables? And why do we have 3 nested classes in every single business object that interacts with the UX layer? I really don’t understand how they arrived at this situation. Whatever happened it was a very long and circuitous route.
This is all very frustrating. I hate to give up, but I refuse to take their money knowing that I can’t reach the stated goal. The whole situation makes it virtually impossible to succeed. After all, I’m only the latest consultant to come through this place. Now, I understand why everyone that came before me failed. The cynical part of me thinks the whole situation is amusing.
I KNOW I don’t have all of the answers which is exactly why I spend so much time writing code, reading code, and doing everything I can to learn as much as possible on our entire field of software development. Why else would I be studying the source code for Dino’s latest MVC book at 3am? I want my name associated with quality code and successful projects. I fear this project’s isn’t one of them.
So it is possible for me to tell the IS Manager what the problems are with a degree of tact or am I screwed from the get-go? Do I burn the bridge with brutal honest?
I guess I’m done ranting. Time to sleep for a few hours before the sun comes up. I’m hoping this rant will help me reset my brain and dig back in with a better attitude and approach. We’ll see!
