Kuro5hin.org: technology and culture, from the trenches
create account | help/FAQ | contact | links | search | IRC | site news
[ Everything | Diaries | Technology | Science | Culture | Politics | Media | News | Internet | Op-Ed | Fiction | Meta | MLP ]
We need your support: buy an ad | premium membership

[P]
Politics-Oriented Software Development

By TheophileEscargot in Technology
Fri Jan 28, 2005 at 11:53:03 AM EST
Tags: Software (all tags)
Software

A brief guide to software development in the real world. Aimed mainly at new developers: experienced programmers already know most of this. This guide is for hands-on programmers, not managers.


Introduction

Most textbooks and methodology guides start with statistics proving that software projects are disastrously prone to failure. I'll take that for granted.

They then propose complicated rules designed for a fantasy business world where cooperative workers idealistically work towards the common goal of maximizing shareholder value.

A couple of weeks in a typical office should disabuse you of that. Real world companies are made up of individuals working for their own goals: career advancement, more money, or just the chance to slack off. Occasionally it may be in someone's interest to build a successful project. Usually it's more useful to sabotage it.

This leads to the real reason for the perpetual software crisis:

1. Most software fails because it is designed to fail


Why you should want your project to succeed

A developer rarely benefits from the failure of his project. There are exceptions, such improving your resumé by choosing bleeding-edge technology that may also cripple the project. However, few developers escape the consequences: they may be stuck maintaining an inadequate system long after the project manager has moved on to better things.

In addition, since management is a less specialized skill, it is easier for a manager to change jobs than it is for a developer.


Sabotage

There are two kinds of sabotage: deliberate and incidental.

The direct manager of a project has an incentive to see the project succeed. As we will see later, he may also have incentives to make the project fail, but generally he wants to get it working, at least in the short term until he gets promoted.

In most companies, promotion is competitive. This means that the direct manager's competitors have an incentive to make him fail: deliberate sabotage. This tendency is most prevalent in non-software houses that have several teams of in-house developers. It obviously doesn't arise if there is only one software development manager, and in software houses the chance of expansion renders the competition less fierce.

Because everyone has to pay lip service to the good of the company, deliberate sabotage has to be disguised as incidental sabotage. Nevertheless, be aware that it's a good idea to keep sensitive information, such as estimates and necessary purchases away from potential rivals. Beware of casual conversations with the enemy.

2. Loose lips sink projects

Incidental sabotage is more widespread. Anyone who has input into the project will be working for their own ends. Examples: the legal department want to make things safe for them by insisting on huge legal disclaimers at the expense of usability. Designers want to maintain an impressive portfolio by using flash displays at the expense of bandwidth and small footprints.


Analysis

Some early software methodologies advocated a 40-20-40 model: spend the first 40% of time on analysis and design, 20% of the time building the system, 40% of the time on testing. Modern methodologies tend to focus on incremental development: build a prototype and continuously improve.

Neither of these are acceptable to the business commissioning the project. Accounting want to know the cost of the project when planning the fiscal year. HR want to know how many people to hire or fire. No-one is going to authorise 40% of a project's likely budget to find out what it will cost to build. No-one is going to sell the idea of building a system first then finding out exactly what it will do later.

Therefore, you will continue to develop the traditional way: take a guess based on inadequate analysis and pray that you've padded it with enough contingency.

The project will probably overrun, but see incidental sabotage: that's not the accountants' problem.

3. Don't trust the analysis


Descoping

As the system is being built, the consequences of the poor analysis will show up: requirements will become more complicated than you thought.

Fortunately, due to incidental sabotage, much of the functionality will be unnecessary. At some point, you will need to descope: reduce the functionality so you can finish the system. There are two aspects to doing this successfully:

4a. Descope early

As soon as possible in the project, try to work out which features will be cancelled. For every requirement, get some explanation of why it's there. From this you can often identify the important bits: build those first, and structure the system so the others can be added if necessary.

4b. Admit descoping late

While you should actually descope as early as possible, you should admit you've descoped as late as possible.

First, the person who identifies a problem is usually blamed for that problem: kill the bearer of bad news is the principle. Second, admit it too early and people have the chance to add more pointless requirements: it's safer to wait until there's panic in the air. Only propose descoping when the project is already behind schedule.

Also remember that someone who points out a problem early is a troublemaker; someone who fixes a problem at the last minute is a hero.


Architecture

It can be useful to make your architecture reflect organizational lines. If one team is likely to be unreliable, try to make them responsible for an isolated module of the system. If possible, make the rest of the system work independently of it. In any case, make sure a failure there cannot be blamed on something else.

Be aware that architecture charts can give management incorrect ideas about where the workload lies. Consider this diagram:

 +----------+   +-----------+  +-----------+ +------------+  +----------+
 |   GUI    |   |   Docs    |  |  I/O      | |   Data     |  |  Utils   |
 |          |   |           |  |           | |            |  |          |
 |  Alice   |   |   Alice   |  |  Alice    | |    Bob     |  |  Alice   |
 +----------+   +-----------+  +-----------+ +------------+  +----------+

On showing this breakdown to any given manager, it will be clear that Alice has taken on the vast bulk of the project work, while Bob is basically slacking. Bob cannot explain to the manager that designing data structures for this project is the most difficult component, and the rest is trivial. Additionally, any undue progress made by Bob on the data structure can be sabotaged by Alice at any time by changes to project modules under her control

5. Make sure architecture assigns blame clearly


Managing Management

The manager of a project usually wants it to succeed, but not necessarily in the same way as the developers. The project manager only needs it to work in the short term: he doesn't care if it's easy to maintain. However, an unmaintainable project can be a trap for a developer, who might spend years making tiny changes.

There are also circumstances where the project manager benefits from doing things the wrong way. A manager gains status from the size of his team: it may be advantageous to enlarge the project.

It can help to keep an eye on any magazine subscriptions held by the manager. Try to disparage technologies you don't want to work with, encourage useful technologies.

The goal of meetings, as far as the manager is concerned, is to appear in control and abreast of the project. Your goal is to make sure that they think they are in control and abreast of the project, while keeping all details from them. Most managers will happily collude in this, since they have no desire to know what is happening, so long as they are seen to be so aware and are rigorously kept blissfully ignorant of their own ignorance. Remember that managers are essentially secretaries who can fire you.

6. Managers don't want to know the truth: keep it from them.


Documentation

Documentation is an essential tool in the twin goals of ass-covering and of managing management. It also provides dangerous traps for potential enemies.

The political trick is to strike the correct tone of opaque vagueness and unshakeable authority. The true use of documentation is to bridge the inevitable gap between what the project is supposed to do and what it actually does. Politically written documentation bridges this gap by appearing to claim the former without actually denying the latter. On close examination, it will be found to say nothing at all.

This is the true origin of the fallacy that code is its own best documentation: The code itself is the only document which may be relied upon in any way in order to find out how the software might actually behave under this or that set of circumstances. However, anyone actually saying so only reveals themselves as a troublemaker.

There is also a three-way conflict between the interested parties:

1. The people specifying the documentation want it to be as detailed as possible, in as much volume as possible. The more documentation, the better, as this increases their importance.

2. The people writing the documentation want it as effortless as possible

3. The people eventually using the documentation want it as accurate as possible.

The usual compromise between 1 and 2 is to create vast amounts of inaccurate, out-of-date documentation. Since it's never updated, it's usually useless to 3.

The best way to sneak useful documentation past the system is to create a brief "Overview" document, small enough to be kept up-to-date. This will at least give maintenance programmers an idea of what the system is supposed to do.

7. Keep documentation brief enough to be kept up-to-date

If possible, try to get accurate documentation created: otherwise you will find yourself doing endless maintenance and support on a system that only you understand.


Ass-covering

Document everything. Preserve your old emails. If possible, keep them in a personal archive so that you can use them, but they cannot be used against you.

Especially if you're busy, keep a record of what you've done every day: either in your official timesheets or in private notes. Especially when under pressure it can be tempting to leave them to later: but this leaves you dangerously vulnerable when the blamestorming begins.

When asked incredulously "how on earth did it take you so long to do this", you need to be able to say first: "Because I had to do X, Y and Z and then undo them", and point to your record as evidence. When asked "why on earth did you do that?" you need to be able to say "because you told me to in this email sent on this date."

In turn, the emails you sent will be used in evidence against you. Keep a professional tone: before sending any sensitive email take a moment to think how it would look at an industrial tribunal.

The chief difficulty is reaching a satisfactory compromise between ass-covering and not appearing too negative. If you know something is going to fail, make sure you point it out and have a record, but try to present it in a positive way. Say that it is a "major risk", rather than a certain failure. Try to request additional resources or time even when you know they will be denied.

8. Preserve records privately


Error messages and logfiles

As well as being later than you expect, the system will be less reliable than you expect. Make sure your debug and logfiles give you plenty of information. As with architecture, make sure that your error messages assign blame appropriately.


Overtime

As the deadlines whoosh past, the pressure will grow to do unpaid overtime. Reduced concentration and the unavailability of other people mean that generally an hour of overtime achieves much less than an hour of normal time, so it's not very effective.

The thing to remember is that your line manager wants you to do overtime because he's being pressured by his managers. In many cases he doesn't want you to do overtime, since he knows that the extra bugs aren't worth it, but to be seen to be doing overtime. The key rule is:

9. Overtime only counts when people see it

It's usually better to do overtime in the evening than the morning, if there are more people around to see it. Weekend overtime is usually pointless since there are rarely witnesses.

Remember that you're not just being visible to your boss, but the office as a whole. Your overtime is useless to him unless it's visible to his boss, or else other people who contribute to your team's reputation.

Keep to the minimum possible. Remember that the earliest part is most valuable since there are more witnesses: better to do half an hour Monday to Thursday than two hours on Wednesday. It also sounds better to say: "I've worked late four nights this week." No-one will be keeping track that closely anyway.

Finally, remember that with deadlines pressing, the last thing your line manager wants is to fire you. Threats are likely to be empty in the short term, and quickly forgotten when the project is over. As part of his empire, you are contributing to his status: he doesn't want to get rid of you even if you're useless. You're only likely to be fired if the company as a whole is reducing numbers, and in that case no amount of work guarantees safety.


This article was created as a collaboration on ko4ting the K5 wiki by clover kicker, motty, R Mutt, Scrymarch and TheophileEscargot.

Sponsors

Voxel dot net
o Managed Hosting
o VoxCAST Content Delivery
o Raw Infrastructure

Login

Poll
Most important rule?
o 1. Most software fails because it is designed to fail 10%
o 2. Loose lips sink projects 1%
o 3. Don't trust the analysis 4%
o 4a. Descope early. 4b. Admit descoping late 19%
o 5. Make sure architecture assigns blame clearly 7%
o 6. Managers don't want to know the truth: keep it from them. 10%
o 7. Keep documentation brief enough to be kept up-to-date 13%
o 8. Preserve records privately 14%
o 9. Overtime only counts when people see it 18%

Votes: 83
Results | Other Polls

Related Links
o created
o collaborat ion
o ko4ting
o Also by TheophileEscargot


Display: Sort:
Politics-Oriented Software Development | 97 comments (94 topical, 3 editorial, 0 hidden)
Loved it! Move to vote. (1.20 / 5) (#1)
by shinnin on Fri Jan 28, 2005 at 04:19:30 AM EST



LOL WHAT? (1.04 / 23) (#4)
by noogie on Fri Jan 28, 2005 at 06:34:16 AM EST

Why is a girl programming???!!


*** ANONYMIZED BY THE EVIL KUROFIVEHIN MILITARY JUNTA ***
Managers are Secretaries who can fire you (2.83 / 6) (#6)
by OldCoder on Fri Jan 28, 2005 at 06:38:12 AM EST

This is only true in some organizations. Possibly the majority. Software houses suffer less from this problem. Many organizations which are not software-sophisticated nevertheless need software and need their own development. Financial and manufacturing companies, in particular. In such organizations, the problems described in this article are common. A flour mill or paper factory or an agriculture-related business will fall into the deep part of this pit.

Software-sophisticated organizations have their own set of problems: Management that thinks it knows what it is doing. Managers threatening to "Code it themselves". Reaching too far. Arrogance. Having to compete against Microsoft. Being Microsoft.

Electronics companies that make products with embedded software often have managers who are very techie in the electronics side of things but don't know diddly about developing software. This problem is abating with time.

Some financial and manufacturing organizations have become very good at software and software management, this includes some of the larger banks and insurance companies and also electronics companies like Sun and HP.

--
By reading this signature, you have agreed.
Copyright © 2004 OldCoder

This will probably end up being posted (2.00 / 3) (#8)
by wiredog on Fri Jan 28, 2005 at 08:14:10 AM EST

on Slashdot. Especially if several of us submit it. Good work, and oh, so true.

Wilford Brimley scares my chickens.
Phil the Canuck

I should have thought of this sooner. (2.89 / 19) (#10)
by porkchop_d_clown on Fri Jan 28, 2005 at 08:28:53 AM EST

I have a personal definition of a manager that sounds disparaging but really isn't.

A good manager is a bi-directional bullshit filter. He/she blocks distracting crap from raining down on programmers, allowing only the needed information to pass through. Meanwhile, he prevents the programmers from terrorizing management with gobbledygook and allows only the useful data to pass in that direction.

The problem with most managers is they only possess one or the other of those two skills. Most of them only filter information passing upwards - which makes sense when you realize that the guys above them are the ones handing out pay checks. A few only filter what's coming down from above, which makes them beloved by their team and loathed by the suits.

In my whole career I think I've only ever met one really good manager and he was non-technical.

Personally, I was a terrible manager.

Has anybody seen my clue? I know I had one when I came in here...

Unpaid overtime: not worth it, ever (2.72 / 11) (#14)
by ksandstr on Fri Jan 28, 2005 at 10:12:33 AM EST

But if you can be fired for not doing it (or it's illegal but you have no proof or ability to go to court over it), 30 minutes four days a week isn't all that bad. If the people who would be observing you doing the overtime are spineless as usual, they'll be long gone by the time your 30 minutes are up.

Nevertheless, the proper answer to "well, why don't you go ahead and come in on saturday, and sunday too, we can't pay you though" is the emphatic negative. Not only because it's your personal time sacrificed for an expedient appearance for your managers, but because tolerating it makes it that much harder for your coworkers to refuse. I know that workers' solidarity isn't all that hot a thing on the left side of the atlantic right now, but it will pay off in the long run, regardless of how many ill-educated Indian code monkeys[1] they could threaten to replace you with.

[1] this refers to those Indians who are not only ill-educated but also code monkeys. Not to say that all Indial code-monkeys are ill-educated.

Sounds like you've never had a good manager... (3.00 / 15) (#16)
by Drog on Fri Jan 28, 2005 at 10:36:14 AM EST

...judging by how cynical you are about them. I've been on both sides of the fence, as both a developer and a manager. I was lucky enough to get actual people management training from the best instructor in Ottawa, and I already knew a thing or two about project management. In my opinion, a software development manager's main job is to:

a) Remove all obstacles that stop the developers from working effectively. This usually means making all product managers, dev managers and directors go through you, rather than directly to the developers. Otherwise, get pulled in different directions and get distracted too much.

b) Ensure that the architecture is sound and that what is being built fits in well with the "big picture", i.e. that your team's piece will fit in well with the overall software's architecture and that if at all possible, it will be useful (rather than obsolete) as the company executes its longer term strategy.

c) Ensure that realistic, achievable schedules are in place. That means not agreeing to upper management to simply build something by a certain date that they've decided upon. It's the manager's job to come up with reliable time estimates (with the team's help), take it back to upper management, and say that they must either reduce features or extend the deadline. The manager must always combat feature-creep too--again, for every new feature added, either another feature has to get dropped or the deadline must be extended. Achieving this is not always easy in some companies with draconian management structures. It may even be impossible, which means the dev manager will eventually get fired. So be it--it's the manager's job to look out for his/her team no matter what.

d) Ensure the employees are well-treated and in an environment they enjoy being in.

As for your comment that it's easier for managers to find work elsewhere than it is for developers, I have never found that to be the case. I went back into development mainly because I saw way too many developers who made their way to upper management only to get laid off and discover that nobody wants to hire another company's manager when they have their own peope to promote, and nobody wants to hire a developer that's been a manager for more than 4 years.

Looking for political forums? Check out "The World Forum". News feed available here on K5.

Don't forget Putt's Law (2.87 / 8) (#17)
by SemiMike on Fri Jan 28, 2005 at 12:09:41 PM EST

"Technology-based organizations are dominated by two types of individuals: those who understand what they do not manage, and those who manage what they do not understand."

No implication that technology-competent managers do not exist, but they are the exception to the rule.

"Computers can do that?!" Homer Simpson

Note on overtime (2.88 / 9) (#22)
by ucblockhead on Fri Jan 28, 2005 at 12:30:56 PM EST

One way to "work long hours" is to come in early, take a two hour lunch, and then leave late.
-----------------------
This is k5. We're all tools - duxup
All True (2.50 / 4) (#23)
by conner_bw on Fri Jan 28, 2005 at 01:14:33 PM EST

This is a great article, congrats! However, now that you've so eloquently put into words what i've been living the last decade, i phear for my job security. All the secrets have been revealed, prepare for the next generation's swarm of unproductively.

Management is all about people skills (2.66 / 9) (#24)
by frijolito on Fri Jan 28, 2005 at 01:37:26 PM EST

...like porkchop mentioned somewhere. I'm currently the "IT Manager" of a shipping company (in an undisclosed Central American country); and I put quotation marks around my job title because I'm little more than a lackey for my boss.

He is an engineer (but not a Software Engineer, like myself), and he tends to believe that he's vastly technically proficient. He's not. He mainly considers his job to be: appear to be an ultra-badass to his superiors' eyes. He loves to "project an image of efficiency", and swears by bs like "dress for success" and "cleanliness is next to godliness". He truly is an 80's yuppie... only 20 years too late (hey, maybe he can get away with it because this is Central America after all). The guy has no people skills, and everyone below him in the corporate ladder hates him; but you have to admire his skill at kissing his superiors' asses. Of course, I hate him most, since I have to take more of his shit.

Result: I'm quitting today. Seriously. I was actually working on my resignation letter when I stumbled upon this article... imagine that. I'm thinking of going into the tourism industry, and staying away from corporations for good.

A little cynical ... (2.50 / 4) (#28)
by cdguru on Fri Jan 28, 2005 at 04:35:43 PM EST

but unfortunately not all that untrue. I do think you have seen the worst in management, however.

I don't think the sort of inter-departmental nonsense that you describe is the rule everywhere. Most places where "software is a cost of doing business" rather than "software is the business" really don't care about disclaimers, foist the documentation off onto a technical writing staff and manage with a little less hostility. The result is that things get done, perhaps with less effectiveness, but things get done.

Your belief in "indirect sabotage" is something that I hope I never really see. No matter where I was in an organization, even if it meant finding a new job, I would make it my duty in life to have anyone doing that fired. In my current situation - owner of a software company - I would toss the sabotager out in the street. Literally.

I feel almost as strongly about people that want to play games covering their ass and seeking their own glorification instead of accomplishing something. Yes, I've seen it. No, nobody reporting to me ever had the courage to get found out doing that kind of stuff.

It's called wage SLAVERY for a reason. (2.42 / 7) (#30)
by seanhbanks on Fri Jan 28, 2005 at 06:31:19 PM EST

The problem, and it permeates all business, not just software programming, appears to me to be the, IMO flawed, assumption that administration is a necessary component of a functional enterprise. I posit it isn't. Not unlike "civil servants," so-called administrators/managers/project co-ordinators, et. al., usually serve a function of an arguably parasitic/overlord nature, contributing little to nothing to actual productivity. Management could even now (I would say, should) be replaced by currently available software, there is no need to even wait for an AI capable of passing Turing tests, as most managers wouldn't pass one, either. The notion of management seems like an anachronism, and thus, an agent of retardation to me. The same appears to hold true for office politics in general, all these pseudo-human relations hark back to primate tribal domination struggles. Has evolution taught us nothing?

management as a focal point for blame (3.00 / 6) (#31)
by cbraga on Fri Jan 28, 2005 at 06:51:51 PM EST

Most corporate directors will probably realise that managers do not create value for the company since the time they spend "managing" isn't productive — which should be pretty obvious. But can a company function without managers?

Probably not, and if someone found a way to make that feasible that person would be very rich.

In an utopia all the programmers would be competent and work all day and meet the deadlines. Of course that's not the case in the real world. If the software teams consisted entirely of programmers — no managers — the executives could fire all programmers if the deadlines were missed or if the project failed. Or he could keep all of them and punish nobody for the project's failure — which would fail 10 times out of 10.

Enter the manager: a focal point for blame. If somebody below the manager isn't doing their job it's the manager's fault. Or if the project is late, or is having technical trouble, it's all the manager's fault. That's why there are plenty of incompetent managers — the company's way better with them than without them.

ESC[78;89;13p ESC[110;121;13p

Heh (2.66 / 6) (#34)
by trhurler on Fri Jan 28, 2005 at 08:05:29 PM EST

I've worked at one or two places like that. Let me assure you that there are other places.

--
'God dammit, your posts make me hard.' --LilDebbie

ok, so what else is new. (1.42 / 7) (#35)
by recharged95 on Fri Jan 28, 2005 at 08:15:22 PM EST

Good analysis, but unimportant problem--this is a waste of 4 pages (or so).

For one, S/W development is no different than any other business that "solves" customers problems. Look at the legal biz...or the oil biz. It's a complex field, and those who write "utopia process" books exploit that fact--yes a lot of us veterans know already the problems, and the problems are manifested in industry jargon.

Second, the whole article exploits the fact that in any complex business:

work == business == money == you & I get paid.

No work, then no cash. Even if the work is 100% unless, it's justified, caeveat empator. Even if it's 100% for "the good" (e.g. you actually think about the work), it's still just work. Customers don't pay for a free lunch to vendors--well, unless the US gov't is the vendor (i.e. taxes in some cases). Some people do cheat, lie, steal, but that's not the majority and usually subjective when classifying.

A good point is made that everyone has individual agendas, but the common thing among all is you need to be "working" [for a business to operate].

Marvelously distilled cynicism (2.85 / 7) (#36)
by johnny on Fri Jan 28, 2005 at 09:41:42 PM EST

This is worthy of Ambrose Bierce (or whatever his name was).

The only difficiency that I can see is that it implicitly makes the point that software engineers are any better than the rest of of the lot, for example, the managers, which of course they are not.

Were this piece to point out that you, the codewriter, have a prounounced deficiency in social skills along with an inflated sense of your own analytical and coding abilities, which, together, prevent you from seeing or admitting your own mistakes -- and that your fellow codemonkeys are similarly impaired, why then I think it would be just about perfect!

yr frn,
jrs
Get your free download of prizewinning novels Acts of the Apostles and Che

Sounds like any office (2.00 / 3) (#38)
by The Real Lord Kano on Fri Jan 28, 2005 at 10:20:48 PM EST

This type of stuff goes on at just about every company. Regardless of what they produce. It's not called a "rat race" for nothing. Everyone else is trying to do you in while getting ahead. LK

Very good (3.00 / 9) (#44)
by Roman on Sat Jan 29, 2005 at 01:34:08 PM EST

Very good description of the first principles.  The projects don't matter, good design does not matter.

All that matters is what is easily visible and even more importantly - the perception.

-disclaimer-
I am a contractor, worked as a contractor for the past 4 years.  Prior to contractin I've done 5 years of permanent work.  I live and work in Canada, Toronto.  In the past 4 years I worked at 6 different organizations on a total of 18 contracts.
--

The goal of any contractor is to find a well-paying contract and to make sure that the job is done satisfactory, so that the contract maybe extended for other projects within the same organization (hopefully for more money.)

My latest contract is quite interesting in that it is with an organization (no names) where the tactics are very close to those described in this submission.  I was hired because a different architect was let-go (the union will not allow contractors to stay for more than 2 years,) and there was an important project to be done (the project is a legal obligation to the government, so it's serios.)

The overal feeling within the department is that the head manager of the department is a micromanaging, self-indulging, brainless moron with a serious attitude problem.  From point of view of this k5 story, this is the only IT department, so there is less competition between the management on the higher levels to compete.  But there are many other problems.  The air within the department is that of complete secrecy.

You probably know the expression: job security?

Well, everything around here is based on that.  The projects' success does not matter.  The effectiveness does not matter.  Maintainability does not matter.  What matters is that you do not do what you are not supposed to do, even if it takes you 5 minutes instead of waiting for the specialized help for a week.  You do not invade into the very narrow spaces of very narrowminded people, who are good at one thing - maintaining their job security.

Documentation to the projects is obviously outdated and has nothing to do with the system that needed to be improved upon.  The system itself is based on technology (from a well known company) that should never have been used, but someone's ancle/aunt/father/brother whatever helped this tech to be pushed into the environment (obviously this tech is so obscure and specialized that noone else in the world uses it, so it's not updated.)  The project is understaffed, the deadline is too damn close and the resources are not there (not enough money)
--

As a contractor I am interested in the project succeeding and as a developer I am interested to make sure that the design and development are based on some good principles.

So here are the problems (obstacles) to success and the steps I had to take to go around them.

1. The sources of the original system are controled by a special team.  To gain access to the source control system there are too many obstacles.  The advice to me was for our group to use a shared directory as a source control tool.  Obviously this would not have worked - we would have spent all our time synching the sources.  There are very serious barriers to getting a different source controlling tool being installed on a dev server.

solution: install a source controlling tool on your own machine.  Import the sources.  Set up you developers as users.  Don't forget to make sure that the master source gets backed up somewhere every night.

2.  Documentation to the original system is not good at all or non-existant.  Knowledge is power and power is not to be shared with anyone.  The tools for documentation control are out of reach.

solution: install a Wiki server on your machine (I use Tomcat and JSPWiki, it's good enough.)  Start by setting up project space in Wiki, create sections for requirements, design, testing, assumptions, team, migration, issues, resources, standards etc.
Always update Wiki.  Nothing must get past it.  Remember: docs are good only as long as they help you to understand the entire picture of what you need to see.  Wiki does that, it allows you to interlink everything relevant between itself.

All requirements are linked to designs, assumptions and issues.  Design docs including design discussions, sequences, states, components and classes, data models, lists of changes to the current system, all of that when linked is very powerful tool.  Not everything appears there at once, but what is interesting, is that once you start using it and show it to the rest of the team, everyone starts using it.  Obviously there are some training issues, like don't overwrite each other and make sure not to remove content by unlinking it, but at the end it is one of the most important tools.

3.  Design tools: the company does not provide you with design tools, download trial versions, make sure to use these tools to do your designs, link the diagrams from the tool into your documents (wiki,) make sure that when someone asks you for documentation to email a wiki link to them with the design diagrams etc. right there.  Make sure to put the fact that the tool is not bought as an issue, raise it with the managers after a while.

4.  Testing:  as an architect you are responsible to make sure that the code your developers produce is good enough, so insist on as much unit testing as possible.  We work in Java, so JUnit testing.  Setup the frameworks for the first tests by yourself.  Make sure that the unit tests are in physically different source locations but in the same package structures as the code that is being tested.  You do not want to keep the code and the unit tests in the same physical locations though, it's easy to seperate them when necessary if they are in different physical directories.  Make sure to insist on unit testing all DAOs.  Provide examples on how to do it, lead by example, they will follow.  Unit testing will catch most of the bugs and if done properly all of the bugs in your subsystem.  Unit testing is important for regression - if there is a change to the rest of the application, always rerun ALL unit tests to see how the rest of the system is behaving.
Some things are easier to unit test then the others.  DB functions for example are easy to unit test.  Communication with remote systems is harder.
The argument that unit testing takes too much time does not hold water.  Without the unit tests the same bugs will have to be fixed later during entire system tests and it is more difficult to trace and catch bugs when testing is done on the entire system, rather than on subsystem.  So unit testing definitely SAVES time.

--Document all requirements, and make sure to have a history of the requirement changes.
--Have issue logs.
--Have assumption logs.
--Never let the documentation to get out of synch.
--Never work without a source control tool.
--Apply as much unit testing as possible.

and maybe you'll just get through.

suggestion (2.50 / 6) (#48)
by Roman on Sat Jan 29, 2005 at 02:10:55 PM EST

Alice - GUI, Docs, I/O, Utils
Bob - Data

Next time you see something like this and you know that Bob is actually doing 90% of work, take your time to write out the following:

Alice - GUI, Docs, I/O, Utils
Bob - Business Data Structures, Communication Protocols for Transferring Data, Persistant Data Layer, Data Transformation, etc.

What I mean is that it was not a manager's problem that you lumped everything into one category: Data.

haha (2.66 / 3) (#49)
by metalotus on Sat Jan 29, 2005 at 07:18:34 PM EST

- Loose lips sink projects

Are you writing software for U-Boats or something? Seriously, I just spent a week getting "requirements' from like everyone in my company. If someone keeps giving you ideas that suck, just ignore them. Of course they may not be talking to you but your manager, in that case you need to do some talking too.

Fantastic list! (2.75 / 4) (#50)
by fink on Sun Jan 30, 2005 at 01:56:35 AM EST

I'll be asking my coworkers to read it through. Some of the more senior ones should probably pay attention too.

However, I think I'd have to add two (one and a half?) items; they are Be aware of -- and where possible avoid participating in -- schedule chicken and, as the half-item, Note that to some people, their job consists of preventing you from doing any work (which fits in to the idea of incidental sabotage).

Schedule chicken: This game consists of two teams (or individuals; the terms may in this case be used interchangeably), both working toward the "goal" of completing a given software product. The two teams can work independently, but both teams must complete their work in order for the work to be completed. Both might or might not take about the same length of time to be completed. Neither team wants to be on the critical path, and certainly neither team wants to be responsible for any schedule slippage.
There is pressure from above to reduce the delivery time, and there is internal pressure to not be the team on the critical path. Therefore, the schedule ends up being somewhat compressed, knowing full well that it can't be achieved, with the hope that the other team -- which is in the self-same situation -- will acknowledge a slip first, giving you some breathing room (without putting you on the critical path, of course).
It's better to be on the critical path right up front, but with a reasonably achievable schedule (hopefully you added, and kept, enough meat in your schedule!), and wear the daily status requests and demands for better performance from upper management, than to suddenly discover yourself on the critical path, getting the constant demands for better performance, but with no hope at all of meeting the original schedule you set yourself, or the replacement one you hurried through when you found yourself on the critical path. In short, a little bit of bad news (and pain) right up front is much better than being the chicken later.
Of course, the game is almost impossible to avoid completely; the other team will set a schedule that is only slightly less realistic than your own, but which gets them off the critical path. Management will only see that you are on the critical path, and not that your schedule is realistic; this means that you can expect a lot of "feedback" and status requests from your management types.

Work prevention: For a lot of people, especially in accounting and/or legal departments, it's easier to flat-out deny a request than to look at it in any detail. Even more than this, certain individuals will always try to find ways they can put a stop to your work, because doing so gets them attention from management (in the company for whom I work, being the squeaky wheel is a good way to get promoted; management apparently don't see you as a blocker but as a good manager, presumably because once upon a time they were all like that themselves).
Even technologists will tend to do this; if they think you're doing something wrong (e.g. they don't like the coding standard which was selected), they'll organise meeting after meeting, and review after review, to get the matter looked at. If they don't get their way, then within a couple of months they'll have forgotten that the issue was done to death, and start the cycle again. It is absolutely vital any notes and emails were kept on this matter, and can be provided to that person's management as soon as schedule slippage starts becoming apparent. Not that it makes much of a difference, of course.

For what it's worth, all of the rules in this article seem to be exacerbated in companies which engage in fixed-price, fixed-schedule contracts. I've seen a couple such companies now (it's par-for-the-course in my industry, in my part of the world), and while any software development suffers, fixed-price-fixed-schedule suffers from these kinds of politics the most.


----
It's probably better that you didn't see me licking the desk, judging from the taste, there was more there than whiskey on it. --

Time Estimates x 3 (1.75 / 4) (#53)
by circletimessquare on Sun Jan 30, 2005 at 03:10:45 AM EST

as best explained by Scottie from Star Trek:

Mister Scott is explaining to the young engineer how to come across as a miracle worker. He says something like: 'Tell the captain it will take you 3 hours to fix the problem, lad, when you know it will only take about 1. That way, when you leisurely fix it in 2, you'll still come across as a miracle worker!'

So, so true: ALWAYS overestimate your time requirements by a factor of 3 so you can take your sweet time but still look like a hero... this is especially important if you get paid by the hour or are worried about job security


The tigers of wrath are wiser than the horses of instruction.

and open source? (none / 0) (#74)
by metagone on Sun Jan 30, 2005 at 10:55:31 PM EST

does this have any application or relation to open source development? or any other type of loosely structured software development model?
.
Scaring article (3.00 / 2) (#91)
by svampa on Sun Feb 06, 2005 at 08:00:26 PM EST

How the stomach tries to corrode the lungs, while the lungs try to asphyxiate the heart tries to dry the stomach.

The most disturbing paragraph:

As part of his empire, you are contributing to his status: he doesn't want to get rid of you even if you're useless. You're only likely to be fired if the company as a whole is reducing numbers, and in that case no amount of work guarantees safety.

Of course if you are a really lazzy guy you can get fired now. But the disturbing thing is that if you are hardworker your future is decided in a top CEOS commitee, that doesn't think you are good or bad, the don't know you, they don't have any opinion about you.

Your fate is written, and depends on stadistics, macroeconomy, your age, in which department you work, where is your office (country state), how many other employees souround you.

Where has hard work gone? There is no reward, there is no punishment, everything is a macabre lottery.



Conclusion (none / 0) (#92)
by Scrymarch on Mon Feb 07, 2005 at 06:40:53 AM EST

(This came together too late for me to add it and others to cut it out of the wiki ...)

Software is used in a business to capture business processes, and a business process is just a new name for red tape.  For this reason a software professional must not only be a skilled engineer but a skilled bureaucrat.

Software, like politics, is the art of the possible.

i think (none / 0) (#96)
by keleyu on Sat May 14, 2005 at 09:25:55 AM EST

The workers of the world have to learn that you can't negotiate with the other side if the other side wants everything you have.

Haha (none / 0) (#97)
by soart on Mon Jun 20, 2005 at 11:41:10 AM EST

Haha!What a good story!
机票打折机票
Politics-Oriented Software Development | 97 comments (94 topical, 3 editorial, 0 hidden)
Display: Sort:

kuro5hin.org

[XML]
All trademarks and copyrights on this page are owned by their respective companies. The Rest © 2000 - Present Kuro5hin.org Inc.
See our legalese page for copyright policies. Please also read our Privacy Policy.
Kuro5hin.org is powered by Free Software, including Apache, Perl, and Linux, The Scoop Engine that runs this site is freely available, under the terms of the GPL.
Need some help? Email help@kuro5hin.org.
My heart's the long stairs.

Powered by Scoop create account | help/FAQ | mission | links | search | IRC | YOU choose the stories!