When all you have is a hammer, everything is a nail. For the folks at TCTSRN, all they had was a 20 ounce ball peen called T-SQL to solve their IT problems. That’s fine if all you need to do is generate file extracts or shuttle data from one source to another behind the scenes of an enterprise application that had a front-end. But after a few years, the TCSRN users started to demand more, like custom intranet applications. If you have been doing nothing more than data-diddling for a long time, you are woefully ill-equipped to deliver anything more than crap to the end-user.

I was trying to get that point across to my team – they didn’t know shit, and they were going have to get with the program. I was more than willing to show them the way, mentor them, coach them, whatever. But they where going to have learn something more than SQL.

They didn’t like that idea.

For one, SQL is a procedural language. It’s great for linear thinkers. The code at the top runs before the code at the bottom. Nice, top down paradigm.

Secondly, you could keep monkeying with a query until you got the results you wanted. Hit EXECUTE, and you get instant gratification.

So, with the nice procedural nature of SQL, and the immediate results that show up in your editor when you hit F5, it becomes a very comforting programming environment. Sort of like a application development security blanket. Always there. Stable. Controllable. Complex enough to keep you awake. But even if you are trying to solve complex data issues, all you need to know is the basic syntax, and you could hack your way to a solution. The language hasn’t changed in over a decade.

But developing applications requires more. Event-driven programming, object-oriented programming, multi-tier development, remoting, etc. – some of that is hard shit that requires some creativity, tenacity, and curiosity. My team had none of those traits.

This became painfully evident when Mr. Whiteboard asked me to work on a web project with the TAC (Thick-Accented-Cambodian).

“I don’t want you to do the coding, but help him out,” the shovel-faced bozo had asked me.

That would be rather tough, I had thought to myself, since the TAC had never coded anything but SQL. But I took it as an opportunity to demonstrate how things can and should be done in the shop. This would be the app that I could leverage as a learning exercise for the team.

On the surface, it was a simple page that queried the massive back-end system, combing through millions of records to return just few, depending on the specific criteria the user entered. With the brute force approach of building a dynamic query and passing it to a stored procedure, it would take minutes to return a result – a worthless solution. But with some sophisticated front-end work using AJAX, a solid middle-tier object that does the bulk of the processing, and a basic stored proc that returns small recordsets, the app would rock.

Not that the TAC was going to be able such an app – he was a SQL-writing idiot who knew one way of doing things – brute force. His stored procs sometimes where 5000 lines long. He thought temp tables were a gift from the heavens – and fancied himself to be a genius for knowing how to use them.

Get a clue, you data-diddlers – temp tables are no big fucking deal. If not used properly, they are just a way to get yourself in more trouble. And most of you are really lacking in the creative side, so I see a lot of brute force in those nasty stored procs you SQL hackers are so proud of. So many of you write like you get paid by the line of code. The rest of us are not impressed – after all, there is something called elegant coding. But I digress.

To top it off, the TAC has a nasty habit of nesting sub-queries. His code looked a lot like this:

From TableYada Where YADA_ID IN (Select
From Where YadaYadaID IN (Select YadaYadaID
From Table YadaYadaYadaId)))…

... And so on, and so on and so on…

You get the idea. It was like the TAK would curl himself up in a little ball of logic and fuck himself.

So I decided to lead by example. I came in on a Saturday (that was getting to be a habit), and wrote a nice prototype ASP.NET application that solved the problem. Leveraging some 3rd-party AJAX components (not some Atlas vaporware), I had a UI working in hours that queried that database and offered drill-down functionality without post-backs and excessive delays. It used one stored procedure that was twelve lines long.

I commented the C# code, excessively. I wanted the TAC to get the idea -- not everything can be solved by SQL.

It didn’t take long for me to figure out that the TAC was not impressed. I met with him the next Monday in my office.

“Did that code make sense?” I asked him.

“Uh, wud, the web page thing?”

“Yeah, notice how the middle-tier database code reduced the round-trips?”

“Uh, ummh, maybe,” he stammered. “But maybe, uhmm, it not so good. Maybe you can make it stored procedure, so not so much C sharp code.”

Really, I thought? Little shit-for-brains SQL boy thinks we need more spaghetti code…

Fuck, I was going to loose it….

“And how would we debug that?” I asked. “There are four levels of detail, each with its own query.”

“Uh, maybe you use PRINT statements,” he said. I realized that this marble-mouth cretin had never used a debugger. It was a lost cause. All he had was a hammer, and the world was one big nail to him.

Posted in:   Tags:

I've been away from the blogging routine for awhile, and have had some time to reflect on a few things. You see, I have been doing some heads-down coding for the last six months and haven't had to deal with any management or political issues, and I've come to a conclusion.

Most programmers are shitty employees.

No, not bad coders. Bad employees. Of course, I generalize.

But is there a group of people more anti-social, belligerent, unjustifiably arrogant, and plain unproductive than programmers?

And God-forbid one should dare suggest that. If so, prepare for indignant rants, suggesting that management is always the problem. After all, how dare someone expect an employee to communicate professionally, follow some standards, and for the most part, not be a fucking self-indulgent, quasi-autistic jerk all the time?

As someone from both sides of the great programmer/manager divide, am starting to realize that maybe the poor reputation of I.T. managers is not very accurate. Some suck. Some suck more. Some are very, very good.

As for programmers, most are horrible people to work with, and especially, to manage.

For example, my current contract has me working in a cube on a floor that is primarily filled with salespeople, and I’ve noticed a few things.

  • They dress nicely.
  • They smile when they pass you in the hall – even if they don’t know you.
  • They banter, flirt, and generally engage in polite social mannerisms during the workday.
  • They hold the door open for you.
  • They say ‘excuse me.’
  • They are polite to coworkers and bosses.
  • They wash their hands after using the toilet.

Most programmers do none of these things.

OK, I’m sure the trolls are ready to flame me and say “If you weren’t such an asshole, people would be nice to you!”

But even the programmers I don’t know, the ones that work on different floors, that have no reason to think that I am an asshole, share these common traits:

  • They are rude.
  • They dress poorly.
  • They are downright mean. Like “fuck you, I can code” mean.

Just an observation, and I am probably over-generalizing. But I try to counter the stereotype by being somewhat polite, holding doors open for people, and whipping the anti-social sneer off of my face when I am not staring at the screen.

So for an IT manager, there is a huge hurdle that has absolutely nothing to do with technical competence that impedes their ability the get things done and successfully manage projects -- their staff are assholes.

And I’ve noticed a cottage industry developing in the blogosphere that revolves around IT manager bashing, and I am partly guilty of that. But let’s not give the jerk-off programmers that dominate the trade a pass. They are the ones causing management to move jobs to India. I mean, if you want a surly, smelly developer with poor communication skills, you can get one from WiPro or Infosys for a lot less money.

Now for an update – I haven’t felt the urge to get up early and blog lately, and I can’t with good conscience blog at work. But I’ll try to post a little bit more often.

Posted in:   Tags:
Tunnel Rat posted on March 28, 2007 16:02

I got a lot done that Saturday. Now, I’m not a workaholic, and strongly believe in the XP philosophy that if you are going to work overtime, it should be done in small, infrequent intervals. But without much help from my “team,” shit was just not going to happen.

"Team" was a generous term. Team would imply that they could work in a coordinated, collaborative manner. Not so – they worked together like four guys in a circle jerk work together.

When I came in the next Monday, I fired up Visual Studio to wrap up some lose ends on the Online Inquiry app I had worked on over the weekend. The piece of shit site was finally getting stabilized, and if Mr. Whiteboard could get his act together and verify that it worked properly, we could launch in a week. I checked the code into Source Safe and moved on to some other tasks.

Big mistake.

When I finally got some half-assed specs from the overworked business analyst who sorta, kinda, maybe knew how the thing was supposed to work, there were some gaps. Evidently, the security of the system was so well designed that every user had the same login id. The way they differentiated who was who was by assigning a unique password, and the code had to figure who the user was by querying the database for that password, along with the group code (which was being passed around in the query string – in the clear). Not very secure. In fact, a hackers dream. Crack the weak password, guess which one of the four group codes to use, and you are in. Kiddie script stuff.

Not that you would be privy to much, except PERSONAL MEDICAL DATA, like the fact that Juan Esconseco in Orange, California was getting treatment for genital warts, or that Stacy Mooring in Yorba Linda, California had received a prescription for Lithium. Not very important, unless you had just started dating Juan and thought he had beauty marks, or you are married to Stacy and didn’t realize she was bipolar and thought that her violent mood swings were due to PMS.

The fact is, with folks like Charlie and Mr. Whiteboard in charge of your sensitive medical information, the chances of your medical data being secure are slim to none. They have other things to worry about, like their kid’s basketball games (Mr. Whiteboard) or beating some gangsta wannabe in some violent video game at the local internet café (Charlie). Security is an afterthought.

But not to me. I had done what I could to tighten the security holes in the Online Inquiry App, and was ready to circle back around a few days later. I first had to spend a day in a Leadership For Results class. Mr. Whiteboard’s idea. I have a bunch of coddled punks on my team and an impotent boss, and I’m the one that needed the leadership training.

Right. Sit in a class with a bunch of middle managers and department heads and do silly exercises designed to make me a better leader. No fucking way. No amount of role-playing was going to help me deal with the squad of bozos I had. But I went through the motions, played nice with folks like the Director of Coordinated Care and the Manager of Executive Compliance, and kissed a little ass with the HR lady that ran the thing. She was, after all, the one that turned me on to Charlie’s bogus resume and was helping me navigate through the shitstorm that was festering in Mr. Whiteboard’s shop.

When I cracked open the code a few days later, the work I had done was gone.

I did a double-take. Chill-out, I said to myself. Let’s make sure it didn’t get moved around or renamed, or put in folder created by a Vietnamese coder with limited English skills, like “Businez Leyer” or something.

No luck. I couldn’t find the class I had written. I was starting to freak.

It was a very stressful, nerve racking job, pushing the rat's mental state to its limits. Crawling through narrow, pitch black tunnels, sometimes for hours looking for a heavily armed enemy who would if he got the drop on you not hesitate to kill you.Occasionally under the strain a mans nerves would break and he'd be dragged from the tunnel screaming and crying. (Link)

Charlie had laid a trap. But I knew what I was up against, so I prepped myself. I checked the app to see if it would still run. Somehow, it was working like it did when I had wrapped up my changes a few days earlier. That meant the functionality that I had coded was there, somewhere.

Charlie had moved my code around, and didn’t bother to leave any comments, like “I moved your fucking code to class bla-bla-bla, you round-eyed piece of shit.” Just moved it, probably to some place it didn’t belong.

I found my logic lurking in the front-end, mixed in with a bunch of Charlie-code. Charlie-code was ugly, and I could spot it a mile away. I got my shit together and scheduled a meeting with Mr. Whiteboard.

When I walked into his office a few hours later, he looked scared. He always looked scared when I went to go see him. Let me try to “manage up” and help him out, I thought to myself. He wasn’t cut out for this stuff.

“I got the app security stuff working this weekend,” I told him.

“Oh. That’s good.” He flashed me a fake smile. He looked like he was passing a gallstone.

“Yeah, I figured out there are no unique user IDs, so I tightened that up a bit.”

“Yes, I know, we, uhm, came up with that to make it easier to set up users. And there is a “Z” login that you can use to test all the accounts. It’s in the code” He looked ashamed. Deep-down, he knew that wasn’t right, hard-coding a backdoor to make things easier on him. Lazy bastard.

“No prob, I found that. But I had everything working, and now my code is gone.”

Mr. Whiteboard grimaced, like another gallstone was moving through his alimentary canal. “Did you check with Charlie?” he asked.

He was getting wise. At least he was dialed in to the fact that Charlie could, and would, do all sorts of crazy shit to maintain his position as Head Motherfucker In Charge of Code.

“Well, I was about to, but I wanted to check with you first. See, the code was moved around somewhere. I think we need to talk to him, you know, reinforce the need to communicate things.”

He took a deep breath. “Oh boy.” God, he hated this stuff, I could tell. He wanted so much to be adored by his staff, and Charlie was Golden Buy, his pick of the litter. And now he had to do something about his behavior.

Mr. Whiteboard got on speakerphone and rang Charlie’s extension.


“Do you have a second, Charlie?”

“Wud you need?”

Maybe you could get your little ass into your boss’ office, I felt like screaming into the phone.

“Uhm, we just want to talk about a couple of things about the Online Inquiry app. It will just take a second.” Mr. Whiteboard was begging.

Charlie walked into the office and sat down next to me. No pleasantries were exchanged, just grunts and nods.

It was a short cross examination.

“I wrote some code to handle security in the app, and now it’s gone,” I told him.

“Yeah, I move id do da frond end.”


“Da frond end.”

“Oh, the front-end. Why?”

“Dad where id belong,” he mumbled.

“How come you didn’t comment your changes?” I asked.

He shrugged.

Mr. Whiteboard had had enough. “Thanks, Charlie.”

That was it. No discussion about the importance of communicating with your supervisor, yada-yada-yada, nothing. He just didn’t have the stomach for it. I wasn’t going to get much backup from this clown, and if I came down heavy on Charlie, or anybody else, Mr. Whiteboard was going to back them up. I was screwed.

“So, what do we do?” he asked.

“I’ll tell him to roll back his changes and leave my code where I had it.”

“But where does it belong?”

Jesus, now I was going have to get into a technical discussion over this? Not going to happen.

“That’s not really the point,” I told him, trying to remain calm. I wanted to pound my fist on the table. “Ideally, the code should be in the middle-tier, it’s more secure that way. But he shouldn’t just move it around – that’s the issue here.”

He stared at me, blankly. He had no clue what I was talking about. I stared back at him, blankly. The meeting was over.

Posted in:   Tags: ,
Tunnel Rat posted on January 2, 2007 18:34

Something was not right.

While doing bug fixes on the Online Inquiry App, queries were timing out. I upped the ADO.NET connection timeout to get around the problem, but that was a short term fix. Users can’t wait 30 to 60 seconds to get a page to load, at least not most users.

Have you ever been on the phone with a customer service rep that is waiting to pull up your record, and they say “Sorry, my system is a little slow today?” This is usually because performance is an afterthought for most developers. Especially those working at non-profit companies in the health-care sector.

I checked the queries. It was painful. The code was dynamic SQL, meaning that they were made up at run time, depending on what criteria the user selected. You did not know what was being submitted to the server unless you stepped through each call to the database. Sometimes the queries would be very fast, other times they would take almost a minute. And the pages would hang.

Oh, yeah, I’m sure there is some DBA pinhead out there reading this and saying “You could run a trace or use SQL Profiler to examine the queries! Gosh, you’re so stupid.” Well, fuck you, Mr. DBA. Most of the time you need special rights to run Profiler, and I don’t like to trace. So get back to your data-diddling, asshole.

Finally, I found an eight table join that was hitting a table with three million records. That is not a lot, but if you don’t leverage the indexes, you’ll be doing a table scan that brings the query to its knees. And some of these queries were hitting columns without indexes.

For the sake of keeping my development momentum, I thought about purging that table of all but 10,000 records. I fired up a delete query. As I was about to execute, I paused.

What if this was production data, I wondered?

After all, the database names weren’t prefixed by intuitive terms like “DEV” or “PROD”. I couldn’t put it past Mr. Whiteboard or Charlie to assume that these queries were read-only, and that it wouldn’t hurt to develop against production data. It’s not like some developer is going to go in there and blow out a few million records of live data, right?

Developers can, and do, purge tons of data in the course of real application development. That is why they need development environments. And QA environments. And Production environments with logins other than sa/password.

But for Cheap I.T. Bastards and Lazy Hacking Turds, having the discipline to not turn your production database into a sandbox is too much to ask. It costs money. It takes time. And it requires you to communicate – which is not a strong suite for someone trying to protect his turf or sabotage a new supervisor.

I was going to bring this up with Mr. Whiteboard. I closed the query window with the delete statement, updated the bug database and got ready to go home. It was Saturday, after all.

Posted in:   Tags:
Tunnel Rat posted on December 28, 2006 18:21

Back to TCTSRN...

As the S.A.D. (Supervisor, Applications Development), I felt it was my responsibility to get my team the tools that needed to be productive. The right software and hardware can make a ton of difference for productivity and morale.

For example, The TAC and Burning Man did a lot of work with massive text files, and this type of task cannot be done with a basic editor like Notepad. I checked online and found the program they were asking for online selling for $39.

Charlie had also been whining about wanting a dual-monitor system. As much as I hated the feral creep, getting him some new gear would go along way in shutting him up and reducing his compulsive tendencies to sabotage me. I had been using dual LCDs for the last two years and it was a huge difference over a single monitor.

Considering TCTSRN had some decent desks, current generation computers, ergonomic chairs, and 17” LCD’s, I thought I could get Mr. Whiteboard to spring for some upgrades.

So I thought.

There is a breed of manager, supervisor, or director in I.T. that can only be described as the CHEAP I.T. BASTARD (CITB). They lurk in the middle tier of companies, and they have the power to make a developer’s life miserable, merely because they hold the purse strings for hardware and software. Mr. Whiteboard was such a creature.

Toiling away for years in vi or Query Analyzer, or Notepad, or worse, a command prompt, they cannot imagine there is a world with programmable mouse buttons, slick IDEs, text editors that show you byte counts, or things called “XML Editors.” The CITB is a bottom-dwelling scavenger, one who takes pride in doing things in the most Spartan manner. And they’ll be damned if they are going to blow a few bucks of their budget to get a developer some widget or, god-forbid, a pair of LCD monitors.

I found this out at my next meeting with Mr. Whiteboard.

“Some of the guys said they need a real text-editor. I found it online for $39,” I told him.

He looked at me, blank-faced. Man, I was getting sick of his vacant stares. Our relationship had declined steadily with the Charlie fiasco.

“What for?” he asked.

“Well, they have to scan a lot of big text files while they work on the extract programs. Notepad doesn’t cut it. Oh, and I think we should get set up with dual-monitors.”

“Dual-monitors? Why?”

“If you take a look at their desktops, they usually have ten or twelve windows open.”

“Mmmm.” It was obvious that he couldn’t image why anyone would need more than a couple of apps open. But then again, he had never been a developer, just a data-diddler, hacking out SQL in Query Analyzer. Sophisticated application development requires numerous windows open, one or two for Visual Studio, several SQL-Server consoles, editors, file managers, and browsers, not to mention iTunes or Pandora.

This was going to get nowhere. The TAC had told me that he had been asking for that cheap text editor for three years. Mr. Whiteboard wasn’t going to spring for it. I thought I could eventually wear him down, but the CITB was a tough creature. Sometimes the only way to get through to them was to bring your own gear in or shame them into laying out some dough. I started to fantasize about showing up at our next meeting with a $39 check made out to TCTSRN.

He changed the subject. “So how are things going with Charlie?”

“It’s a challenge. I’m trying to keep him busy on other things besides the Online Query app. I did talk to HR and did some checking on the procedures and steps that we would need to ---.”

“You talked to HR?”

“Yeah, just to do some checking on the --.“

“I thought we were going to work this out together?” He was pissed.

“I, uh, I just wanted to get some background on the, um, uh, process.”

He glared at me. What an asshole, I thought. I had taken positive steps to remedy this severe personnel problem, and I was getting reamed for not keeping things between him and me.

“Let me know the next time you feel the urge to talk to HR.” It was a threat.

“Sure, no problem.” The meeting was over.

I went back to my desk and inventoried the situation:

  • I took a big pay cut to get supervisory experience.
  • I got conned into running a pathetic team of surly hackers.
  • My boss was a Cheap IT Bastard.
  • I couldn’t fire anyone or hold them accountable.
  • I was not to talk to anyone in HR.
  • I was responsible for getting a shitload of work done by the end of the year.

Barely a month into this gig, things were looking grim. I was going to have to take matters into my own hands.

Posted in:   Tags:
Tunnel Rat posted on December 27, 2006 18:31

I have to take a break while I get some things in my life in order. I am buying a new house and recently got back into the contract programming arena.

To give you an update, I landed a nice gig at an established dot-com survivor that went public in 1999, so it has a mature software shop that values specs, design, documentation, and QA. This is more than I can say for the Web 2.0 space, which is full of flipmeat and the code-and-load culture of open-source, anything-but-Microsoft, make-it-up-as-you-go MySpace wannabees.

Seriously, does anyone actually believe sites based on Ruby, running on a tag-based scripting language like PHP, and hitting a MySQL database can scale and be maintained and enhanced for years? Currently, I am working on some code that is on average five years old. But if it is encapsulated, documented, and done by someone other than a former Starbucks barista or Everquest junkie who downloaded ROR and reinvented himself as a web-developer, I can maintain it. Try that with the vaporware getting VC funding now.

When I look at these job postings for programming gigs at start-ups using PHP (which I used to think stood for Programmers Hacking Porn, because every adult site is written in PHP), Ajax, Ruby, MySQL, yada-yada-yada, I think of one thing: Hacker Sweatshop.

The minute I would try to create a class diagram, or properly model a database, or write a functional spec before banging out some code (all of which are SOP at mature Microsoft shops), I'd be called into an IKEA-decorated office of the so-called CIO. Now, this CIO would probably be nothing more than a twenty-something, Blackberry banging, iPod wearing, excessively-pierced dork who is working for promised stock options. He probably has a case of chronic ADD, mixed in with OCD, so he can never, ever, decide what to obsess over. In addition, he has a perpetually twitchy thumb from years of game-console operation that has progressed to PDA obsession. And most-likely, he has a Bluetooth earpiece that allows him to carry on conversations with his MySpace pals while he holds staff meetings.

And once he discovers that I haven't coded his MySpace/YouTube/Flikr rip-off in the 7 days he thought it would take, he would fire me and say some crap like "we need some heavy-hitters in here" or "we are a results based company" or "we don't have time for all this design stuff, you get paid to code, not design" or "we expect you to work more than 12-hours a day, because we need to launch the site to get mezzanine funding."

So that said, I've been too busy to devote adequate attention to this blog. I find that it takes me an hour or so to properly formulate a post, edit it, and update the blog. I don't feel comfortable posting a few random sentences with links to other sites, so when I do post, I want it to be worthwhile reading for my readers.

So stay tuned, I have a lot of topics to cover in the near future, such as:

  • Cheap I.T. Bastards
  • Why None Of Your Medical Data Is Confidential
  • Dumb Bitches Of The Computer Business
  • Most FTE Programmers Suck
  • Curry-Eating Wage Pirates
  • LAMP, Ruby, and the Code-and-Load Culture
  • Taking Things Up With HR

... And More!

Posted in:   Tags: ,
Tunnel Rat posted on November 29, 2006 17:08

Charlie was bloviating again. Three cubes down, he was going on and on about Active Directory, impersonation, authentication…yadayadayada. Dweebs like Charlie love an audience, and the victim that day was Ferris, a systems guy. He was the Supervisor of Network Systems, or something like that. He dealt with hardware, installing applications and mapping printers.

So why was he dialoging with Charlie? This happened every week; Charlie was writing some application for Ferris, but I wasn’t sure what. I drop an email to Ferris.

“Can we get together sometime and discuss the apps that Charlie is working on for you?”

Ferris met me the next day in a conference room with a big whiteboard.

“I’m sorry, I didn’t even know Charlie reported to you. I have a standing meeting with him on Thursdays. You should probably be in on that,” he said.

Nice. I’d been there a month and there were people who still didn’t know who I was or what I did, or who reported to me. Good job, Mr. Whiteboard. Outstanding way to spread the word and integrate me into your organization, you blank-faced creep.

“No, problem. I’m just trying to get a handle on what Charlie is working on,” I told Ferris.

We spent the next hour diagramming all the various web sites and interfaces that Mr. Bill wanted, and the numerous single-user apps that Ferris had Charlie working on. Small stuff, but a considerable amount of work in its entirety. Apps that integrated with Active Directory and the HR system, apps that talked to eTicket, stuffed that moved data around. After the whiteboard was filled with chicken scratchings, I asked Ferris what he needed done right now.

“There’s this Phonebook Admin tool that Charlie almost has done,” he said. “The phone dude needs it to manage all the different extensions.”

“Ok, I can’t promise anything, but I’ll get all this work in the queue, prioritize it and see about getting some of it wrapped up.”

I went back to my desk and cracked open SourceSafe. Now, in a normal, healthy organization (is there one?), I would have just walked over to Charlie and asked him for a status on these projects. But since he wasn’t even answering my emails, I figured I'd get better results by snooping around the archives then by trying to get meaningful data out of that surly, evasive, ground-dwelling turd.

I started at the root and drilled down to what looked the stuff Ferris was talking about. Nested three projects deep was a folder called “PhoneBookManager.” I dragged the source code down to my PC.

Man, that’s a lot of code I thought as I watched the “Copying files…” dialog. I fired up VisualStudio and started digging.

A half-hour later, I finally got the app to run. What I had stumbled upon was Charlie’s sandbox – a one-page, one-user app that was going to be his pilot project for every new technology he was curious about and wanted to explore. Never mind that the users were clamoring for basic functionality and Mr. Bill was pissed that the Online Inquiry app was late. Nope, Charlie had more important business to attend to.

It was like an elevator to the moon.

This measly one-page web site did nothing more that manage the data in a single table that stored user names and their phone extensions. But in this app, Charlie had managed to incorporate Atlas (Microsoft’s feeble attempt at Ajax), web services (required by Atlas), and his own hand-rolled framework of data classes and security components.

Now, without any supervision and no accountability, most developers would go hog wild and do what Charlie had done, which was basically turn the company’s IS department into his personal playground. Not that it made any fiscal or strategic sense, but Charlie didn’t care. He was having too much fun.

I had come across Ajax development not that long before. It was a hot new technology, but very demanding. It involves a lot of asyncronized communication between the web client and the web server. In its purest form, it requires tons hairy JavaScript. After writing a few Hello World apps with raw Ajax, I found some third-party components (ComponentArt) that encapsulated all the nasty client-side stuff. With Ajax, you can create slick web pages with UI features that used to only be possible with Flash.

It drove the creative types crazy, because now a lot of their wacky designs could be done in ASP.NET, with all the benefits that a non-Flash application has. Things like readability, reusability, object-oriented development; concepts completely alien to the pierced-eyebrow, perpetual three-day beard, dingy ball cap crowd known in the trade as “graphic designers.”

But Charlie was doing it all wrong.

He had jumped aboard the Atlas bandwagon. Atlas was Microsoft’s lame attempt at competing with the Google-driven onslaught of Ajax-enabled websites that were all the rage. Things like Google Maps were full of high-fidelity web interfaces with minimal postbacks and all sorts of eye-candy. As usual, Microsoft was late to the game and trying to catch up. They had hastily thrown together a mishmash of components that supposedly abstracted the vagaries of Atlas and posted them on a web site.

It was garbage.

Atlas was barely documented, wildly buggy, and a typical Microsoft “lets throw something out there to keep people guessing until we come up with something solid” delay tactic. It was pretty much vaporware. Joel Spolsky called it “Fire and Motion,” just an attempt to keep moving forward. Atlas was for hobbyists and hackers with too much time on their hands. Charlie fell into the latter category.

Now, I'm sure there are some readers that are just dying to flame me and say that third-party tools are a waste of money, and Atlas is a robust Ajax framework, and having to create a web-service to get an Ajax callback to work is no big deal (unless you need to change the URL of the web reference), and I'm just a big pussy because I don't want to get my hands dirty with bleeding edge technology...yadayadayada...


One of the skills a developer learns over the years is to recognize immature technologies and stay away from them. Atlas was such a technology. Ajax.NET is no better. After all, if Ajax.NET is in beta, what the hell was Atlas? Alpha? For those out there hacking away at Ajax.NET, enjoy. I have better things to do than try to get things like "rounded corners" and "accordians" to work. Now if you happen to work at one of those "not invented here" shops, or your manager is a Cheap I.T. Bastard (more on that later), and your work doesn't involve deadlines or profit motives, be my guest. I myself prefer to drop a server-side control on a page, write a couple lines of JavaScript, and spend the rest of my time setting control properties and working in the code-behind.

Ok, enough ranting about Ajax. I added the PhoneBookManager to my list of crap to cleanup. My whiteboard was filling up quickly.

Posted in:   Tags: , ,
Tunnel Rat posted on November 21, 2006 17:04

While the whole Charlie mess was going on, I was trying to get my team on the same sheet of music. I had laid the groundwork for the version control system, and needed to standardize the development process. To that end, I was holding weekly staff meetings where I would try to introduce some new technologies and development principles.

These meetings were less than successful. I tried to keep them interesting. I even started each one with a Dilbert cartoon or some funny video I had found on YouTube. But for the most part, my team could care less about best practices, standards, reusable code, documentation, or configuration management. And it showed.

Charlie would doodle. Aggressively. Now, I too used to have a serious doodling habit, but I have since learned to curb it in meetings. When a programmer really wants to show you they don’t give a fuck about what you have to say, they doodle furiously in your meetings. Heads down, elbows flying, hard-core doodling. Some even erase their doodles and make a lot of noise wiping away the eraser rubber. They never really told me how to deal with such insolence at Toastmasters.

Mr. Coffee would nod off. For as much coffee as that ass kisser would drink, he was shockingly narcoleptic.

The TAC would ask some questions. Hard to understand questions, but he at least was faking interest.

Burning Man would look scared and bewildered. He would ask questions about the most mundane of things. One time he asked “What is IIS?”

I thought he was kidding. “Uh, it’s, like, the Microsoft web server,” I answered calmly. I tried to be patient.

But I started to wonder if this guy was ever going to do more than hack out SQL scripts for the rest of his days. Seriously, if a developer just took a .NET class, and works in a Microsoft shop, and still does not know that IIS stands for Internet Information Services, he’s beyond clueless.

I realized that I was going to have to work with Burning Man to get him up to speed. We hadn’t really gotten off on the right foot. He had come by my cube once and I had told him some mocking story about this environmentally sensitive bimbo that I used to work with at SIAN, and how she would cut up the plastic six-pack rings before throwing them out.

“I do that,” he had said.

I had tried to laugh it off, but he had looked at me, sternly, like I was some kind of Neanderthal. Not that I’m not, but I don’t need to be reminded. What a militant tree-hugging fucker, I had thought.

But I was eager to mentor the poor, frightened hippie. There was a project that had got dumped on me by the network guys where I could use his help. We needed to get our web sites off of an old server and set them up on a new server. It was grunt work, mainly loading files and making configuration settings, but for a newbie, it was a daunting task. I wanted Charlie and Burning Man to work together, load the servers, configure them, and document the settings. Then I wanted them to set up a backup server, going off of nothing but the documentation. It was a chance for Burning Man to get up to speed with the web world, and a way for me to marginalize Charlie for a while.

After one of my staff meetings, I went by Burning Man’s cube. He worked in the dark side of floor, where the staff had barricaded themselves behind six foot high cubicle walls so that no one could easily see what they were doing. It created a sense of forbidding personal space that made it awkward for one to just drop in; you had to kind of work your way around their cubicle partition to get to their desk, and you could really freak someone out if you just barged in. There was an unwritten rule in that section of the floor – if you were about to walk into someone’s five foot square domain, you tapped on the partition wall.

“Do you have a second?” I asked, tapping on his cube. His purple mane peered out from behind the partition.

“Oh sure, no problem.”

I sat down in the extra chair he had in his cube. It was dark in there, even though he sat next to a window. The blinds were always closed. Something smelled funny, I couldn’t pin it down. Lotion? Stale soy?

He had stacks of CDs on his desk. He had yet to join the iPod revolution. I looked through the stack, hoping to find some common ground in our musical taste. I saw a Bowie disk. Bingo.

“Hey, you like Bowie?” I asked.

“Some. I don’t really listen to him that much.”

“Cool. I saw him in concert. Over twenty years ago.”

“Uh-huh.” He was wearing scuffed up Doc Martins that must have been ten years old. In my book, shoes that you wear to the mosh pit are not business casual. They just make one look like a dork. A troll. And his purple hair that he had pinned in a bun behind his head was absurd. I had run into him a couple of times in the men’s room, and he was always in front of the mirror, doing something with his hair.

I tried not to think about his appearance. “Yeah, he was excellent.”


This wasn’t going well. I decided to get down to business. “I’ve got a project that I wanted to talk to you about.”

I told him about the server migration.

“Uh-huh,” he responded.

“Yeah, so if you are interested, I think it would be a good opportunity to learn some new skills. But don’t feel like you have to do it. It’s your call.”

“No, sure, I’ll do it.”

“Great. So you have some vacation coming up?” I had just signed off on his request.

“Uh-huh.” He crossed his legs delicately, and perched his elbow on his knee. He was resting his chin on his palm, like a woman. A pale-skinned, purple-haired woman.

“So, where are you headed?” I asked.

He hesitated. “Uh, have you heard of, uh…Burning Man?” He was almost whispering.

I wanted to appear hip, in the know. In truth, I knew something about Burning Man; at least enough to know that it was little more than a bunch of burn-outs sitting in a dry-eyed Nevada lake bed for a week, tripping and acting “communal.” Fucking hippies.

“Oh, yeah, I know all about it. It’s like some performance art festival thing in Nevada.”

“Well, it’s a lot of things,” he said smugly. What a damn counter-culture snob, I thought.

He went on to tell me what a great experience it was. He had been going for years. “It’s like, uh, you’ll be walking around, and some guy will come out of his tent, and give you a ham sandwich. For free. Money is strictly taboo.”


“Yeah, it’s all barter. They call it gifting. And the art, the music, it’s awesome. I mean, it’s like a life changing event.” He was getting so intensely serious, like Dennis Hopper in Apocalypse Now when he was talking about god-like Colonel Kurtz. “Like, you survive a week out there, and you’re, uh, just so different than before.”

“Uh-huh. I can imagine.” I faked being impressed. He the spent the next 10 minutes describing a huge cube someone made of light bulbs and the bulbs would go on and off in random patterns, like some kind of 3-D analog screen saver.

Life changing event? Walking around half-naked, or totally naked, for seven days, exchanging mushrooms for ham sandwiches? This was a life-changing event for him?

I mean, we did have some common ground. When I was his age, I too was walking around the desert. Except it was the fucking Kuwaiti desert, and that desert was in the middle of a war zone, and I had a hundred pound pack on my back, and if I wasn’t careful, I could have stepped on a cluster bomb fragment and blown my goddamn toe off . That, you self-absorbed, hyper-sensitive hippie, is a fucking life-changing event, I wanted to say to him. Pussy.

I got up. “Ok, so we’ll get started on that server project when you get back. Sound good?”


“Ok, cool. Enjoy your vacation.”


Posted in:   Tags: ,

Marines are taught not walk atop a ridge where they may be silhouetted against the sky and easily targeted by the enemy. When a Marine was raising too much hell and pissing off his superiors, he would be told to “get off the skyline.” Keep his head down. Lay low for awhile.

I had to get off the skyline.

I couldn’t overplay my hand on with Charlie. I would have to work within the system and either marginalize him, or pen-fuck him (another term from the Corps that means to write some one up) until he was gone.

In the meantime, I got busy. I had to write so much code, so fast, that Mr. Whiteboard would have no choice but to let me have my way.

I started with the open ticket report. Was there even an “open-ticket report?” The only way I could see what my team was working on was to query the crappy e-Ticket application that Mr. Coffee has written. “Application” was glorifying it – it was a bunch of screens cobbled together, with no flow, no standards, a hack of biblical proportions. You would click on a link in the InfoNet, and a screen would pop up with a bunch of fields. You couldn’t tell if you were supposed to start entering your ticket, or search for an open ticket, or get up and walk down to Starbucks. It was that bad.

I hate programs that suck. I especially hate programmers that write programs that stuck. I was starting to hate Mr. Coffee, because the more I used his crappy, illogical, convoluted e-Ticket “application”, the more I hated it. I can understand if a developer is new to development and not quite sure how to design a user interface. I can understand if a developer is in over his head. But I can tell if a developer just doesn’t give a fuck. E-Ticket had “fuck-it” written all over it.

I called Mr. Coffee into my cube.

“I’m trying to run some queries to find all the open tickets.”

“Yeah, sure, no problem.” Mr. Coffee was always so damn agreeable. “Just select that drop down, fill in that field, and click search.”

I followed his instructions. I got some bogus results, tickets from the network department.

“Oh, yeah, sure, you just need to enter ‘AppDev’,” he explained. I followed his instructions and got all the open-tickets. For everybody. Even though I had selected Charlie from the “Assigned To” drop-down.

“Umm, What’s up with that?”

“Oh, yeah, sure, I know. There’s a bug. I gotta look into that.”

I looked at him, nodding. Hard to get pissed at such a pleasant fellow.

“Isn’t there some sort of report that goes out to the supervisors with the open tickets?” I had seen such a report in one of the meetings.

“Yeah, sure, you should be getting it. All the supervisors get it.”

That didn’t surprise me. I had been there a month and there were still people who did not know what I did at TCTSRN. It’s not like Mr. Whiteboard sent out a memo. Pussy.

“Well, who runs those reports?”

“Yeah, sure, I’ll call her. Sure, no prob, can I see your phone?” He had a habit of starting every sentence with an affirmation.

He called the girl in charge of the reporting and handed me the phone. “You’re not on the distribution list. It’s for supervisors only,” she said. She was nice. Competent. Articulate. And white. Could I get her on my team, I wondered? I felt an urge to get some diversity on my staff. A white female would go far in tipping that equation away from 75% Asian males.

“I am a supervisor.”

“I thought so. Just have Mr. Coffee put in a request to put you on the distribution list.”

I hung up. “She said something about putting me on a distribution list.”

“Oh, yeah, sure, no problem.”

Man, he was agreeable. I was starting to like having a yes-man. Not starting to like Mr. Coffee, just the idea of having someone constantly agreeing with you. “So let’s see what open tickets you’re working on.”

“Sure, no problem. Just check that box, change that drop-down, and push that button,” he said, pointing to my monitor. At least he knew how to work the site he had written. That’s the true sign of a bad developer – their programs make sense only to them.

The page reloaded and pulled up about four open tickets assigned to him. I noticed one that was about three months old, opened by Mr. Bill. The CIO.

“What’s the story with this one?”

“Oh, yeah, sure. It’s some project planner page that I did for Mr. Bill. Yeah, it only works on my system. Not sure why…yeah, not really sure.”

“Only on your system?”

“Yeah, only my system. Yeah, don’t know what’s going on with that page.”

“Can I take a look at it? Do you have the link?”

“Yes, no prob, sure.” He rattled off the URL. I keyed it in and a black page loaded, slowly. That was odd. It was like there was an image that was being loaded, or some reference that was out of whack.

I viewed the source. I found the problem in the third line.

“Your stylesheet path is pointed to your machine name. Every time the page loads it tries to connect to your PC and load the stylesheet. Since the server doesn’t have access to you system, the page hangs.”

“Oh, yeah, sure, no problem. I can fix that. Wow, yes, I’ll get right on it.” He was nodding and smiling. Bobblehead.

I nodded with him. We sat there, nodding together. Agreeing.

I wanted to see how agreeable he was.

“What would you say if I asked you to shove this Logitech G7 Laser Mouse up your ass?” I asked as I held up my mouse.

“Yeah, sure, uh, no problem…”

I made that last part up.

But how does one actually get a hard-coded reference to a stylesheet in a page in the first place? God, did he even view the source? And what was Mr. Bill thinking, waiting three months to get a page to work on his very special InfoNet. This is what he was talking about that day he called me up to his office. The shear incompetence, the slough, the lackadaisical approach to all things related to “Application Development”. He probably thought Mr. Whiteboard’s developers were idiots, and I agreed. I started to hate Mr. Coffee again.

“Ok, let’s get that page fixed and close out that ticket. And please get me on that distribution list.”

“No problem, sure. I’ll get right on it.” He backed out of my cube, grinning, his head still bobbing.

I realized I was going to have to start coming in on the weekends.

Posted in:   Tags: ,

Many of the folks at TCTSRN had a good scam going. The company had worked to implement a plan that let people work eighty hours in nine days and have every other Friday off. In theory, this meant that those in the plan would work something like eight nine-hour days and one eight-hour day, or some convoluted equivalent that added up to eighty hours in nine days.

In reality, you never knew when anybody was going to be around.

Now, keeping your ass in the office for nine-hours is not as easy as it sounds. Especially if you have to drive from South Pasadena, stop at the gym for an hour workout, and leave in time to catch your daughter’s Chinese Girls Youth Basketball League game, like Mr. Coffee would. BTW, I always wanted to start a Fat Guys Basketball League, with eight-foot baskets, small balls, and a jump-shots only rule, but I thought it might be a little bit exclusionary.

To actually work nine hours a day, one would need to get in at 9:00 AM, take an hour lunch, and leave at 6:00 PM, almost every day. But if you stroll in at say, 9:30 (Mr. Coffee), or 10:00 (the TAC), you have to stay until 7:00 PM. And if you take a two-hour lunch, like most everybody did, you would have to stay until 8:00 PM. The beauty of this plan was that nobody of any authority was around after 5:30 PM, so a guy could start shooting the shit in his buddies cube at around 5:45 PM while most of the staff eased out, and slip out the door shortly after 6 PM, and nobody would notice. After all, all his other buddies were drifting out around the same time.

I know, because I used to pull the same stunt when I was a permanent employee in my twenties. I rarely put in more than 35 hours a week. But that was back in the day when I would sleep off a hangover in my car at lunchtime. At least I didn’t spend company time beating off in a men’s room toilet stall, like my friend Evil proudly claimed to have frequently done when we worked together in the nineties.

With this schedule, the place was a ghost town every other Friday. I didn’t mind working the normal schedule, because I could get in later and leave earlier, plus get a lot done on those Fridays that no one was around. I myself made it a point to be actually be at the office forty hours a week, at least until my probationary period was over. It was not so much that I craved working so much, but I was still paranoid after getting fired from The Job I Had For One Week for supposedly not working eight-hours a day. And I wanted to set an example/keep an eye on the slugs that worked for me/make sure I was around at around 5:00 PM, (which is the only time Mr. Bill would walk around, acting like he wasn’t really just checking to see who was still in the office).

It was on one of those Fridays in my first month that I started to get paranoid.

I had finally started making some progress getting the Version Control system in place, and Charlie and I were working off the same archives for the Online Inquiry application. At least I was working on the same archives – Charlie wasn’t doing squat except bloviating about how much he knew about Atlas, Triple-DES encryption, etc. I had pretty resolved myself to doing all the bug fixes and getting that project out the door. Charlie could take a flying fuck as far as I was concerned. It just meant that I would have to work a little bit more OT.

When I opened up Source Safe that day, I found some personal files in the archives. Nothing too sensitive, just some Excel templates I was going to use to get a handle on all the different applications. But I had never checked them into Source Safe.

How the fuck did these files get from my hard drive into the archives, I asked myself? I checked the version dates – they were three weeks old. I hadn’t touched those files since my first week. I sure as hell didn’t check them into a folder called “Documentations.”

Charlie had put them there. I was back in the tunnel.

He had hacked my hard drive. I was sure of it. Now I had something to nail him on. I’d show Mr. Whiteboard the evidence and I could get rid of this nasty thorn in my side. No more busting my balls – this little shit was done.

I called my boss’ extension and got his voicemail. It was around 11:00 AM. Where the heck was this guy, I thought? I never saw Mr. Whiteboard before 10:00 AM. No wonder his staff was always UA (the Marine term for AWOL -- I hate the fucking Army and will only use USMC terminology here, unless I am referring to ‘Nam).

I was getting impatient. I called one of the network guys, the narcoleptic who would doze off in front of his monitor.

“I think I have a security issue. It looks like someone hacked into my system,” I told him.

He passed the buck and told me to call his boss. I didn’t really know that guy, but he seemed cool enough. I always made it a point to make nice with the guys that had their own I.T. fiefdoms. I relied on them to get my apps running. The DBAs, the Systems guys, Ops – I was a scheming, manipulative alliance maker when it came to those folks, like the the Naked Guy From Survivor. Most were good to go, except the ones like Fishboy at TSINAN (more on him later). And at least this network guy wasn’t Asian. I was starting to get the impression those folks stuck together at T.C.T.S.R.N.

We met in a conference room. I gave him the details and told him that I thought Charlie had hacked my system. He asked some configuration questions about how Source Safe was setup. He wanted to now if I had left my PC logged in while I wasn’t around, whether I had opened up any file shares on my hard drive, basic stuff. I shook my head.

“I’ll check the logs and let you know by the end of the day,” he said, getting up.

We walked out of the conference room and I saw my boss duck into his corner office. It was almost lunchtime.

I leaned into his doorway. “Do you have sec?”

“Uh, yeah, ah, sure. I guess.” He was always hesitant. I thought that if I would ask him an obvious question, like “Do you have a dick or a pussy?” he would ponder the inquiry. “Uhm, well, I guess, I suppose, I, um, have a dick.”

I sat in front of him. “I think Charlie hacked my computer. I found some of my personal files on his system, in the archives.”

“Oh my.” He looked like he was going to wet himself. “Ah, are you sure?”

“Yeah. It’s a problem we should take care of.”

“I need you to explain to me how this Version Control stuff works. How could your stuff get in his archives?” He was looking for some technical solution to a personnel problem.

“He would have to be at my PC, or get my files from my PC, and check them into SourceSafe,” I explained.

“Geeze. So what do you think we should do?”

I saw my opening. “Ask him to resign and give him two-weeks to wrap his stuff up.”

“Man, I don’t know about that. Let me talk to him.”

Talk to him? About what? Gee, uh, Charlie, I don’t think you should be getting into your supervisor’s system and playing with his personal files…

I left his office, confused. Mr. Whiteboard didn’t seem too eager to take this issue up. I got back to my desk and sent Charlie an email:

First thing Monday, I need you to explain to me how my files got into your archives. For one, I would never need to check in these files, and two, “Documentations” is not a word.
This shit would be all over by COB Monday, I thought to myself. Finally. I had fragged that bastard Charlie, deep in the bowels of the tunnel.

Posted in:   Tags: ,

- Vineet Nayar, CEO, HCL Technologies

Recent Posts

Slumdog Comment Generator

Not Sure How To Respond?
Use the Slumdog Comment Generator!


«  April 2017  »
View posts in large calendar

Month List

The thoughts expressed on this blog may or may not be the author's own and are protected by the 1st Amendment. Any attempt to reveal his identity by contacting a slumdog hack at Google, or a corrupt Desi sys-admin at his ISP will be dealt with promptly and severely. Civil and criminal penalties may apply if one is found to have used private information in an attempt to get the author fired at the Hindu-only I.T. ghetto he currently works at. In addition, any Desi who attempts to burn the author's house down because they are enraged over his writing will be prosecuted to the fullest extent of the law. This isn't India.

© Copyright 2017 Life of an I.T. Grunt

View My Stats