Work continues apace on the IronicDemoDesignScratchpad. It's banging into shape pretty nicely. The goal is basically to have a document which describes the demo on a high level that is readable and understandable by River Trolls. C'mon now, no faces like that... I work with some river trolls, although they deny their heritage!
One of the things I'm working on some Agile Paragraphs for Matt so he can continue is design of the modular design system. I'm also reading a bit about
Scrum
and
Extreme_Programming
so I can evaluate them a bit more since Matt seems interested in this approach.
While there are some really good things about these methodologies, developing things completely within a unit and waiting too long to do integrated testing seems like a potentially dangerous recipe. We'll see... I stil have a fair bit of reading before I make any final conclusions.
I'm also beginning to research workflows and potential quality management systems. Hopefully this could really help our production, which has been difficult to keep at a high level. Henri and I have already had a chat about possibilities for these systems, which includes workflows revolving around traditionally film based workflows like the concepts of developing storylines, storyboarding, storybeats, etc. Revolving around management and process control research for me has been Lean Manufacturing, Just In Time Manufacturing and the Six Sigmas. Detailing the exact approaches will have to wait until we have reseached things a bit more thoroughly and consulted our river troll.
14 Comments
Hide/Show CommentsDec 07, 2006
Henri Kuuste
Hey! Some of us are mountain trolls! You insult us with your river troll analogy!
Well..you know this troll's opinion on agile methodologies, and I hope you keep it in mind
Thinking about management systems tho, here are things that we need imo.
Here's a lil pipeline example I started just to get our ideas flowing
Dec 09, 2006
patosan
Jira will work nicely I think. It would be better if we can attach the complaints to the project itself. This will make issue / defect tracking much easier, imo.
There isn't too much that can actually be implemented here atm, since there are so few of us. Still, putting a system in place isn't a bad idea. Maybe create problem queue, where "experts" can pick up and resolve open items.
This is a meeting topic for sure...
Dec 07, 2006
Henri Kuuste
One thing my list was missing was Good practices for various areas of development. Including for just the community as such (like answer every e-mail request in 24h etc).
Dec 07, 2006
Matt Raykowski
I'm a rock troll and very adept at rock throwing, beware my might curve-ball, er, rock.
To the point... I really like the Iterative methodology, which is what Henri has outlined above essentially. It is light years ahead of Waterfall and has a lot of room for catch and release of features and blockages. The problem is that it's still very heavy which is why I had suggested looking into one of the many Agile methodologies, my preference at this time being Scrum.
Scrum has many of the same principles as Iterative but less management overhead. I can't speak for you guys, but I really suck as a manager so the less overhead I have the better. Scrum, like most Agile methods, believe is short and quick iterations that produce not just usable code but executable code. I think for a small group of people who need to see progress to maintain ambition - one of my fatal flaws - this could be a boon.
The Scrum Workflow:

As far as code assessment is concerned I think that peer-reviews are a good technique but also a technique that no one has yet perfected into a system or methodology. One thing that might be interesting is the upcoming module for FishEye called Crucible which is a software system with the goal of facilitating and, possibly, enforcing peer-review. At this point in time peer-reviews and code-assessment aren't on the top of my list of priorities. While I don't always trust my code I find that I very often trust Henri's code, so I have little to worry about there. I think our efforts would be better spent in high-level discussions about direction, road-map and architecture.
Dec 08, 2006
patosan
I think we all like the iterative workflow, that much is agreed and is / will be the development model. We've all agreed that Waterfall is too command on control oriented.
I think for smaller projects, or projects with low criticality and few members, Agile is probably a pretty decent methodology.
As Agile development relates to our project, I do have a problem with the limited amount of documentation, planning and the controlled chaos that goes into the development process. Maybe you can convince me otherwise...
Once of the huge problems we have with NeL is the lack of documentation on the various systems and subsystems. In a huge, complex project like the one we've undertaken, imo quality documentation is very important. Now, documenting for the sake of process slows down development and is useless and frustrating. We need quality documentation that is updated regularly so that new devs can come online quickly and so we don't have to keep everything in our tiny troll brains. Ya gotta have space in your brain to think about rocks and such!
There is a certain level of chaos that goes along with the free form development style of Scrum / Agile. I believe that with such a potentially large development team, chaos will be an enemy we will constantly be fighting. Eventually the dev teams in each department will be very large, communication and effective collaboration will be difficult enough without introducing even more chaos into the mix.
Based on the size of our team, and the current level of expertise, I think we can skip code review for now. Perhaps rookie contributors (not developers) would have to have their code peer reviewed, but we're a long ways from that.
Dec 08, 2006
Henri Kuuste
If you guys want to, you can live without code review or code quality control more specifically. I personally want my code checked.
Dec 08, 2006
patosan
I kept saying, code review, when I just meant, "peer review". Sorry for the confusion.
Dec 08, 2006
Matt Raykowski
Okay, this is a rumor I have to dispel very quickly. One of the most poorly stated tenants of Agile is "don't document, do." This is very often misunderstood. The Agile people don't believe that a product doesn't need developer documentation, what they're saying is to avoid the spec-writing, UML-authoring RUP-hell that beleaguers many larger projects.
What they've experienced is that a fair number of projects, RUP (Rational Unified Process) and Waterfall driven projects most commonly, have a documentation phase. This is where developers, designers and architects spend months writing specs and doing a bajillion UML diagrams.
The Agile people feel that this is a horrible waste of time. Let me explain why and then I'll explain their solution. Almost every project experience both scope change and scope creep. Take our little band of brothers here. Henri and I have refactored the core of our project maybe 3-4 times. What happens when your project changes scope? You need to research and then redocument. This means, to a lot of organizations, enter that documentation phase again. Throw away all of your specs, UMLs and start all over. Do your discovery, write your new specs, draw up new UML class diagrams and process diagrams. Imagine doing this (potentially 3 month) process 3 or 4 times and imagine what your schedule now looks like. It's not good.
What Agile feels you should do is document as you go. That is not to say that we shouldn't have an idea of our architecture, throw together some enterprise architect diagrams or something. But we should keep it very high level. Don't document everything up front. Figure out what you want it to look like and document thruogh stories and code comments. Self document as much as you can and make per-unit documentation that assembles into a larger document. In summary document what you do, not what you will do over the next year.
I understand your sentiment but understand that we used Scrum at PLATO on 5 different software projects spanning more than 300 developers. It works. Besides, we're not going to be large enough to experience these issues for the foreseeable future. If Scrum (or some other non-XP Agile process) doesn't work fit our bill we're not obligated to continue using it. Scrum is very close to Iterative, for example, so it wouldn't really be that difficult of a transition to that.
I have to agree with both of you on this. I think it should be a process but I don't think it should be overly formalized. That's what I was trying to say - not that we shouldn't do code review, just that it should be (if we do Scrum) part of our sprint review - a process we should do anyway. This is the point at which we go through the stories and UCs for the sprint and say actually do the stories and verify that the code follows the UC. It's the kind of thing that shouldn't take more than an hour or two between us. As far as real-time code review I think the "hey Matt, can you make sure I didn't do something stupid in foobar.cpp?" would be more than appropriate.
Dec 08, 2006
Henri Kuuste
Just as long as it does not mean no foresight, no planning and no design before code. All things that have several ways of going about them and do not have readily available best know solutions or analysis, would have to be analyzed theoretically before coding. I do think that formal documentation should be a result of self-documentation. But I think certain documents are needed before coding so as to keep a clear goal and come up with a decent system.
A game project, esp something like ours, is rather unique in this regard. Most game projects are actually stories. Well ours is not but we still have a very strong idea of what the game should be. Hence our scope is fairly solid. At least we can easily identify parts that are very solid and will with 99.9% likelyhood never change. Then we can identify parts which might happen with our game..like we might make a complex weather system and plan for them by making the system flexible enough to handle it without change in code. Thirdly we can identify parts which will change with 99.9% likelyhood...the gfx engine being a prime example of that - due to evolving technology - and plan for that by making interfaces and connections between these parts fluid.
Note that this is due to having no design at all before making any of those cores. If we had spent decent time on research and design. We would only have to make it once really. I never want to change core components again if possible. Anything that significantly changes architecture, should be finalized fairly early in the process. Also note that if we do see a part that might change (say the physics engine) we should build a robust and well designed interface which would not care if the engine does a 180.
Okay..the process you outline there is called "testing" and is by no means part of an iteration review (I have no idea about sprints and scrum and I do not intend to find out cuz I really do not care for things that other people came up with that much..and I do not have time to read). Iterations will advance no matter the outcome of the review. An iteration review would look at "what succeeded? Why? Could we use the same idea elsewhere? What failed? Why? How do we avoid it next time?" Testing is a process that happens during the development of the iteration and at the last leg of it once again - if errors are found they are fixed before the end of the iteration - that is if the iteration does not do what the chosen story beats said it would do. If something can not be done in time the storybeat will be abandoned and pushed into the next iteration or something like that..with a lot of analysis of course, why it could not be done this time. None of these are code-review. Testing is certainly a part of code review..the "If it looks right, it is right" part, but it is not a sufficient condition. Code review for me means - is my code quality code? Does it introduce problems in the future? Does it have potential scalability issues? Does it fail under any condition (this can not be achieved through testing in most cases - only analysis)? Things of that nature...in other words - other indicators of quality besides working in the test cases.
Now this is code review, but a highly inefficient way of doing it imo - this is exactly peer-review.
Dec 09, 2006
patosan
There is a difference between peer review, and just asking for someone's opinion about a particular something you're unsure about. If this is peer review, then it is a highly informal one, and one that is necessary from time to time.
I'm sure I'll be asking you guys for advice about this stuff pretty frequently as I learn C++, etc.
Dec 08, 2006
Henri Kuuste
Also let me note as part of code quality control. We do need a way to check if changed broke some other part of the system...and we need a robust way to control that. Usual systems will employ unit tests (which are also good design methods btw). Unit tests in game and other interactive systems context are very difficult tho (how do you unit test shadows exactly?)...so we have to give this heavy thought and come up with a system. Obviously manpower in the form of testers is one way..things will certainly reveal themselves pretty quickly if the system is in constant beta-testing...as in there are always people playing the development version of the world.
Dec 08, 2006
Henri Kuuste
Just another note on this - how much documentation is needed up front? I do not know if I would actually call it documentation..it is a matter of definition. Just to be clear - what we do up front is done only to help development - if you have good design documentation, coding it will take very little time. So think of that as just a part of coding...you might even think of method names on paper (not uncommon..but quite pointless imo...what should rather be done is - a standard for method and class names
). What we should not do up front is create documentation that explains to others what the resulting system is like. That does not mean however that the original design docs are not useful as tools for explaining the system to others, but it is a side effect of those docs, rather than their purpose. Many new devs (myself included) learn more from the docs that were used to originally design the system, than something that was done as an afterthought or as javadoc/doxygen/whatever. In fact docs that have been created as an afterthought to explain the system to a "client" or whatever, are usually far more confusing than the original design docs (if there were any). Systems that have no original design docs are very hard to grasp and usually also pretty badly done (unless the coders were masters at the given area).
Hope that makes my opinion clear there.
Dec 09, 2006
patosan
We all agree that overly centralized / command and control type development is a waste of time
The Agile people feel that this is a horrible waste of time. Let me explain why and then I'll explain their solution. Almost every project experience both scope change and scope creep. Take our little band of brothers here. Henri and I have refactored the core of our project maybe 3-4 times.
What happens when your project changes scope? You need to research and then redocument. This means, to a lot of organizations, enter that documentation phase again. Throw away all of your specs, UMLs and start all over. Do your discovery, write your new specs, draw up new UML class diagrams and process diagrams. Imagine doing this (potentially 3 month) process 3 or 4 times and imagine what your schedule now looks like. It's not good.
What Agile feels you should do is document as you go. That is not to say that we shouldn't have an idea of our architecture, throw together some enterprise architect diagrams or something. But we should keep it very high level. Don't document everything up front. Figure out what you want it to look like and document thruogh stories and code comments. Self document as much as you can and make per-unit documentation that assembles into a larger document. In summary document what you do, not what you will do over the next year.
I understand your sentiment but understand that we used Scrum at PLATO on 5 different software projects spanning more than 300 developers. It works. Besides, we're not going to be large enough to experience these issues for the foreseeable future. If Scrum (or some other non-XP Agile process) doesn't work fit our bill we're not obligated to continue using it. Scrum is very close to Iterative, for example, so it wouldn't really be that difficult of a transition to that.
What was the nature of the products? What was the outcome of the projects? How was the chaos managed? How was effective communication between teams and within teams maintained? What sorts of documentation standards were implemented? How was quality control maintained?
Dec 07, 2006
Henri Kuuste
about code review
53 <RTSan_mobile> I personally did not even think much about peer review
53 <RTSan_mobile> it is not a very efficient way to do things imo
53 <RTSan_mobile> we have to come up with some other way to review/assess the code...there are many ways
54 <RTSan_mobile> one very well known thing is "if it looks right, it IS right"..hence if the tests succeed the code is likely to be right as well
54 <RTSan_mobile> secondly - using automatic code formatting..this gives the advantage of clean "looking" code
55 <RTSan_mobile> combined with code that satisfies the tests, it should provide a decent base for "good code"
55 <RTSan_mobile> thirdly..some of my friends are working on a code metric system..it will be commercial..but I am sure I can get info and stuff from him on how to roll our own or whatever..or maybe even get to use it for free
56 <RTSan_mobile> this thing collects various info about the code and makes conclusions based on an expert system like thing
56 <RTSan_mobile> I have to talk to him to see how far that is and all that
56 <RTSan_mobile> but it is a possibility that we implement something like that
56 <RTSan_mobile> okay..fourth...as far as ideas off the top of my head go atm at least
57 <RTSan_mobile> given sufficient information exchange and replacement system (which I mentioned in my post), there should always be another coder who knows what is being coded...if the description of the code is good, it is very likely the actual code is good
57 <RTSan_mobile> now what code review in the end means tho is that the coder does not miss things that are in the design or in the UC etc
58 <RTSan_mobile> that should be fairly easy to check...altho a system or a set of rules would still be needed
58 <RTSan_mobile> so that check is ALWAYS done