Hacker News new | comments | ask | show | jobs | submit login

There is an insider story about how these methodologies comes about. So there are few groups of people whose sole job is to do consulting on failed/late/over budget projects. Mind you, they don't write code but rather they observe how things are going and then prescribe process/management improvements (McKinsey style). Once in a while, these folks bump in to terrible projects and whatever they prescribed sometime works like a charm. In that case, they take that prescription on road and advertise the hell out in conferences, magazines, blog posts. Unlike regular developers, they have all the time in the world to do these activities. They write books and give interviews and by the media power of distributing information suddenly they pop out as process gods who knows how to fix any project. Eventually the new things starts to fad, people realize what works in project X didn't worked in Y, speaker engagements starts drying out and then these folks need new thing to repeat the cycle.

The obvious problem is that these folks prescribing the development process are not active developers. They are not even part of any real project over any long duration. They are in job of inventing and selling processes and handing out management advice as consultants. Whatever they prescribe, might have worked only in specific context and for specific symptoms, usually with huge dose of luck. Next time when you see new process fad, look up the history of originator of this process, what company he is part of, how much code has he written, how he makes money. You will know what I'm talking about.




This is not true for agile. The agile manifesto was in fact drafted by software developers. Also, agile doesn't prescribe any process at all, in fact, it does the opposite. Agile in essence is quite beautiful, unfortunately it gets twisted and turned upside down until it's just another methodology (which is exactly the opposite of its original meaning).


Some 10 years ago I attended a purportedly OO development conference which was by that time taken over by agile crowd. It was full of nice, chatty and energetic people.

I was lost. It felt like slipping through a crack in the Universe, Sliders-style, into reality where you can't understand people discussing the things you do for years. There were few other developers attending, seemingly just as startled by all this.

The whole thing ended with some Agile activity for all attendants which I can best describe as a mix of kindergarten class and Baptist sermon. I could not comprehend the intent, the procedure and the desired outcome (and whether it was achieved).


That's how I felt when I attended my Scrum Master training. There was almost nobody in there who actually wrote code. The discussions were very abstract and about situations I had never encountered in work life.


Couple points re this.

People attending SM training are often just middle managers learning enough to know WTF their SMs and PMs are talking about in meetings.

Also, there's no requirement for SMs to be coders, it's a role a lot of BAs take on. Some experience in software development context is desirable tho.

I found a lot of my SM training relateable to real life. My team went crazy for planning poker because it got a lot of assumptions out early.

Standups were impossible because some people started at 1pm, others finished at 4pm.

I see Scrum as a bag of tools to apply to teams. Some work, some don't.


Oh, you know, I'd forgotten about the paper airplanes and pasta sculptures.


I actually like vanilla Scrum and think often you need a formalized methodology for the team to follow. I've worked with a lot of different teams and there are a few things I've noticed being pretty common among developers (or sometimes being guilty of myself).

1. Not working on what you are supposed to be working on. Sometimes some developers feel that they should probably rewrite X or add Y and does so without consulting anyone first. Something it is good and sometimes it just takes time or adds regressions you did not need at the time.

2. Senior developers owning a piece of the code base. Often grabbing a huge chunk of work for themselves on it and then you don't hear from them for a while when they hack away. Sometimes they do good work and sometimes not and if they are sick or away and no one knows how their code works.

3. Junior (or some senior) developers being stuck for a long while without asking for help.

4. Ignoring the customer and building what you think should be built.

None of those are automatically fixed with Scrum and I know some here will just say "Yeah, we have a professional team that actually talks with each other and does code reviews" so they don't need it. And I get that but for a lot of those small teams building some CRUD application at a large enterprise the formalized communication ways are a god send in my experience.


I agree with you that a formalized methodology is required for you to start with agile, be it XP, Scrum, Kanban or whatever the flavor the team itself feels more comfortable doing.

What no one tells these teams is that the methodology/process itself should be flexible, should be allowed to change to accommodate the idiosyncrasies of their work environment. What I've noticed helping some small companies is that teams learn some framework and use that as their "agile" concept and then proceed to be overzealous of the process itself, completely forgetting the original manifesto.

Like always, it's a strange whisper game...


Adjusting the process literally is part of Scrum. At the retrospective, if something isn't working, you call it out and change it. That can be something as big as completely changing the methodology. I've never worked on a XP team but my understanding is formally there is no retrospective process - I would definitely want to put one in place if I did work with it.

Any development process that doesn't allow for changing itself is shortsighted and ultimately self-defeating.


Except at most companies that use Scrum, there are very rigid rules sent down from above regarding the implementation of Scrum. These rules apply to the whole company and can't be questioned or changed via retros.


This is definitely the case for me. I work at a reasonably large (~5-7000 total employees) company that had a top-down Agile Mandate imposed about a year ago. It’s worked reasonably well, honestly, but there was a lot of chafing initially, and there’s still some resistance. Problems with the process are occasionally solved by abandoning it entirely, with mixed results.


The thing to be careful of is that a lot of developers also don't like certain parts of agile, and those don't get used. They may have a preference to continue to use long cycle approaches (code reviews) where a shorter cycle approach is now necessary (pair programming). The end result is they pick and choose the bits they want and end up failing to ever do the process even once, not because its impossible but because it isn't their preference. They didn't do it out of knowledge, infact they failed to see the interplay in the processes working together and how the entire thing feeds together to produce the whole.

I think most teams drop agile practices before they have knowledge to show they aren't appropriate, they usually never get used at all. They adopt what they have to because they don't really want to do it at all because they consider a large chunk of it doesn't work.

Changing the process from a position of knowledge and experience on it is one thing, doing it without that knowledge is the more usual thing and its harmful.


>I actually like vanilla Scrum

Scrum has some really serious flaws:

1) It creates a massive disincentive against refactoring technical debt (refactoring stories essentially have to be 'sold' to the product owner).

2) You end up spending more time than is necessary in too-long meetings. Planning should really be done continuously rather than in biweekly meetings.

3) The idea that you should deliver working software every two weeks is outmoded. You should be aiming to deliver potentially shippable increments continuously.


1 the po is the representative of the customer and cares about the long life of the product. Sounds like a role that should care about the future state of the code/product though will obvs want to understand the cost/value of anything that isn't helping the immediate needs

2 planning can be continuous, just every two weeks you look at what you should focus on next, you can still bring stuff into the sprint along the way if everyone agrees

3 you plan to deliver a bundle of value every two weeks (so you can bite off enough to get stuck into, but not so much that you can head in the wrong direction for long) but you can release as soon as the code is ready, no need to wait until the end of sprint.


>the po is the representative of the customer and cares about the long life of the product.

That does not make them qualified to rank and/or write refactoring stories.

IMHO, they should tell the developers how long to spend on refactoring/tooling (e.g. 30% of their time) and developers should figure out themselves how to spend that time.

That isn't scrum, though.

>planning can be continuous, just every two weeks you look at what you should focus on next

That's saying on the one hand that planning both is and is not continuous.

>you plan to deliver a bundle of value every two weeks

I call this mini waterfall. It's a good thing to shoot for if you were y previously doing releases every 3 months. It's not a good thing to shoot for if you were previously doing daily releases.


Sorry, wasn't clear with the value piece, you deliver (to live/the user) each piece/story when it is ready, but have a grouping of items that you want to improve across he sprint. I.e. This sprint we will improve login with this 8 stories

And fully agree the po won't write the refactoring stories, but anyone can write stories. I'm not that technical but I've never worked somewhere where the team wasn't able to talk about the value of tech debt etc and help me understand the value of bringing them in.


>I'm not that technical but I've never worked somewhere where the team wasn't able to talk about the value of tech debt etc

They can talk about it, but under scrum it has to be sold to the PO to get it prioritized. I've worked with plenty of dev teams that could talk but couldn't sell.

And it's the hardest kind of thing to sell, because the benefits are diffuse, abstract and usually long term, whereas feature stories are the exact opposite.

I've seen this whole sales pitch/pushback process fail in lots of places. Techie explains problem to PO in techie terms -> PO's eyes glaze over while they nod their head and agree that this stuff is important -> story keeps getting pushed down the backlog in favor of stories that have a concrete dollar value attached. -> quality suffers as a result.


True, however I'd say this is a problem with having an incompetent person in charge, not a problem with the process. I've had the experience you describe but also the opposite experience where people understood the need to rework things and what the business impact of not doing it will be. What makes a difference are 2 things:

1. The person making a decision like "should we do refactoring" should not be incompetent. They should be technically great and also in tune with the company's business needs. I know some smaller companies have non-technical people in all non-dev roles, so it's either the devs who do the work deciding or a non-technical person deciding, but that is just stupidity, at the very least the guy who is the boss of the development team should be a development guy. I seriously doubt that at for example Microsoft or Google, a non-technical person makes this type of decision.

2. The incentive system should not be messed up. Especially at companies with multiple levels of traditional managers, you have problems like people treating their job almost like a game, where they try to make their numbers good at the end of the year or avoid ever telling their bosses something their bosses don't want to hear... They completely lose alignment with the company's interests and treat their job like a game of looking good to their boss, so even if they understand the need for something they might say no to avoid missing a deadline they told their boss they would hit etc... This doesn't really happen at SD companies because most of them are new and never developed this type of culture but it happens at companies that are in another field and just have a SD department

I also don't think the solution of "30% of time" is good. Sometimes you need more, sometimes less, sometimes it's more important, sometimes less, sometimes more urgent, sometimes less. I still think you should "sell" refactoring to your boss, but the "boss" at a level where "should we refactor" decisions are being made should be an extremely technical guy who also knows how it will affect the business side of the project.


>True, however I'd say this is a problem with having an incompetent person in charge, not a problem with the process.

No, it's a process problem. Devs can't directly assess the relative importance of setting up a CI server compared to the new login workflow. If they could, there wouldn't be any need for a PO. POs probably don't grasp exactly how important setting up a CI server is. And why should they?

>The person making a decision like "should we do refactoring" should not be incompetent.

That's a given. If they're incompetent, no matter what process you give them they will inevitably just make things worse.

>I also don't think the solution of "30% of time" is good. Sometimes you need more, sometimes less, sometimes it's more important, sometimes less, sometimes more urgent, sometimes less.

Yeah, sometimes more, sometimes less depending upon how much pressure customers are putting on you, if the trade show is next week, if it's a quiet week, etc. IMHO PO should choose the % each sprint and devs should choose what goes in it.

>I still think you should "sell" refactoring to your boss

That's tantamount to saying you don't want it to get done, because devs are typically shitty salespeople. Also: do you really care whether module B is decoupled from module A or a new CI server is set up? Why not just say "spend 30% of your time this sprint on code quality improvements" and leave it at that?

At most, the devs should sell the % of time they want each sprint. Honestly though, I'd be happy to let that be 100% at the PO's discretion. Just don't make me try to explain to a non-techie why it's important that I need to refactor some tests.


I think what you don't understand in my post is that I am saying POs should grasp those things.

I just don't see the reasoning behind hiring someone who is non-technical for such a position.

And the answer to "why should they" is precisely because they can then understand the development side better and these types of problems are avoided. It allows them to make more informed decisions. Basically, why should they not?


That’s a list of poor engineer attributes, which need to be addressed via conversations. Not impose a process in the hope that’ll fix them.


The process is a tool you use to address them. You might have worked with more mature engineering organizations than I have and with people that are more professional.

But I've worked with guys who spent most of the time surfing the web or were really territorial with their code. Or teams that were just shitty at communicating with each other so you had frequent misunderstandings or blocking. Or people who said "Yeah, this will be done in a week" and then after one week they say one more week etc.

Some are personal issues that should probably be handled by a boss and some are just shitty engineering practice that could be fixed by conversations (provided someone actually knows good engineering practices). But that also requires people not to get defensive and say that we have always done it this way and it works or become angry because they think you are calling them out.

Instead agreeing about things like these:

1. The work we do is agreed upon by all and is visible on a board or website.

2. Every day in the morning we chat for 15 minutes about how things are going and if we need help.

will fix some of them in my experience and the angry people can whine about the process for a while instead of directing that anger at team mates.


Fair response - my assertions were a bit extreme :-).

You can use process to force change, but, personally, I think a strong manager/leader would aim to resolve these issues irrespective of the process. Also, and I think this is why so many complain about agile, is that it is used to change these types of behaviour and is then seen as ‘the bad _guy_’.

My personal view is that the process should be aligned with your business, not as a tool to fix people challenges.

The 15 min daily catchup is invaluable irrespective of your overall process.

Easier said than done though :).

Happy to talk further and learn from your experiences. Thanks.


> Sometimes some developers feel that they should probably rewrite X or add Y and does so without consulting anyone first.

To be fair, project managers often decide to keep using X or leave out Y without consulting anyone first.

Also, to be fair, project managers are rarely organized or explicit about where the project is and where it should be with respect to cross pollination. If they tracked their goals there like they did other things, you'd see some developers taking this style of project under their wing.

That being said, my experience largely matches yours. Though I find the success rate in setting up a closed feedback loop (actually demoing for the actual people that should be happy with the actually deployed feature) is much lower than people notice, so I'm not sure agile is as technically useful as it seems. It's politically useful, for sure. You can say "Working on the wrong thing? I gave Henderson eight demos as work progressed this fall!"


The developer should consult not just manager, but also (or primary) other developers. Unless you are working in isolated silos (which is fine), every developer should coordinate with others.


And, some of the best products ever created were written without agile. How did we ever manage. I don't like it when people tell an engineer they're wasting the company time because they implemented something no one asked for. Usually, the customer or client needed that and didn't realize it. And, it bites them in the ass later if they don't.


Sure, I'm not saying it is the only methodology to follow or even the best. I'm saying that in my experience it has been a good tool to fix issues like that.

And sure you sometimes know that certain things need to be implemented but it should not be done without anyone else knowing it. At least it should be known and agreed upon with the team and then discussed with or made visible for the product owner/PM/whatever role.


> The agile manifesto was in fact drafted by software developers

Really? When I look at the list of authors of the Agile Manifesto, I recognize several names as belonging to people who have made a career out of coaching and advising. Several of those people made their careers by bragging about their involvement in a catastrophic failure.

I mean, they're probably all better software developers than I am. But I think that sytelus's description seems to be right on, at least for many of the Agile Manifesto authors.


You can't argue that there hasn't arisen an entire industry of snake oil salesmen whose sole purpose is pushing Agile, and Scrum, and whatever.


To me the key differentiator in agile approaches is whether it's business-led or developer-led. If developers can decide on what gets done and when, then agile can work quite well, but to me that's just a pipe dream in most cases. Unless a company's sole business is software, and the financial health of a company is strong, developer-led agile is a hard sell for business owners, even if it leads to long term benefits. So what happens instead is business-led agile which in my experience is worse than waterfall, as you get constant demands for poorly defined new features, with tight deadlines as that's being 'agile'.

In other words, agile has just become a stick for companies to beat their developers with. That wasn't the original intention, but I would suggest that's at least part of the reason why management types like the term 'agile' so much.


Developer led as in you give me some requirements and a deadline and then get out of my way and let me decide how i will break down my task and coordinate with other team members? Give me waterfall please! :)


Interesting. What issues have you had with developer-led agile?


That it’s not really developper led and is just another form of micromanagement. A developer led way of development would do away with sprints if it suited the purpose. It would prioritize requirements over stories if it suited the purpose. It gets even more frustrating when you have to start to work a certain way with scrum (eg frequent commits, vertical development, etc).


Waterfall was also drafted by software developers, who noticed that many of the least tractable errors had their roots in poorly-specified requirements and poor design. It was a first pass at a problem that is still with us.


There's working with agility and there's "Agile." One is a product one is not.


Something like Scrum springing up is completely predictable though


Well, let's see:

Extreme Programming (XP): created by Ron Jeffries, Kent Beck and Ward Cunningham - all developers.

The Agile Manifesto: written by seventeen developers (http://agilemanifesto.org/).

Scrum: created by two of the seventeen above.


I would distinguish between agile as conceived and agile as sold. Agile itself was very simple and limited as a manifesto, arguably trivial and obvious.


It was definitely not obvious at the time. Those people spent years experimenting with alternatives to the status quo before they could even really articulate the common direction.

And I'd say it still isn't trivial given the number of places that fall short of the vision as expressed in the manifesto's values and principles.

I would agree, though, that things have changed as it has been sold. That was much less about what programmers wanted to happen, and much more about what managers were willing to buy from consultants.


>Agile itself was very simple and limited as a manifesto, arguably trivial and obvious.

It's mostly just vague. Moreover, "Individuals and interactions over processes and tools" is, IMHO, wrong, and has been used to justify de-prioritizing tooling improvements on the teams I've worked on (e.g. automated testing, BDD).

The interpretation was, I think, defensible, but the outcome wasn't. Human interaction is nice but it doesn't scale.

I think a large part of Agile's popularity is due to its vagueness. A bit like religion, people just assign their own meaning to it.


I was too young on my career at the time to know how much agile was trivial and obvious when it appeared, it sounds more like a Columbus' egg but I'd appreciate if anyone can give me sources on how obvious agile was before the manifesto was released.


For anyone else who hadn't heard this phrase before: https://en.wikipedia.org/wiki/Egg_of_Columbus

Thanks for introducing me to it :)


It's very much dependent on the tech, at the time most tech was languages that were used were slow and error prone to work with, requiring large teams and long timeframes to deliver systems - and upfront planning was highly important.

The people who created Agile were working with languages such as smalltalk that simply allowed you to create more functionality faster - which enabled Agile. For smart, experienced people working with tooling that allowed small teams to produce whole systems fast enough that business feedback was useful, Agile could be called obvious. However to the majority of the industry at the time, struggling with hugely complex and slow compiling languages with a large time cost per feature, Agile was not obvious - it was impossible. And that was about 99% of the industry at the time Agile evolved.

It was good times - I was creating entire systems as a one or two person team, which the competition would have taken 5-10 times longer to deliver.

The industry wide tooling has generally caught up though enabling the possibility of widespread Agile. However few people do it that well from the dozens of companies I've seen the inner workings of.

Another important point that just doesn't seem to be commonly discussed is that Agile works in the context of highly experienced developers, but has now been attempted by the wide majority. All the signatories that I'm aware of were career developers with decades of experience, and it worked for them. Most of the dysfunctional agile environments I've seen have come from lack of experience and the perspective it brings, combined with the empowering attitude that agile brings - they don't know what they don't know.

It's like Jazz improvisation in that the difference between mastery and cacaphony is hard to understand for beginners - and basically impossible to master without really a lot of experience.

And the reality is many/majority of developers are actually beginners!

Consider the huge range of skills required (language, libraries, os, networking, patterns & techniques, industry advancements, then general professional skills such as organisation and communication and time management, then economic understanding to apply these to the business domain etc, the list goes on and on). It basically takes most people 5-10 years to actually grasp the skillset, and then double that again to master it.

Combine this with the growth of the IT industry which means greater numbers joined recently and fewer numbers of more experienced people started decades ago, even if they are still working. Overall the ratios are terrible with the majority of people not having the level of mastery and perspective to deliver on the potential of Agile - so they are probably better off with more up front planning!

But the voices of the crowd are deafening these days.


Thanks for the thorough description, I couldn't agree more with agile working better with senior engineers. After about 12 years in the industry I can definitely see how much I lacked on my skillset for the first 5 years to be able to understand and apply agile efficiently...

On the topic about the growth of IT and training, I haven't seen much talk about a team structure closer to what NASA does with each engineer having a mentor. No company I've worked so far had that as a process, it happened organically sometimes but I think what hinders a lot of young professionals is finding someone who will make them learn faster. Personally I only had that feeling once and it was definitely the best 2 years of development in my career, would love to work more at companies which have something like this in place for engineers.


That's my point: you can't do as the original poster suggests ("look up the history of originator of this process"), since those are often developers.


Precisely.


I find it hard to take Ron Jeffries seriously after his failed attempt to write a Sudoku solver:

https://news.ycombinator.com/item?id=3033446


The one major thing I continue to love about extreme programming is it contains a solid list of practices that you can implement along with an understanding of why they work together. The issue I have with the agile manifesto is that it fails to acknowledge that changing away from that without solid experience of it usually means making that decision for the wrong reason. The agile manifesto's great flaw I think is that it assumes it experience in these types of processes and the sort of practices that underpin these principlies, without that experience it is very hard to adopt them.


What about Alex Cockburn's Crystal Clear Methodology?


Thanks to dang, we know exactly where the waterfall model came from:

https://www.cs.umd.edu/class/spring2003/cmsc838p/Process/wat...

http://www.craiglarman.com/wiki/downloads/misc/history-of-it...

It starts with a brilliant writeup on software process that shows waterfall as an example of what not to do. That document recommends iterative practices. Then, it got twisted into the waterfall model that was applied everywhere. The OP's comparisons to religion are quite warranted here.


> Once in a while, these folks bump in to terrible projects and whatever they prescribed sometime works like a charm

Not always true. For example Extreme Programming actually originated from an effort to save a large software system in trouble (a payroll management system for Chrysler). But in this case the prescription didn't work and the project was never completed.

It is pretty impressive to be able to sell a methodology on this background.


I read that the main selling point of XP is "a group of highly skilled people doing their thing"

Which only works as long as you got highly skilled people to start with.


Which only works as long as you got highly skilled people to start with.

Moreover, I would argue that almost anything you put down on paper as the development process can work if you've got an interested team of skilled people. Such a team will naturally adapt and adjust until they've got something effective, if necessary to the point that the original on-paper idea has all but disappeared if it wasn't helping. That's also essentially the first point of the original Agile Manifesto, though of course it's been happening since long before anyone ever wrote it down and gave it a name.


You're not wrong, but all those software methodologies aren't meant for the teams of very good developers, because they don't need them, but for the large majority of mediocre programmers who need to be herded.


Right, so the effectiveness of any particular methodology when applied by a team of very good developers isn't particularly useful information. What would be more useful is knowing whether the same methodology brings significantly better results when adopted by a team of average developers when compared to whatever they were doing before.

I'm agreeing with k__ here.


It's not so black and white like that. You could have very good developers on a team with a mediocre "scrum master" or manager, who could conceivably become less productive because of it, despite best efforts to make it work. You can disagree, but I've seen it first-hand.


A bad manager can typically do far more damage than any individual member of a team, but IME it's unlikely that people who are good are going to stick around for long if they're being managed by a moron, whatever that moron's oh-so-trendy job title may be. A team of developers good enough to figure out a working process for any given job without management holding their hands has plenty of better options.

That aside, surely the more interesting scenario is still the reverse of the one you described: can good management leading average developers get better results from those developers by adopting certain working practices?


I think the problem is if you got a mixed bag.

part of the team needs it, the rest is going crazy because of it...


Yes, precisely, and the people who buy into it and force their organizations to adopt the latest fad, DON'T WRITE SOFTWARE. I'm so fucking tired of managers trying to play chess with teams when he has never really dealt with a software problem. I really think all these methodologies are ways for non-programmers to CONTROl programmers. In the near future, I think programming will be required for any software company employee, because compared to writing competent software, whatever the fuck management is doing will eventually be some form of automated reporting/dynamic to-do list.


Test driven development is about the only methodology that has worked for me. Agile, etc has been useless, at least at the gigs I've worked.


it is about interactions within the team, as about how team interacts within, author pointed to article about this:

https://rework.withgoogle.com/blog/five-keys-to-a-successful...

meaning that process doodads are ok but you have to focus on interaction.


I've been trying to find good material on software development in an enterprise setting in the 'real world' not the magical world of unicorns and pixies you nicely described.

If anyone knows any good sources shout out.


No the Waterfall model and BS 5750/ ISO9000 both originated in traditional engineering - back in the day I actually worked on research to apply BS5750 to software development.


What the parent means is: Can you point to any other (faddish) methodology that didn't come about in that way? Also, waterfall was provided in the original paper as a minimally-viable methodology of software development which was specifically recommended against. A kind of "If it comes down to using waterfall or using nothing, I guess use waterfall" type of thing.


ask the USA and UK MotorBike and Car industry about the "faddish" methodology the Japanese companies used to hand them their ass


But we're not talking about "the USA and UK MotorBike and Car industry" now are we? Or, you know, really anything but software development methodologies?


Actually, I'd say the statistical methods used by the Japanese (mostly to zero in on sub-par team members by shuffling them through teams and measuring the results) do have some similarity to test driven development, and even the sort of frequent (rough) measurement that Agile allows.




Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: