Agile, Unit tests and rapid release cycle is pure evil.

69    07 Jul 2016 21:00 by u/roznak

I know that I won't be popular but someone has to stand up to this madness.

I see more and more code projects fail and code deteriorate in releases that 10 years ago would even fail to be called alpha. We are at a point where people are so used to crappy development that it became the norm.

People have forgotten what good code looks like. Developers have forgotten how to develop great programs. All we see now is crappy programs with a shiny graphical interface that has these cool effects.

Agile, Unit tests, rapid release cycle is over-hyped as some miracle solution. But when I look at the projects being developed then they become one giant monolith and developers and managers become scared to develop something new because it will break 10,000 unit tests so they won't even do it. And now you get a pile of on top code layers that makes the code one giant failure.

No one dares to tackle the problem and fix it in the core.

And the other side byproduct is that you force the users in a rat race to upgrade their machines every couple of years. Your costs spiral out of control and it brings big projects to a halt in about 3-5 years.

I became a developer because it is hard to find solutions that never existed before. To innovate and create stuff that everybody says that it can't be done. Not to be a scared developer afraid to modify a line of code and accept bad programs as inevitable.

"BRING BACK GOOD PROGRAMS!"

47 comments

29

Something I noticed about your post was that it offered zero alternatives to any of the problems you described. If all you want to do is rant, then ignore the rest of this comment because it won't be relevant.

Agile methodologies are really centered around one idea: figure out exactly what problem(s) you are trying to solve before you begin writing code. Yes, many people go nuts with the whole process to the point of creating jobs out of the concept. However, I've seen projects without it (and unit tests) fail horrendously. Some with those fail too, which means they don't seem to be the problem.

Unit tests are just having an objective way to test functionality. I've worked at places that fought against unit testing and invariably someone changes some core functionality because it was written terribly. It was written terribly because that's how the lead developer learned how to do things 10 years prior. Things break across the board, people get mad because the person who changed the code didn't test everything. If I spent the time to test every endpoint in an API more than half of my day would be consumed with testing. So of course I layer my voice with sarcasm when I say, "Gee, if only there were some way to AUTOMATE checking if this change broke things. You know? Like, it could TEST it all for us. Even go through each method, or UNIT, of the application. Golly, that would sure be helpful!"

After the angry looks come my way I just tell them this is the exact kind of problem unit testing is meant to prevent. You don't need absolute code coverage, but it can be highly effective to cover the core components. And tests failing are not a bad thing, pushing out code that broke the tests is. No one gets it right the first time, and if your developers are too afraid to do anything because it breaks a test then the problem is with the culture/environment.

As for rapid release, if it all works then there should be no problems when or how often a release comes. Again, all the things you are bringing up sound like people problems, not methodology problems.

0

... Metier?

0

I don't get it.

0

Sorry with the name and writing style I thought you were an old coworker of mine

0

Oh, no worries but nope.

0

Now that I think about it, the coworker sounds like an intelligent and handsome chap that I'd like to meet.

10

Couldn't have said it better. In my experience with Agile, I have had great managers who actually use it to push back against their managers. Agile is there to work for us as developers, not to be a yoke. We say what we can fit into a sprint and if some change they want isn't in the scope of that story, it is out. Scope creep is one of the worst things about developing software as the people who aren't working on it everyday come up with new little ideas and tweaks that sometimes aren't simple to implement. This causes delays in deliverables which makes you and your team look bad. It causes delays in features which make the company look bad. It is just a mess. Agile helps with this.

"While you are in there can you do ..." "NO". Agile allows us as developers to say "that 'small change' will take 2 of us 3 weeks to change and test" and then management can decide if that small change is worth the cost of 2 developer salaries for nearly a month.

Agile done right is an amazing tool that we as developers can use to push back on stupid timelines and features. It is all about setting expectations in my eyes.

To be fair though I haven't been exposed to agile done poorly. I could see it being a disaster, but that is like a poorly written program; it is just bad implementation.

2

That is another good reason to use Agile, but like you pointed out it comes down to good people doing it right.

1

Yeah, that's the thing left out of OP's rant, the PM side of development. I would LOVE a better solution than agile to track and task my devs in a rapid iterative environment. Scope creep happens on the best projects and long term goals are refined and granularly designed, and the best you can do as estimate those impacts and then cross the bridge when it comes. Most of OP's complaint should like bad PM on the projects, poorly defined tasks and deliverables, and no serious backlog.

0

Bravo!

19

Developers have forgotten how to develop great programs

Don't blame the developers. I have been programming for about 20 years, and the problem is with the demands of management. Most developers I have worked with only develop bad code because of time constraints and other processes put in place by their managers. Most of them are as disgusted by it, if not more-so than you.

2

I've worked with a lot of these managers that think up a New Top Priority every other day and it's enough to make anyone go crazy. It's even better when you ask them to detail their ideas and they blow you off like they don't have time to think on a "micro level." I would love to know what they learned while getting their MBA's.

2

Agile is what makes this possible. "Planning? That's not Agile!" "Thinking requirements ahead of time? That's not Agile!"

So you get stakeholders handwaving their requirements "Yeah, I wanna do xyz with a computer" with absolutely no thought to the process of what xyz should be. You can't plan timelines on that, so of course it's wrong and management does what management does and starts demanding 60+ hour work weeks with weekends. Overworked death-marches aren't Agile, either, but that part is conveniently ignored.

16

Developers have forgotten how to develop great programs. All we see now is crappy programs with a shiny graphical interface that has these cool effects.

Consider this alternative interpretation: sales/product have realized that you can make mad bank selling cheaply and crappily made programs as long as they have slick UIs with flashy effects. That style over substance ('Murica, Fuck yeah) is a thing in this product space.

Because as it turns out, most end users generally don't give a flying fuck about how elegant or well factored the underlying 3/4GL codebase is.

And before people start whining about the prioritization of running the business over craftsmanship or technical excellence... Where the hell do you think your project funding/budgets come from?

3

You need more upvoats, because this is it, baby.

3

The problem is that that's incredibly myopic. It's obviously not just about elegance but about functionality. It's not a matter of having a shiny underlying codebase, but robust functionality under that shiny UI layer. People do care about these things but it's more of a longrun issue. We might need to adjust the saying to fool me once.. twice.. 800 times.. shame on you, fool me 801 times - shame on me. I think Windows 10 is a perfect example here. Microsoft began releasing operating systems purely as an iterative means of revenue generation with some major shiny-layer-changes but less and less difference under the hood. By the time they got to Windows 10, they literally could not even get people to install it when it was digitally delivered and free.

And we can see this in nearly every industry. I think the video game industry is a great example here since games have gone from an art to a factory-line level production of focus group iterated mush. The biggest console today is the PS4. It's sold about 40 million units. The PS2, more than a decade earlier, had sold about 50 million units at this time in its life to a much smaller population, and the relative decline there is rapidly increasing. The population part is even more telling. Our population in the US alone since 2000 has increased by nearly 40,000,000 or about 13%. That rapid population growth should be reflected in correspondingly record sales figures for everything, even if they were just breaking even. But we're not seeing that - the case with video games is typical where we're actually seeing many industries in decline. Account for population growth and they're in precipitous decline.

The reason this annoys me so much is because management are supposed to be the longview people. But shareholder syndrome has destroyed this. Shareholders don't care about companies - they care about profit, short term profit. And this interest filters immediately onto the executives and down to management which is completely bastardizing so many industries into timebombs of failure. But immense barriers to competition means even in their decline it's difficult to compete against these sort of companies meaning we see ubiquitous shit everywhere even as it leads to the decline of the peddlers.

3

Agreed, end-users do care about these things, but ultimately don't have the coding knowledge to actually request things that make sense. They see (and vaguely understand) the UI, so if something's wrong, they ask the devs to improve the UI.

Also, it's probably best not to bring up consoles in the discussion of video game development. Except perhaps as an example of how a dying business model clinging to locked hardware can hold back an entire industry.

1

My concern if not the crappy consumer apps.

My concern that this crappy code is entering critical systems like industrial complexes, medical machinery, self driving cars, machines that processes food. We are at a time where deteriorated code can actually kill people.

8

You're looking at this from the wrong angle - Agile, unit tests and rapid release cycle is actually fantastic. . . . For purely the front end system. As far as graphics and UX goes, agile is king. Small, fast, incremental change is king. But that doesn't help you build a backend, and basically no company I've worked for (or seen, recently, really) wants to acknowledge the glaring issue with never nailing down your product requirements when you're building the backend of your system. But it's like building a house with an uneven foundation - It's going to be lopsided at best, and it'll collapse later (probably with tragic timing) at worst.

15

Sales: "We need you to write this super awesome bubbly application that will do absolutely everything the client wants it to do!"

Programmer: "Okay, what does the client want?"

Sales: "We don't know yet!"

Programmer: "...Okay. Can you get back to us when you know what they want?"

Sales: "Yeah, but we need something to show them first!"

Programmer: "Okay, I guess I'll start working on the UI then"

*6 months later*

Programmer: "Okay, I think I'm done with the UI."

Sales: "This UI looks fantastic! The customer loves it!"

Programmer: "Great! Do you know what they want yet?"

Sales: "Nope, still no clue! And the project is due tomorrow!"

Programmer: "..."

6

Exactly. Agile grew out of 'extreme programming' which grew out of rapid prototyping, which grew out of the observation that usually when you start a software project, you don't know what the hell you're doing. The best way to build a great product is to get hacking, and iterate on what you've got until it becomes awesome. Agile is basically a formalization of this, and it's great for what it's great for.

However, it's a terrible way to build a system when you know from the start what you're building. It's also a terrible (or at least, very expensive) way to build things that aren't just pure software. Like any methodology, it's terrible for the things it's terrible at, and shouldn't be seen as some panacea.

Sadly, in recent years Agile development is seen as the hammer to use for all development nails, and worse, it's been used in half-baked half-arsed implementations by thousands of teams that call what they're doing 'Agile' but are actually just doing shitty programming.

As an aside, though - unit tests (and automated testing in general) is (IMO) the single greatest thing to come out of the software development world in the past decade. It seems like a lot of wasted time and overhead when you start out, but if you expect your software to ever exist beyond version 1.0, it's a small price to pay for free regression testing forever. You know how software gets exponentially harder to maintain as it ages? Automated testing is the way to fix that.

3

never nailing down your product requirements when you're building the backend of your system.

Hi I've been trying to get a team to do this for seven months now. They want me to write documentation for their backend. They want me to produce tooling for other developers against the backend. They want me to help other developers use the backend. They don't have an API, documentation, a contract, or even a codified design for the backend.

Now, I just agree that it is a good idea to do the things they want me to do, and say that I'll be able to give them a delivery date, as soon as they publish their documentation.

But this isn't really related to the OP, because there is no methodology on this team, least of all agile.

Your comment just hit close to home and I wanted to vent.

7

I know that I won't be popular

Actually, it seems a lot of devs are finally willing to admit that Agile has just as many problems as any other development process, but they were scared to speak up before now because management treats it like the cure to all that ails the world of software.

7

Absolutely. Agile methods are the curse of modern business. In the right place they can be useful, but when large-scale mission-critical systems are being developed using agile methods something is severely wrong.

4

Humans faced with overwhelming complexity turn to fads.

0

*** Waves to the Brexit voters. ***

4

this is why hipsters shouldn't be coders..

1

this is why hipsters shouldn't be coders..

I have to remember this one :-)

3

RRC, regardless of your project management cycle, is one of those nasty things where everyone (developers, customers, middlemen) throw up their hands and whine but the code is so BAD!. Then, they give the most money to the shop releasing the fastest. In the (quite large) market segment my company plays in the consistent winners year over year aren't the writers of quality code at all, they're the releasers of new features. The same customers that scream about being beta testers this quarter will be bragging about the sweet new features their product has next quarter, while the "quality first" guys haven't even finished a release cycle yet.

Do I agree with this? I'm a technologist with a business degree, so maybe I'm just part of the problem, but whether I, you, or anyone else "agrees" with the philosophy of rapid release (vs longer, higher-quality, better-tested and stable release) -- RRC is what pays the bills.

3

While we're ranting the eternal beta needs to go away. It has become a transparent excuse to push bad code. Beta should be for a per-program SMALL user test set for almost-ready software that was feature frozen before this. Beta should have a planned and published beginning and end. When the beta is over the program needs to be shitcanned or patched and published in a clearly demarcated release format.

And the fact that people are stupid enough to pay for beta software does not excuse this.

2

How do you feel about making "nightly" or "snapshot" builds publicly available?

Often times, the general public provides a much larger-than-otherwise-feasible user base who is willing to explore real user flows for free.

2

I don't have a problem with that until it reaches a certain point in the ecosystem. If users are being forced to download your snapshot because it's the only way to support Company Z's API and they're using it on a production system, things have gone way too far. In my opinion the right thing to do in that case is to rush a separate module to release-ready status.

2

100% agree woth you. I basically only go to meetings to browse the net and text people. When asked something I typically say "I already developed that." "I am already working on that." or "Me and name are working on that." And I am left alone even if I am not.

2

I have 30 years of software development experience. I've worked on projects using Waterfall that were resounding successes. I've also seen abysmal failures from Waterfall. I've also seen quick success from Agile and abysmal failures as well. The successful Waterfall projects, the customer knew exactly what they wanted, they were willing to pay extra for quality and management was stable. Agile is perfect when you don't know exactly what you want, and you're wanting to rapid prototype. Maybe develop a minimum viable product. The problem is that once it looks good, everyone who's not a programmer assumes it's finished and becomes unwilling to invest in reengineering the asset for long term maintenance. All the shortcuts, and bad practice compound upon themselves till it reaches some maximum sustainable size based on the entropy in the code base. The later maintainers of the system are now in a pickle. Clear separation of concerns were most likely not followed and now the monolith becomes the beast that must be fed.

The real issue I have with Agile is not the method itself but that all too often management uses it as an excuse to cover it's own lack of management. "I don't have to do all that planning and crap--We're AGILE!!!" This inevitably leads to tribal worship of aforementioned monolith. Agile is not an excuse for lack of management.

2

I have 30 years of software development experience.

You basically invented the design patterns that are no in use but they remodeled in such a way that they became evil.

It is always funny that most young developers >10 years of experience thinks in absolutes.

  • Either Waterfall or Agile, they have no concept of in between.
  • Either design patterns or total chaos they have no concept of in between.
  • Either all services or all local they have no concept of in between.
  • Either top don or bottom up they have no concept of in between.

The real issue I have with Agile is not the method itself but that all too often management uses it as an excuse to cover it's own lack of management.

Exactly, or we know it is buggy but we will ship it anyway and fix it later (than never happens)

Clear separation of concerns were most likely not followed and now the monolith becomes the beast that must be fed.

Interesting wording but so true. It actually describes the real situation I experience. Without Agile I was 90% productive, then came rapid release cycles and I became 30% productive. Nowadays it is agile and I became 10% productive. 90% of my time is wasted to fix stuff that I could have fixed months ago by changing a couple of lines.

1

I hate agile since in best case it's ScrumBut but more commonly it's anarchy.

1

Sorry man, but the guys with the money figured out it really pays to be a first-mover and agile delivers... something... quickly so it will be popular for a while still to come.

Do you find yourself in a non-first mover market? Then you may have succumbed to industrial espionage in the form of culture poisoning. Make your opponent think an ineffective strategy is desirable, and you won't have to work too hard to defeat him.

1

Like any methodology, when used properly by good people, Agile is a fine way to do things. The problem is shitty management and shitty team leadership, which you get in 90% of places because Sturgeon's Law.

Don't throw the baby out with the bathwater, though. Automated testing (including unit tests) is fantastic and is absolutely indispensable for working with a large codebase. Unit testing lets you change code without causing regressions and (if your tests are any good) with some degree of confidence in your changes from the moment they pass the tests. If you're afraid to change things or add things because it'll break a bunch of tests, that means your codebase is fragile and you need to refactor it into something less scary and spaghetti-like.

0

The problem you describe doesn't seem to be caused by Agile but a symptom of poor architecture. In general, I'm opposed to monolithic applications and prefer a micro services approach.

0

Kids get off my lawn.

0

Are you sure you didn't become a developer because you randomly chose to study computer science in college?

1

I actually did not want to choose computer science, but my hobby became my profession by shear accident. I did not find a job and there was this tiny 3 man company that needed someone. And I was not supposed to be a main developer just a code monkey. They had a civil engineer just for that. But he left, and someone had to take it over and so it all started.

0

What did you study in college?

1

Robotics, electromechanical processing. No where near what I have been doing for ages.

0

You have a Bachelor's degree in Robotics and Electromechancial Processing? Wow, I've never heard of that degree being offered.

1

No the robotics was a special year before the bachelor degree into electronics specialized in microprocessors.

Wow, I've never heard of that degree being offered.

That is because I was at the beginning at the robotics age and PC age. Yes I am that old!

And the fun part of all this, I turned full circle, I think the next decade I will be part of the next gen robotics revolution.