The Design of Software (CLOSED)

A public forum for discussing the design of software, from the user interface to the code architecture. Now closed.

The "Design of Software" discussion group has been merged with the main Joel on Software discussion group.

The archives will remain online indefinitely.

Company-wide repository of software architecture

The company I work for develops and sells a quite large suite of industry applications. We are in the process of establishing company-wide guidance related to software architecture issues. Some examples include domain driven design, O/R mapping, logging, security and licensing. It will also offer guidance regarding specific technologies, like Windows Communication Foundation.

I would like to know if anybody else has done something like this, or know where I can find some best practices and examples regarding this?
Anton
Monday, April 02, 2007
 
 
We tried, and quite honestly, we failed.

I think what doomed us is that we didn't realize the sheer size and effort involved in imposing blanket standards to every piece of software we produce. To be fair, many of these applications were legacy pieces and previously under the "if it aint broke, don't touch it" banner. There were a lot of political and practical battles over which standards should apply to those.

If we were a brand new company and had a handful of products or fewer, it would be a lot easier to impose programming conventions and best practices going forward. Even still, you're dependent upon some sort of authority figure making seemingly arbituary decisions and getting the rank and file to agree to them. Being a benevolent dictator without turning into a PHB is a very rare skill.

I'm sure there are exceptions and I'd be interested in hearing them, but I think the relevant books are probably more generic "how do I get the company to toe the line?" type of books.  The history of the auto industry is a good place to start, as well as the aircraft industry.
TheDavid
Monday, April 02, 2007
 
 
Thanks, that's very interesting. The biggest risk I can picture myself is that the guidance ends up as just some documentation that isn't going to be taken into account when the individual day-to-day programming decisions are taken.
Anton
Monday, April 02, 2007
 
 
That in fact is a serious risk.

Licensing is a fairly easy area to consolidate because you (ahem) have the full support and authority of the legal department to make decisions stick.

Logging and security are reasonably easy to enforce because you can test them after the fact; you might offer a log viewer application, and if the other applications' logs aren't readable, it's easy to catch. A special QA team can test for security invulnurabilities and wave the "if you release, we'll be liable" stick if needed.

Properly labeling pointers via Hungarian Systems Notation (or similar coding practices) isn't something you can easily enforce; it requires peer code reviews and that may not be the most efficient use of your money or time.

In hindsight, there appears to be a theme. Not only do you need an efficient way of testing for standards compliance, you also need some way of effectively punishing people for flunking compliance (not so much as a deremit but more along the lines of pointing out why the code is bad).
TheDavid
Monday, April 02, 2007
 
 
I don't think that's just a risk; in my experience it is a certainity.
Greg Send private email
Monday, April 02, 2007
 
 
As far as hungarian notation and the like you can run your code through a semantic checker like FxCop.

Monday, April 02, 2007
 
 
Would something like the Web Service Software Factory[0] help?


Perhaps not the specific guidance in the package itself, but the idea of providing tools that make it easier to build systems that match your standards than to break it. GAT / GAX[1] makes it much easier than VSIP to build custom wizards, solution templates, item templates, and whatnot, which can make it more likely that your new stuff will do the "right" thing, whatever you define that to be.

-Chris

[0] http://www.codeplex.com/servicefactory

[1] Guidance Automation Toolkit / Guidance Automation Extensions, http://msdn2.microsoft.com/en-us/teamsystem/aa718948.aspx
Chris Tavares Send private email
Monday, April 02, 2007
 
 
We are already using design and code review, and that is certainly one way to enforce the guidelines. As for solution templates and the like, I must admit I have never used them, and I should probably look into them a little closer. But I have a feeling they are too specific and cost too much in setup and maintainance. What we need the most is more general guidelines put down on paper.

We are also going to put together an "architecture group," which will be responsible for coming up with solutions to architectural problems whenever somebody submits an issue/question. Does anybody have any experience in running such groups? Some of the challenges include response time, and making sure the organization doesn't short-circuit the architecture loop.
Anton
Tuesday, April 03, 2007
 
 
With resprect to coding standards, in Java you don't need to only rely on code review as there are some tools like Checkstyle that will check for a number of issues such as proper Javadoc, if statement has braces, etc. This in conjunction with standard Eclipse settings for the formatter and code templates can go a long way to helping ennforce a coding standard.

It looks like you are doing Windows development but perhaps there are similar tools on that side.
Gerald
Tuesday, April 03, 2007
 
 
There are similar tools for Windows, but we're really not going to enforce coding standards. What we're trying to do is to establish architecture guidelines, which is on a different level than coding standards. I mentioned some examples in my first post.
Anton
Tuesday, April 03, 2007
 
 
"...which will be responsible for coming up with solutions to architectural problems whenever somebody submits an issue/question."

As others have implied, people are not going to ask for answers unless they've made a decision and they're fishing for approval or justification. Yes, we had that problem here too.

I think an architectural planning group is of the most value to product managers and marketing people. Let's say you have four different teams each writing applications that incorporate wireless networks. The group would be immensely valuable trying to get each product to talk to each other.

On the flip side, if I'm a DBA and I need to convert an existing Access database into a network aware database and permit web connections, I'm going to do it the way I know how to and I'm not going to approach the architecture group (unless I'm doing something risky and I want someone to cover my ass).

If you want the architecture group to have influnce over the DBA and propose standards for schemas, scripts, roles and privileges, security policies, naming conventions, etc, you'll need to give the architecture group authority over the DBAs. For example, I can set it up however I see fit, but I can't make it available to the company at large unless its been signed off on.
TheDavid
Tuesday, April 03, 2007
 
 

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics
 
Powered by FogBugz