I'd like to underline this about a thousand times.
(disclaimer: I teach agile to teams) What I see over and over again is folks picking up agile and a) getting too religious about it, and b) immediately making it 5 zillion times more complicated than it has to be. Usually with the use of tools (but creative minds have been known to create manual monstrosities)
If I could eliminate people who already know everything (either pro or con) and folks who for some reason want to complicate everything? Life would be a lot easier for agile teams.
I saw a guy once -- no shit -- that had created a 20-tab spreadsheet to "do" agile. Each sprint close he forced the team to sit down while he went through each item on a projector. Their backlog had 600 items in it. It was like taking a big dump truck with manure and just covering the team in it. I insisted they move to a physical storyboard, and when I checked up with them a few weeks later they had this storyboard that looked like the wiring diagram for a 57 Chevy. Colors and lines and tags and color-coded cards.
Agile is easy, but it's possible to screw it up if you keep trying hard enough. Start simple and then add what you need.
(disclaimer: Agile consultants ruined the software group I work in.)
Making good software is hard, and anyone claiming to have a magical process that guarantees good software is selling snake oil. I can appreciate your wanting to make a buck, but would also seriously appreciate it if you could find some other industry besides software development to go screw up.
Ever notice that virtually all Agile success stories are written by Agile consultants and not by developers? Ever notice that nobody actually claims to have built anything from scratch with Agile?
The stories all read the same. Product has already been built. Developers stuck bike shedding over some piddly detail, when lo and behold the Agile consultant arrives to cut through the Gordian knot by placing the developers on a strict regimen of myopic thinking and inattention to detail.
I was a team lead/architect for a project, we built an online booking engine and fare quoting system for an Airline. They pull in ~$1.5bn a year through this channel. We delivered under budget, with almost zero known issues, 1 day late (due to some internal infrastructure).
ALL DONE USING AN AGILE METHOD!
Today that original team of 6 is now a department of 70. They still use Agile/Lean methods (FDD & KanBan), continuously deliver successful projects and win numerous awards etc...
I worked at a cool little company where we built a useful product. We just built it. We didn't use waterfall, agile, or any real process. We just made sure to communicate and only hired people with good judgement and critical thinking skills. A big (very big) company decided they liked our product and bought the company.
After acquisition, our new overlords decided that our process, i.e. using our brains, wasn't compliant with whatever standards they had for development. In came the agile consultants, scrum masters, TDD, CI, etc. All the things you hear these blog posts evangelize about. It brought development to a total halt as all these assholes put in their $0.02 about how we needed scrums, sprints, user stories, and story points. Developers couldn't work on the features they knew were important without cutting through miles of red tape (finding a "customer" to make a story, breaking that story down into the actual work that needed to be done, moving the story through the backlog, estimating points for the stories, etc).
Like I said above. It ruined my software department. I wouldn't wish agile on my worst enemy.
Ahhh it actually sounds like your team was originally being Agile
This statement is unfalsifiable; this kind of retroactive defense makes Agile out to be an ever-moving goalpost. If any effective, basically "good," organic team behaviour was "Agile" to begin with, there is no identifiable differentiating criterion of Agile methodology from any other mode of small-scale collaboration.
Interesting point. The thing is, any Agile method is supposed to evolve with the team. Long running Agile teams are often not following any one methodology but rather using the best bits of a bunch of them, in a way that works for the team.
This stuff is mostly common sense so you will find that many small teams are often Agile even if they don't know it. Modern software dev is really more about effective communication and collaboration then technology and tools.
My take on it is: If what you are doing aligns with the Agile Manifesto and its Principles, then you are Agile even if you are not doing TDD, peer-programming, daily stand ups etc. No matter what the zealots are telling you to the contrary.
Agreed. Another way of putting this: Agile is best practices for iterative, incremental development. Applied agile means borrowing/stealing practices from others, and more importantly creating and adapting your own processes to your particular team.
While I think you're trying to be critical, you've actually hit on a key point in agile.
Agile is about principles, not procedures.(I speak of litte-a agile, not big-A agile). It also emphasizes people, not artifacts. Because of this, two things naturally occur: 1) Whether or not you are "doing" agile is a judgement call, not discoverable by a formal prof or checklist, and 2) agile is more like playing the piano than learning calculus. You don't learn it by watching a film about it or reading a book: you learn by doing it and getting better over time.
You can look at this as "moving the goalposts" if you like, or you can look at it as optimizing for each circumstance. I think realizing that there are no goalposts is one of the stages of actually getting it. (and there are many folks in the agile camp who have not gotten it yet)
How about never do something that isn't making the team run faster? I don't care what the books or the authors say, agile is about optimizing your particular team for your particular situation. There's not a one-size-fits-all cookbook.
The only caveat I'll add is this: many times people won't believe (or do not understand) that certain things will actually make them run faster and have a happier team. So you have to have an open mind. If you already know agile sucks, it's probably going to suck. If you already know that agile means TDD and everything done a certain way? It's probably going to suck a lot. In fact, the ones that think they know agile (and love it and are willing to tell everybody they hear about it) are usually the ones making life miserable on everybody else. I'd much rather have honest skeptics. With skeptics you can try something and decide whether you like it or not. In the "agilistas" minds, unless you do it perfectly, you are sinning against agile and it's no wonder you are struggling. They can be impossible to live with. (and they've lost track of the big picture)
Or as I told one team, I've never had a team fail because of the way they decided to do (or not do) story points. Don't get hung up in the weeds.
I can't endorse putting developers and customers directly together. In my experience, customers view developers as something between magicians and freaks. Many will not take seriously a developer in sandals, shorts and a a T-shirt with some kind of geeky slogan.
Developers on the other hand, often lack the patience and tact to work directly with people who don't understand technology at their level. They tend to divert the conversation to the "interesting" problems that they want to work on and conveniently don't discuss the details of all the reports that the system needs to produce.
When developers and customers get together, they talk past each other because they're almost speaking different languages. Or they get sidetracked on minutia and lose sight of the larger goals.
There is definitely a place for a person who can be comfortable in a business suit talking to customers, understanding their needs and priorities in their terms, and then translating that into user stories (often with developer assistance) back at the office.
I'd be very unhappy working in an environment like the one you described. I consider myself a developer, but I've worked directly with customers most of my career. If I were cut off from that, and had a BA standing between me and the end user/customer, I'm sure the resulting product would suffer.
It's no surprise that we'd come to such different conclusions. I think that a dev who is capable of working well with customers would be so frustrated with a BA that he'd quit, or (more likely) never take the job in the first place. So it isn't random chance that you never meet these developers - they're probably avoiding the kind of organizations you work for. I'm not saying you don't work with talented programmers, I'm just saying that a BA-heavy workplace that probably filters out the kind of developer who has the patience and tact to work with customers.
The hardest part of doing Agile is to change the mindset of the people. They're used to working in an iterative/mini-waterfall schedule and used to be bounded by "processes".
With Agile, suddenly there are less "processes" even though there are still some things that they should follow (TDD, Continuous Integration, always have test automation in many levels, etc).
Is this not the point of RUP? To create an iterative, agile methodology that looks like a waterfall at a high level? I think the problem you define is the exact reason that RUP becoming so popular, but I admit that I may misunderstand.
The only piece that I would add to this article is the concept of a daily morning scrum. For virtual teams this can be accomplished via Campfire. For those who don't know about a daily scrum, the idea is that you take 5-15 minutes (the shorter the time the better) first thing in the morning and everybody goes through briefly 1) What they did yesterday 2) What they're working on today 3) Anyone they need to sit down with to help them become unblocked / discuss a feature with. Doing so every morning is a great way to keep everyone on the same page and provides a good balance between autonomous time and keeping everyone on the same page.
Doing this meeting while standing helps to keep the meeting short and to the point, and if you find yourself engaging in discussion about a particular feature / item / issue..."take it offline". Don't use everyone's time to discuss something that should be discussed at a later time when everyone else could be in flow.
I find the daily morning scrum meeting a major "zone killer". It's completely orthogonal to how I function that I often spend a major part of the day just recovering from it.
I arrive in the office ready to roll, motivated, head full of ideas that have matured during the night, breakfast and commute. I can litterally arrive, sit down and crank out code (or whatever task is on). And then it's daily morning scrum meeting, and even that 5 or 10 minutes (when done right, a thing I've never seen with my own eyes) totally kills this mental state. 99% of the time my task is self-sufficient enough that what other team members do is completely irrelevant to me and I rarely have any insight to give them either. And I don't remember nor even care what I did yesterday, it's done, forgotten, check the SVN commit logs if you want to know about it. So I zone out, then the meeting is over and I've half-forgotten what I was doing so it's time to look at the latest meme on reddit.
I'd gladly settle for a daily _evening_ scrum meeting:
- What did you do today?
- What bothered you?
- What will you do tomorrow?
put that in the back of my mind and go home, I'm sure I'll have sorted things during the night to be useful tomorrow.
Good stuff. I plan to share this with each development manager on my team. We've learned many of these lessons the hard way. Others, we've decided not to pursue. For example, we have found working together in a team room is extremely helpful when working through a new model design, etc. So we have a 3 days in, 2 days virtual model.
Along the lines of removing technology, we've enjoyed using a mockup tool (like Peldi's Balsamiq or Mockingbird) for capturing story flows and wireframes. I know it's tech, but these tools do such a good job of removing the tech it's barely visible.
Great article, but what if you're a BA with a great idea and super low budget?
You can either:
a) Learn to develop applications on your own (potentially slowing your time to market and reducing product quality)
b) Develop the requirements and hire someone else to build it (cheaply and effectively if you've got a good team in India)
c) Take on a developer as a partner (diluting equity and who knows if he's the right guy for the job until you've learned more about the nature of the solution needed?)
My contention is that its not worth diluting equity with an additional partner until you've put out a product yourself that tests of all your original assumptions.
In that scenario, you're not a BA you're the customer because you want your idea developed. So hire a competent developer to make that idea come to life. The core problems with being a BA are the same, you'll skew the implementation with your own pre-conceived notions of how you think things should be done. Given you're not capable of doing the work, you really shouldn't have any input on that.
I don't tell my accountant how to do their job, despite having numerous opinions on how things should be structured. She takes my input on board, and tells me what I should actually be doing.
How you decide to remunerate them is an entirely different problem.
I'd like to underline this about a thousand times.
(disclaimer: I teach agile to teams) What I see over and over again is folks picking up agile and a) getting too religious about it, and b) immediately making it 5 zillion times more complicated than it has to be. Usually with the use of tools (but creative minds have been known to create manual monstrosities)
If I could eliminate people who already know everything (either pro or con) and folks who for some reason want to complicate everything? Life would be a lot easier for agile teams.
I saw a guy once -- no shit -- that had created a 20-tab spreadsheet to "do" agile. Each sprint close he forced the team to sit down while he went through each item on a projector. Their backlog had 600 items in it. It was like taking a big dump truck with manure and just covering the team in it. I insisted they move to a physical storyboard, and when I checked up with them a few weeks later they had this storyboard that looked like the wiring diagram for a 57 Chevy. Colors and lines and tags and color-coded cards.
Agile is easy, but it's possible to screw it up if you keep trying hard enough. Start simple and then add what you need.