Need advice on work-related dilemma

I am an IT manager for a smallish company (<50 employees)

What that means in practical terms is that I do a very broad range of different things, from support to programming, software, hardware, configuration etc - the lot, at every level. I work more or less alone, sometimes contracting people in for larger hardware jobs (I like it this way, as it is very varied)

I used to work as development manager for a smaller company, which was taken over by the company I now work for and I was promoted to the more responsible and general role I now have; I report to the company chairman, who also happens to be the guy who wrote all the (larger)company’s software before I came along.

He is an interesting man of very strong ideas, but the trouble is that he is just wrong about a lot of stuff - he is very focused on (programming)‘style’, which of itself is not a bad thing, but being largely beyond criticism, he is often under the impression that whatever ‘style’ his fancy happens to run to is objectively the best and only way to do things.

Last couple of days, he has been ‘advising’ me on correct style; a few examples of this:
1 - I’m developing an application that needs to store documentary data in a goods inward department - the data describes deliveries, each of which contains one or more products (usually many).
My plan was to implement a relational database with two main tables - one of them containing single records for each delivery received (with data pertaining to the carrier, vendor and consignment attributes) and a second table containing the details of the delivered lines, quantities, condition etc.
My boss is not in favour of this model, because apparently ‘people are moving away from the flaky relational database model now’ and I am to store all the data in a single table - every delivered product detail line will carry fields populated with the details of carrier, vendor and consignment.

2 - The program structure itself is under question; one of my favourite techniques is to write a library of custom functions, then use them extensively and in various combinations, so I’d write a function called, say, ‘CarriageCost’ that calculates the carriage value based on weight and another generic function called ‘AddVAT’ that adds VAT(tax) onto any number you pass it, then to calculate the total cost of a delivery, including carriage, I’ll use a nested expression like:
totalvalue := AddVAT(InvoiceValue+CarriageCost(Weight))
This isn’t correct, apparently; what I’m supposed to do is use Procedures rather than functions, and pass values to and from them by setting and reading public variables. I’m also not supposed to nest expressions - I have to do everything in steps, even if this means defining extra variables to store intermediate results.

3- ‘It isn’t good practice’ to use nested loops or conditions; instead of:


(pseudocode)
If [condition A] then
  do process X
  do process Y
  If [condition B] then
    do process Z
  end if
end if

(where X and Y are done on A OR, but Z is only done on A AND B, I have to do:


If [condition A] then
  do process X
  do process Y
  Set flag Q
end if
If [condition B] AND flag Q then
  do process Z
end if


(except that even this is frowned upon because boolean operators in IF statements are ‘too complex for someone else to debug’

4- There are to be no subprocedures - if processing control is currently in a called procedure, I can’t call another procedure, no matter how simple or necessary it is - this makes for a lot of duplicated code or unnecessary status flags; for example, if I have a procedure that updates some values in a table, I can’t call the generic screen-refresh procedure from the end of the update procedure, I have to either:
-Paste the entire screen-refresh code into the end of the update procedure, or
-Set a control flag (another public variable) that will tell the main program that the screen needs refreshing, so that the screen refresh will be called after control has passed back to the main program.

I’m not the best programmer in the world, I’ll admit and I’m sure I don’t always do things in the most efficient manner, but assertions about programming standards that are just contrary to fact, convenience and common sense are driving me crazy; I sometimes argue at great length in favour of (my particular idea of) good program and data structure, but he just isn’t hearing me (in fact I can sometimes see him mentally composing his rebuttal before he’s even heard me out).

So why don’t I change jobs?
I’m a generalist - I get involved in everything - jobs like mine where breadth is more important than any specific depth(as long as I can quickly attain resonable depth on a pertinent subject) aren’t all that common and I probably don’t have enough concentrated strength in any one area to get a job doing just that function.
The pay and conditions are actually quite good.

ANY sound advice (or just sympathy) on this would be appreciated.

If the job can get done his way, do it his way.
Not just because he’s the boss (though that’s a biggie), but also if you do so, and stop “fighting” him on it (from his perspective), you’ll likely find that in time your suggestions will get a much better reception. You write that he was the author of much of the present software, likely he feels an attachement to it (which you should respect) and he may miss doing that stuff. If you get yourself squarely on his side of the table, in time you’ll get even more autonomy than you have now. I’d go even farther: occasionally ask for suggestions. The results might absolutely astound you.

mangetout,

Your boss is a nut. His theories, as you know, are BS. I suspect he sorta taught himself how to program in the early days and is very afraid that the technoilogy is just about beyond his grasp.

I’ve been in the industry from COBOL on punchcards to n-tier .NET and there were several times I thought I’d been pushed off the back of the technology wave for good. I’m still hanging on but it hasn’t been easy.

It’s seems to me this guy just can’t get his head around object/event programming; hence the public flags. He keeps trying to have a central executive in the main program line, when the modern way is to have the central executive behind the scenes in the language’s built-in event pump.

If he can’t learn you’re stuck with him for good. If he won’t learn (yet) at least you’ve got a wedge to push on. Keep feeding him books or articles on more modern methods. If nothing else you’ll piss him off which will give him something else to think about besides badgering you.

If the company owner is spending time on correcting your code, then there are probably a lot of other ownership tasks that aren’t being done well; marketing, strategy, etc. In other words, the company is drifting and will crash eventually. So start the job search now.

I agree that generalists (I’m one) are harder to employ these days than specialists. Just further proof of the stupidity of management. More precisely, the generalist jobs are heavily concentrated in the smaller companies. Big corporations do need lots of specialists. The smaller companies collectively have plenty of openings, the challenge is finding them. At least in the US, the various job search websites are all but irrelevant.

Assuming you’re in a fairly large city, there ought to be users’ group or professional associations you can join to start meeting folks and learning what’s out there. That’s how I got my last job and it took about 6 months of effort to biuld my base. Then the opportunities started appearing. Do it now before the job situation gets critical.

Another gem from today:

“Microsoft Access has no real database functionality beyond that of a simple card file”

(Now, I know and readily admit that Access is not the tool of choice for any serious programmer, but that description is libellous)

He retires in a year or two and whoever is brought in to replace him will likely not be involved in the programming at all (it will be handed over entirely to me at that stage) - I wonder if I can last out…

I think you’re right here; a lot of the time he’ll avoid using any kind of new method and kid himself that the old way is a better fit; example:

We needed to add scanned image capture to an app; I obtained a set of components to embed TWAIN functionality right into the application. On the afternoon of the day I got them working and shown him the (4 lines of) code, he came back with a better idea: We don’t use these TWAIN objects; our application will launch the Windows Paint applet, from which the user can scan and save an image for our application to import.

Grrrr.

Isosleepy has the more mature advice compared to mine, IF the owner isn’t too far out.

But like inviting the camel into the tent, you’ll need to assess first whether you think you’ll make the problem unbearably worse by humoring him.

His comment about MS Access is true. Provided he’s talking about Access v1.0, not any of the modern versions. It truly sounds like he’s stuck in the middle 1980s.

The critical question, as you say, is whether you can last it out. If the company’s not in danger from his funky software and probably less-than-sterling business leadership, then the only risk you run is your rate of being driven nuts vs. his retirement date.

Don’t count on him retiring on any schedule; that’s one advantage of being the boss; you can change your mind and nobody can complain.

He’s already overdue for retirement and smokes 40 a day; one way or another it won’t drag on for decades.

Don’t get me wrong; he’s quite a likeable curmudgeon.

I can do things his way, but it hurts to do so, because I know I’m writing ten times more code than necessary, creating non-scalable solutions and making for huge support and integrity headaches in the future.

I haven’t even finished reading the OP but… can’t… hold… back…

  1. “flaky relational model” W-T-F! (sound of E.F.Codd spining in grave). The relational model is rooted in theoretical maths type stuff, there is nothing flaky about it. Is the idea that everything should now go in some monster non-normalised text/XML file? Argh! (backs away makeing sign of the cross).

  2. Global variables! If you’re writing in original BASIC I guess! Globals are a big big no-no.

Coding standards? See Code Complete by Steve McConnell, it’s the Bible. Should be made Law.

OK I’ll go back and read the OP and thread now, it’s just those hit my buttons.

Mangetout
Hey, could you move to Java or C# where modular coding is impossible to avoid? I guess if you’ve already started the project it’s too late.

It sounds like an interesting job, hang on, out live your enemies.

If I experience anything like your grief here then it’s sort of 180 degrees out. I maintain* an application written 8/9 years ago which chugs along happlily with plain ascii files and dumb terminals and other primitive stuff. We may be porting this to a different brand of UNIX and one of my bosses would like to replace some bits with XML processing and message-queues, not for any good reason, just because it’s newer technology. This app’ brings in enough £ in support to pay a salary - and it hasn’t needed any support for over a year. This guy obviously thinks that if it ain’t broke it hasn’t got enough features.

*it’s not all I do.

As far as the relational DB stuff goes, there’s advantages to normalizing a database and other advantages to a denormalized one.

IMO, the best use of a denormalized DB is lightning fast queries - at the expense of storage.

The choice is application driven.

**Well quite, not only that, but there’s nothing flaky about the implementation of relational database structures in any number of development packages.

**We’re using Delphi, but we’re stuck on version 3 (which has been around since Windows 3.1)

Indeed, but my cries to this effect fall on deaf ears. The application we’re developing is huge in scope and in the amount of data it encompasses, but there isn’t a single query in there anywhere (everything that would properly be achieved by a query is being carried out by iterative coded processes).

The trouble is that I’m not a ‘strong’ enough programmer in any one area or language (not even VB) to be able to push the issue, but I know wrong when I see it.

The crux of the issue will, I suppose, be whether I am expected to have been moulded in his image before he hands over the reins.

I should add that, as far as the business side of things is concerned, he is highly competent, knowledgeable and able, having built up the company himself from nothing. But then programming architecture is a field that is changing/evolving at a much faster rate than business management and accounting - it is possible(although it may be far from ideal) to be set in your ways as a businessman and still succeed, the same is not true, I believe, of software development.

I’ve been doing contract work for years (anyone need a mainframe guru? Available now!).

My mantra:

“It all pays the same”

If you like the work, suck it up and remember that after you finish creating this monstrosity, you’ll be the only person in the world who can maintain it. Job security.

Yes, I had an assignment wherein the the obvious soution was to use A CICS transient data queue (what is now called “MQ” or “Websphere” - it ain’t new, people!). Calm now, calm…

Anyway, the VP, having been a FORTRAN programmer 20 years earlier, had set himslef up as supreme dictator of all things MIS - and forbade the TD Q for a really pathetic stated reason.

Unfortunately, his plan didn’t work, and they ran out of budget - I left them an alternate set of programs to try (after their systems people tweaked the PPT and PCT, and the manager got sign-off. Good luck!.

The bad news? He is now President. And many of you are insured through this company.

When the twit says “write garbage”, write garbage - and cash the paycheck.

For all four points you raised, I completely agree with you, and think your boss is completely wrong. (Not that I’m the world’s biggest expert, biut I’ve been in the business for 20+ years and am a lead software engineer.)

So practically speaking, how do you handle this? If I were in your shoes, I’d make the best case you can for doing it your way. If your boss still objects, try to get him to say something to the effect that although he would do it differently, he’ll let you do it in the manner you feel is best, since you’re the person doing the work and ultimately responsible for it. Reassure him that if your program has any bugs, you’ll promptly fix them.

Given all that, how can he complain? If you get the job done on time and it works, who cares what the If statements look like? But if he does object, you’ll have to decide whether it’s worth it to do shoddy work just to keep your job working for a nutcase. Only you can evaluate the balance between need for income, prospects in the job market, other pros and cons of your current job, etc.

If it were me, I’d be looking for another job.

p.s. – Does he micro-manage you in other aspects of your work? If so, how do you handle it? If you have an effective strategy to brush him off for other tasks, try it for programming. If you accept the micro-management for other tasks, it might be difficult to get your way in programming.

No, he doesn’t micro-manage me in any other way, but I think he sees me as a naive programmer in need of his guidance and wisdom.

I’m thinking that I might tell him to leave the current project entirely to me, just do it my way and take the flak if he complains.

I work on databases for a living and you can tell him from me that this suggestion is as mad as a rabbit with gonorrhea.

Or you can grit your teeth, accept my sympathy, and do what Extraneous said.

There’s some grains of truth in there, but as I can see the suggestions are to a large extent insane (there are problems with relational databases, but not having a database all has those problems and thousands more).

Is the man reasonable? I’d say have a conversation with the aim of (1) being non-confrontational and (2) getting to program your way. Eg. “Yes, you’re right. But in this special case I think we should use a RDB because blah blah blah”

You know him and we don’t - ask yourself under what circumstances you’d be able to do what you want.

Two contrarian pieces of advice, buddy.

  1. You’re right, you know what you’re doing.

  2. He’s the one who signs your checks.

For all of me the second one trumps the first one eight ways from Sunday.

Since this guy was the chief coder behind what became a decent company, he likely was no slouch in his day. And things moved fast in his day just like they do today, so he knows the world is passing him technically. The thing is, coding (and likely technology in general) is a love of his. He just wants to be part of the action, and wants to be relevant.

If you do this right, you can correct him, and he’ll be grateful for it and you’ll be better for it. Don’t confront him when he comes to dig into your business. Instead later in the hallway or whatever, ask him if he’d like a primer on OO coding or whatever seems relevant to his mistakes. Phrase it like this is something technically cool, and you and he are both technical cool people, and this is something he might like to hear about. Go out to lunch with him or whatever and give him some highlights. Also be sure to prompt him for some stories about the good ol’ days, which I’m sure he’s got plenty of and will love to share.

He didn’t get where he is without some smarts about technology and business. Yeah, some of his stuff is way out of date, but some of it is likely pretty relevant (especially on the business side of things) and he’s clearly interested in modern technology. If you teach him, he’ll respect you. And you never know where that sort of friendship can help you in ten years. Even when he’s gone from the company, that sort of guy can do good things for you.