Tools for high-level code design/architecture?

Recommended Posts

I was wondering what you guys are using to design your technical solutions. Code architecture etc if you will. Is it still UML or has someone come up with something better or at least different yet? If you are using a software tool, then which one? If not, do you have some other method, like writing a text-description, code skeletons, mindmaps on physical paper or what?

I'm asking because I've never really liked UML but I've also never really found any sane alternatives..

0

Share this post

Link to post

Share on other sites

Well, I mean I learnt UML as a part of my Uni course using StarUML (heh), but to be honest its kinda stuck with UML if im designing things that will be presented to others - like if the design structure will be worked on / seen by other people as its a pretty common system that most people can get by looking at it.

If im designing something that is my own I tend to use a much rougher but faster design that is just something I personally understand. Not like a uniform system but something I can easily read though others would probably be confused by :D

Share this post

Link to post

Share on other sites

UML was originally a tool for communications, a way to describe systems. The modeling language attempted to handle systems in motion as well as systems at rest.

People built tools to generate diagrams from code, then people built tools to generate code from diagrams, and soon some people (particularly managers who don't write code) thought that code generated from diagrams was the One True Way systems should be built.

Use UML to communicate and describe and it is a great tool. Sequence diagrams, class diagrams, ER diagrams, they're all great at describing what you've got.

As for high-design, usually it starts on a whiteboard and text documents, gets refined in those for a while, some of the documents get cell-phone snapshots of whiteboard diagrams that are UML-like, and then code gets written.

1

Share this post

Link to post

Share on other sites

I want to experiment with different designs and get a feel for their characteristics, pros and cons etc. For example, it might be very easy to design a system that is "clean" and easy to extend etc, but that may be impractical for some algorithms or inefficient in some ways. For example, in my RTS with lots of units, I want to have a status effects system. It's very easy to create a list of BaseStatusEffect for each unit, and just call the Update() method for each effect for each unit each frame etc, but it's going to be inefficient and may have GC implications and what not. There are lots of solutions, but how do I list them, compare them and so on?

I also have a scenario where I have a bit of a dependency hell, and I feel like I have very poor tools to experiment with it and get a feel for the impact of different solutions.

I keep feeling that someone should have come up with a much better tool for things like this by now, but I've never found one.

0

Share this post

Link to post

Share on other sites

I work since about +15 years in non-game related software engineering field and uml is all over the place - especially when you define fixed customer specifications which are hundreds of pages long, including every class required to satisfy the needs.

But there is a caveat: Most of the time the actual produced code does not match the defined uml at all, because there may be some heavy architecture changes required because of some decisions which do not work, unforeseen issues, dropped customer needs, unwanted extendability (which happens a lot, because the customer doesent care and dont want to pay for unneeded complexity), performance issues ... etc.

So the trend is to just define "High Level System Overviews" including a relation how they communicate to each other, but not define a full stack of a architecture anymore. Especially when you are in a agile environment when the customer needs are not clearly be defined...

We do this in powerpoint or impress or just word - painful as it is :-(

I personally dont use uml or design my applications upfront in very detail - just the bare minimum to get it working and the build up from there. Also i do not design my applications/systems to be extendable unless its required to do so.