Domain: controlchaos.com
Stories and comments across the archive that link to controlchaos.com.
Comments · 16
-
I suggest to look into Scrum
First thing is: forget about milestones. Milestones have 2 problems: first they put a fixed date for delivery, that means a fixed amount of time. Second they assume a fixed amount of work done until that Milestone. And finally they assume the work aka code is "finished", "polished" and tested.
Currently you say that you want to do better estimates
... with no experience and likely no reference data this is nearly impossible to do with milestones.The most important thing is to get an idea about your "speed" or "velocity".
In agile methods like Scrum (see here http://www.controlchaos.com/about/) or eXtreme Programming you try to work in fixed iterations of e.g. 3 weeks (you can define your own length like 2 weeks or 4)
You put everything you can think about into a prioritized "to do list", often called "backlog". The customer has to prioritize. Your goal is to plan for the next iteration, usually called a sprint. Just take the as many high prioritized items from the backlog into your sprint.
After the first sprints you likely realize that you put always to much work into one sprint (the same would happen in a milestone but with worth consequences). The point is: now you get a feeling for your velocity. You can react on this by changing the sprint length (4 weeks, advantage: less overhead in planing, disadvantage: longer feed back circles from the customer), or by stuffing or by tools or by changing priority of features. The managers are now in the position to be able to manage.
In the long run you will have to break down items on the backlog in useable small work load items. It does not make sense to have one item with estimated work of 100 hours and 15 items with estimated work of 20 hours and 50 items with estimated work of 6 hours in your current sprint. One rule of thumb is: no backlog item should have more work assigned than 16h (I personally prefer 8h). If you have bigger items, try to split them. E.g. pan to "analyze" a certain problem in this sprint, assign 16h for use cases/stories/or what ever specification you use, 8h for architecture or database design, 8h for a rough code concept. Put the implementation of this into the following sprint!! So you can get feedback between sprints.
After a few sprints you will be able to put "the right amount" of work into your sprint and yout estimates on the items in the backlog become better. Remember Joh? Two sprints ago we estimated that tricky stored procedure to take 16h but we nearly needed a week for it. Lets better estimate this one on 20h instead!
The problem with milestone based planning and GANNT diagrams is: every work piece has an amount of time associated + a buffer. The buffer is always an uncertainty that is added so a chain of tasks add up their buffers. Starting times of tasks in the future are unnecessary far in the future, nevertheless buffers tend to get used up. Nevertheless there will be buffers that are to small, because the complete task was estimated completely wrong. Bottom line on a small GANNT diagram with 4 parallel _big_ work flows (like backend development, frontend development, database development, testing), all consisting of roughly 25 tasks (done in parallel or sequential) you have bottom line 100 task, all with a buffer. The likely hood that you reach your milestone in time is basically very close to zero.
I don't want to come to the conclusion that GANNT based planning does _NOT_ work, e.g. you can add also buffers at the beginning of the tasks
... but I don't want to go into this.However in your situation you will be likely completely overwhelmed by simple tools like MS Project or other GANNT tools.
Regarding your question: UML is the right thing. It always is, no matter what other zealots say. The question is what kind of diagrams and with what kind of elements do you want to use? For the database ER diagrams might be enough, but what about "flow charts" (in UML called activity diagra
-
You'd hate my team
We have a scheduled meeting every single day, at the same time. Lasts 10-15 minutes most days-- it's longer on Tuesdays. It's an essential part of our process, which is a sort of modified Scrum, and it works extremely well.
-
Scrum Development Process
With the Scrum development process, the requesting parties are able to get feedback every 24 hours. The development team's does not commit to delivering more than they believe can be achieved in thirty days. See if you can get your bosses to buy in. Here's a website: http://www.controlchaos.com/about/
-
Re:Extreme Programming
Scrum is another development process that attempts to address the "silo's of expertice" problem.
-
Re:Balance is the key
That's why Scrum can be good - if you follow all the rules.
-
Death by BuzzwordOk, so what's this scrum thing? According to Control Chaos (the first related hit I got on Google):
Scrum is an agile, lightweight process that can be used to manage and control software and product development using iterative, incremental practices. Wrapping existing engineering practices, including Extreme Programming and RUP, Scrum generates the benefits of agile development with the advantages of a simple implementation. Scrum significantly increases productivity and reduces time to benefits while facilitating adaptive, empirical systems development.
Lots of buzzwords, little information. So let's Learn more:
- Scrum is an agile process to manage and control development work.
- Scrum is a wrapper for existing engineering practices.
- Scrum is a team-based approach to iteratively, incrementally develop systems and products when requirements are rapidly changing
- Scrum is a process that controls the chaos of conflicting interests and needs.
Scrum is a way to improve communications and maximize co-operation.
- Scrum is a way to detect and cause the removal of anything that gets in the way of developing and delivering products.
- Scrum is a way to maximize productivity.
- Scrum is scalable from single projects to entire organizations. Scrum has controlled and organized development and implementation for multiple interrelated products and projects with over a thousand developers and implementers.
- Scrum is a way for everyone to feel good about their job, their contributions, and that they have done the very best they possibly could.
At this point, my head exploded. This note is a post-mortem plea to press murder charges against the person who wrote that crap. -
Death by BuzzwordOk, so what's this scrum thing? According to Control Chaos (the first related hit I got on Google):
Scrum is an agile, lightweight process that can be used to manage and control software and product development using iterative, incremental practices. Wrapping existing engineering practices, including Extreme Programming and RUP, Scrum generates the benefits of agile development with the advantages of a simple implementation. Scrum significantly increases productivity and reduces time to benefits while facilitating adaptive, empirical systems development.
Lots of buzzwords, little information. So let's Learn more:
- Scrum is an agile process to manage and control development work.
- Scrum is a wrapper for existing engineering practices.
- Scrum is a team-based approach to iteratively, incrementally develop systems and products when requirements are rapidly changing
- Scrum is a process that controls the chaos of conflicting interests and needs.
Scrum is a way to improve communications and maximize co-operation.
- Scrum is a way to detect and cause the removal of anything that gets in the way of developing and delivering products.
- Scrum is a way to maximize productivity.
- Scrum is scalable from single projects to entire organizations. Scrum has controlled and organized development and implementation for multiple interrelated products and projects with over a thousand developers and implementers.
- Scrum is a way for everyone to feel good about their job, their contributions, and that they have done the very best they possibly could.
At this point, my head exploded. This note is a post-mortem plea to press murder charges against the person who wrote that crap. -
Thought this could help
Had no idea what Scrum is so found this
What is Scrum? Scrum is an iterative, incremental process for developing any product or managing any work. It produces a potentially shippable set of functionality at the end of every iteration. It's attributes are:
* Scrum is an agile process to manage and control development work.
* Scrum is a wrapper for existing engineering practices.
* Scrum is a team-based approach to iteratively, incrementally develop systems and products when requirements are rapidly changing * Scrum is a process that controls the chaos of conflicting interests and needs.
* Scrum is a way to improve communications and maximize co-operation.
* Scrum is a way to detect and cause the removal of anything that gets in the way of developing and delivering products.
* Scrum is a way to maximize productivity.
* Scrum is scalable from single projects to entire organizations. Scrum has controlled and organized development and implementation for multiple interrelated products and projects with over a thousand developers and implementers.
* Scrum is a way for everyone to feel good about their job, their contributions, and that they have done the very best they possibly could.
Original article can be found: http://www.controlchaos.com/about/?SID=8ef7eb5b2a0 69a2710abef27d02c851f&SID=7da824062baf60b8e78ec5f9 9836f092 -
Have you checked out...
... any of the Agile project management methods? I am using Scrum and it works perfectly for this kind of situations.
-
Process doesn't build software...
people do
That is why until organizations learn to ignore their big huge engineering-based waterfall processes and start focusing on developing their people both individually and as teams, they will not see any significant improvements in their ability to use IT more effectively. Agile methods are really great because they turn the focus away from the process (use the minimum process that can possibly work), to the people (teamwork, communication, collaboration, mentoring, etc.). That isn't to say that agile methods are easy... far from it. In many cases it takes a huge cultural shift for an organization to adopt agile methods. However, the effort is worth it because suddenly projects that used to take 18 calendar months are being finished in 4 or 6 calendar months... simply by eliminating the worst wastes in the corporate system, amplifying the team's learning, and allowing them to make decisions about how they do their work.
Check out:
The Agile Software Manifesto
The Scrum Methodology
And my blog, Agile Advice (couldn't help but put in a little self promotion :-/ -
Re:Capability Maturity Model
This is an interesting argument, and it's one I hear a lot here, but let me ask you something;
What was your improvement in productivity, and how was it measured? What was the reduction in your (delivered defects):(effort expended) ratio? What was the reduction in your (lines of code delivered):(effort) ratio? One or both of these ratios have to go down.
If you don't have these numbers, you can't really say you've improved productivity, especially with a process like Scrum. Scrum makes it very easy to think you're more productive, because it gives you results every 30 days (in fact, to a lesser degree, every single day with your Scrum meeting). But are you actually more productive? There's a fair rework cost incurred by Scrum, due to the constant introduction of new requirements, which Scrum hides very well.
I don't have these numbers either, and I'm not sure if anyone has done such a study (although I've encouraged the group here that's pushing Scrum to measure them), so I can't say for sure which process is "better" from this perspective.
I will agree that Scrum does an excellent job of making developers feel good, which is one of their stated aims, but unfortunately, software exists not to please its developers, but to please its users. -
Re:Project Management AuthorityAll too often, some sales guy will toss in a requirement like "must run on Win98"; and thousands of man hours will be wasted trying to meet something that wasn't even important to the customer.
Probing your developers on the relative cost (in terms of time, frusturation, estimated debugging work) for each feature listed may allow the client to trim the requirements of the project.
Present a relatively long bar next to each feature that corresponds to the work and heartache the developers will go through to implement it. The client can then easily cross out those features out that aren't so important and would extend time to completion unnecessarially.
Getting a priority level out of the client at the feature specification phase can be helpful as well.
- What is it that you absolutely need?
- What would go along with these critical feature well?
- What would be "icing on the cake?"
Don't let them run you over with needs! They're not all "needs" and you probably can't finish them under the deadline they want anyway. Priortize while allowing for feature expansion.
- 1) Mockup something and present it to them.
- 2) Ask "Is this what you're looking for?"
- 3) Architect your framework (real coders should be taking part here!)
Then try BigVisibleCharts and SCRUM, SCRUM, or SCRUM (pdf) -
Re:There's Nothing New Under the SunOther industries will follow as the necessary skills and infrastructure become more wide-spread.
Many will, but I don't think this one need go.
To keep development work here, we must exploit the one advantage we have over people 10,000 miles away: we're closer. Sure, that sounds too simple. But hear me out.
The traditional dominant development process, the Waterfall, assumes that you can put every important fact about a piece of software into a requirements document. That document is then turned over to the geeks, who could be kept in a sealed room, for construction. N months later, perfect software comes out.
We all know this is bunk. And not just from practical experience; if the requirements document really had all the needed information, then you could just write a requirements document compiler and dispense with the programmers completely. But it's the bunk that allows outsourced development companies to work. Not just because it allows them to pretend a development center on the other side of the planet is just as good. Even worse, because we believe this bunk, their development centers are just as good as keeping the engineers in the building (or city, or state) next door, as is common practice here.
So what should we do instead? We should pick development methods that take advantage of the highest-bandwidth, lowest-latency communication available to us: physical presence. If we put the engineers in the same room as the domain experts and the product managers, then we can build software more quickly and more efficiently than before.
But we get more than that. If you put everybody together, then you get unmatched ability to respond to change, change in the market, in your customer needs, in your competitor's products. A bunch of people in a room can turn on a dime compared with the difficulty of changing specs, changing contracts, and updating people who are asleep when you are awake. Even better, you can create change, forcing your competitors to try to keep pace with you.
So for those interested in keeping at least a few develoment jobs in the US, check out the book Agile Software Development Ecosystems (prices). Or look at one of the many Agile methods directly:
And for the record, I think world trade is great. If somebody in India can really do my job for 1/10th as much; then I should find something new to do, something that provides matchable value to my clients. -
Scrum
-
Sounds like you need some project management...You need someone (not you) riding herd on those developers and making sure they're actually getting work done. The company I'm at uses a lightweight process called SCRUM, where features (or "stories" in XP terms) are divided into small tasks, each developer is responsible for taking on and providing estimates for a fair share of tasks, and every morning there's a (short -- ten minutes, max) meeting where each developer has to go over:
- which tasks they worked on yesterday
- how long they've spent on each task
- how much more time each task will take to complete
- what they're going to be working on today
- any blocking issues they might have
The project manager (who is not a developer and not a manager manager) is responsible for keeping track of the tasks and the hours and making that information available. It's always clear who has responsibility for what and who's blocking whom from getting their work done.
This does a great job of keeping developers productive, and since developers get to make their own estimates (and the total amount of work that can get done in a development cycle is based on 40-hour weeks), it also does a good job of keeping them sane.
(It works well with eXtreme Programming practices like pair programming and story-driven design, too.)
-
Re:XML::Comma -- a perl-based framwork
But in lots of web-systems-development contexts the emphasis is on getting new sets of features built as quickly as possible, and there's a strong pressure to be in "permanent protyping" mode.
Prototyping is where you intentionally ignore a lot of the factors important in the real world, so that you can quickly bring some desired aspect to apparent completion. A great example is building a movie set: you only build the walls and finish the surfaces that the camera sees, but the sink doesn't have plumbing and there's no glass in the windows.
On a project of any size, the notion of "permanent prototyping" is a dangerous myth. If you're building for long-term quality and flexibility, you can't cut corners; they always come back to bite you. Trying to turn a movie set into a real house is much more painful than just building a real house, especially if there are people living in it already.
A better solution is to pick one of the various agile methodologies, like Extreme Programming, Feature-Driven Development, or Scrum. All of these methods focus on building very high quality software in a way that's amenable to change.
XP, for example, lets the biz folks change the spec every week or two if they want. (Which sounds like disaster, but smart people quickly realize that making random turns every few blocks is not the best way to get somewhere.) That gives you all the benefits of "permanent prototyping" without getting it's biggest drawback: the speed with which you reach critial mass.
You're certainly right that expert programmers don't absolutely need static typing. But for experts, static typing isn't that much of a burden, and even us geniuses have those occasional Friday afternoons where our brains go to the bar two hours before our bodies.