Slashdot Mirror


Ask Slashdot: How Would You Stop The Deployment Of Unapproved Code Changes?

Over a million lines of code -- in existence for over 10 years -- gets updates in six-week "sprints" using source control and bug-tracking systems. But now an anonymous reader writes: In theory users report bugs, the developers "fix" the bugs, the users test and accept the fix, and finally the "fix" gets released to production as part of a larger change-set. In practice, the bug is reported, the developers implement "a fix", no one else tests it (except for the developer(s) ), and the "fix" gets released with the larger code change set, to production.

We (the developers) don't want to release "fixes" that users haven't accepted, but the code changes often include changes at all levels of the stack (database, DOAs, Business Rules, Webservices and multiple front-ends). Multiple code changes could be occurring in the same areas of code by different developers at the same time, making merges of branches very complex and error prone. Many fingers are in the same pie. Our team size, structure and locations prevent having a single gatekeeper for code check-ins... What tools and procedures do you use to prevent un-approved fixes from being deployed to production as part of the larger code change sets?

Fixes are included in a test build for users to test and accept -- but what if they never do? Leave your best answers in the comments. How woud you stop un-approved code changes from being deployed?

212 of 324 comments (clear)

  1. permissions by Anonymous Coward · · Score: 5, Informative

    "How woud you stop un-approved code changes from being deployed?"

    Require approval from someone before changes are pushed out.

    1. Re: permissions by Anonymous Coward · · Score: 2, Interesting

      Yes. In addition to 100% unit code coverage and integration tests.

    2. Re: permissions by Anonymous Coward · · Score: 4, Insightful

      That doesn't work. I manage devs on five different continents, and my boss always wins. There is no way to beat bad management.

    3. Re: permissions by ooloorie · · Score: 3, Insightful

      Yes, or even more. How many people do you think usually look at each line of text or each line of music before it gets published? And there, the stakes are usually considerably lower than for code.

    4. Re: permissions by Anonymous Coward · · Score: 1

      Found the Apple programmer responsible for GotoFail. Fucking Apple, can't even afford a developer to check/verify.

      j/k, I don't believe that was unintentional or by accident at all.

    5. Re: permissions by Anonymous Coward · · Score: 1

      This. We have devs in the US and in South America, Eastern Europe, NA, and Asia. That doesn't stop my boss from merging bad codel

    6. Re: permissions by Anonymous Coward · · Score: 4, Insightful

      I had a boss that gave me some really good advice 15 years ago when I was getting chewed out by the owner (which was his boss), "get a backbone". If your boss is constantly reaching around you to your workers, they don't respect you and you should be fired for sucking or you leave because they're doing it wrong.

      If YOU are managing them, it's your job, not your boss's. Take responsibility or take off.

    7. Re: permissions by Anonymous Coward · · Score: 1

      What shit repository are you using that it can't be undone?
      Why are the managers merging code instead of the developer?

      Fuck, is the answer always "fire management"?

    8. Re:permissions by Z00L00K · · Score: 1

      The problem described in the article is a lot more complex and comes down to that the system has a bad architecture from the start. However it's easy to make a bad architecture with many of the programming languages and development environments that are around today.

      It's of course easy to say that you should run tests and have good test suites to execute to verify the platform but they only take you to a certain level, never to the level where the usability is validated.

      And how do you verify when the input requirements are bad or ambiguous anyway?

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    9. Re: permissions by vtcodger · · Score: 3, Interesting

      "That doesn't work"

      It doesn't not work. More eyes do tend to catch out and out bugs. But some still slip through. And stuff that sounds good but busts user's workflow still gets through. And developers hate the delay. And more review costs more. And more testing costs even more than more review. So managers aren't a big fan of either.

      I suppose the solution is never to work with millions of lines of code. But "This sucker is way to big and too complicated" is not an easy sell.

      --
      You can't see ANYTHING from a car, You've got to get out of the goddamned contraption and walk...Edward Abbey
    10. Re:permissions by thsths · · Score: 1

      Testing is the key, especially when working with a legacy project. When a bug report is accepted, you first create a test case that fails, and then you fix the bug. That gives you some kind of assurance that you fixed something. And you ship that fix, unless it fails QA at some point.

      Only the bug reporter can find out whether what you fixed also fixed their problem. You can track that - and say the issue is either confirmed fixed, or unconfirmed fixed. That is what bug trackers do. Sometimes it is easiest for the user to just check with the next release.

    11. Re: permissions by K.+S.+Kyosuke · · Score: 1

      there is no way to stop management

      Really? What about a nuclear war? Or are they just like cockroaches?

      --
      Ezekiel 23:20
    12. Re: permissions by arglebargle_xiv · · Score: 1

      so now you have two coders looking at every line of code?

      You really only need one, as long as the one is called something like Knuth or Venema.

    13. Re: permissions by Anonymous Coward · · Score: 5, Interesting

      It's an old saying that a doctor who treats himself has fool for a patient and an ass for a physician.

      Yet this is precisely the way many IT shops treat testing.

      One of the biggest problems with this approach is that the developer "knows" where the weak spots are and test them, insofar as the schedule allows any real testing at all. An independent tester is not as prone to this sort of tunnel vision, especially when the tester isn't looking at code, but instead at the way the code works. Which, is after all, what the code is ultimately for.

      A second problem is that characteristics that make a good software tester are not necessarily those of a good software developer. A good tester has to be the sort of meticulous person who can go over items line-by-line over and over again and never take shortcuts. A good developer may be a good developer precisely because he/she can leap around the concepts and tie together seemingly unrelated points.

      Then there's the third problem, which is that contrary to whatever non-Euclidean world Management lives in, you cannot dump the jobs of developer and tester on the same person and rationally expect that they can inflate to handle both requirements optimally, Real employees have limits. Not that that matters when "right-sizing" the corporate personnel assets for the next quarter's executive bonuses.

    14. Re: permissions by sg_oneill · · Score: 2

      This. We have devs in the US and in South America, Eastern Europe, NA, and Asia. That doesn't stop my boss from merging bad codel

      Its the worst. where I work our CEO is a business guy who runs a multi state multi million $ company with large numbers of employees aaaand he likes to code. In fairness, he's actually not a bad coder , coming from a C++ background, but hes rarely over all the issues that the engineers are over, and as a result theres always a background noise of randomness coming into the code from whenever the big boss is bored with money and meetings and all the things rich guys do. And its *strictly* non optional code. If god wants a new screen on the app, and he;s made it, well its in, and we have to stop everything and make the fucking thing work. And he doesnt know our build processes, how we stage things, how issues management works or anything. More likely I get a call at 1am saying "Hey the websites acting up can you have a look at whats going on, and I log into the production server and he's in there with vim boredom progrmaming on the principal production server. Its a nightmare.

      --
      Excuse the Unicode crap in my posts. That's an apostrophe, and slashdot is busted.
    15. Re: permissions by Entrope · · Score: 1

      Yup. Software developers and software testers -- at least if they're both good -- use different skill sets. Technically, testing things before you ship them is a cost center, but most companies do not want to spend the time and money to make practically-defect-free software before testing: It requires that someone who knows what they're doing set up a strong development process, that developers consistently think hard about what they're doing, and that a lot of risks are eliminated or realized before things go out the door; in practice, this means a fairly conservative and slow development process. So if you're not spending money on that kind of process, it is very much worth it to spend money on good testers.

      Unfortunately, companies seldom pay software testers anywhere near the value that a good tester brings to the company. In part, that's because it is very hard to tell who will be a good tester before they start, and bad testers cost more than their direct salaries, because they will send others down rabbit holes. If someone is willing to work as a tester for $X, where's the incentive to pay them $X*2 once they have shown that they are actually worth that much or more?

    16. Re: permissions by zifn4b · · Score: 1

      There is no way to beat bad management.

      Actually, bad management usually beats itself. I've seen plenty of companies go out of business because of bad management not learning from its mistakes. The problem is, when the ship sinks, everyone goes down with it including the narcissistic self-righteous douche bag that thought they were the ultimate shizzle.

      --
      We'll make great pets
    17. Re: permissions by zifn4b · · Score: 1

      I suppose the solution is never to work with millions of lines of code. But "This sucker is way to big and too complicated" is not an easy sell.

      What you're talking about is technical debt. You're talking about code that is such a complicated mess that code reviews can't effectively determine what the side effects might possibly be to simple changes. I would bet this code you are referring to has zero automated tests which might catch some of these side effects. There is no solution to that problem. It's a sinking ship held together by duct tape and rubber bands. It's a ticking time bomb.

      --
      We'll make great pets
    18. Re: permissions by Shoten · · Score: 3, Insightful

      so now you have two coders looking at every line of code?

      Yeah...because this is how it's done when it's done professionally. You have one coder...the guy who wrote the change...and then another coder...the one who tests it.

      This happens in non-code places too, like journalism. One person writes the article, and another proofreads it. (Due to the acceleration of the news cycle, this has been going away...with predictably-bad results.) Consulting? Yes, you have quality control (another person reading and checking the deliverable..every line of it) before it goes to the client. Engineering? One engineer builds the spec, and another has to approve it; this is actually mandated by law for a lot of things, in fact, where permitting is involved (like construction).

      Fundamentally, the question is "how to you keep code from being pushed to the public before it's tested." You seemed to miss that in your reply, because the very point of the question requires two people...people who must understand what their reading (and thus, are coders)...to look at the code. Also, your reply seems to imply that a code change requires reading ALL of the code, not just the new or changed code, and this is simply not true.

      --

      For your security, this post has been encrypted with ROT-13, twice.
    19. Re: permissions by gnasher719 · · Score: 4, Insightful

      This. We have devs in the US and in South America, Eastern Europe, NA, and Asia. That doesn't stop my boss from merging bad codel

      Where I work, when I do a pull request for the develop branch, I _must_ specify a reviewer and a tester, and until the reviewer has marked the code as fine, and the tester has marked it as fine, and a merge can be done with no conflicts, nobody can merge the code, including any boss. You can quite easily set this up in JIRA, for example.

    20. Re: permissions by Brockmire · · Score: 1

      "Going nuclear" is supposed to be a figure of speech.

    21. Re: permissions by FictionPimp · · Score: 1

      I would just get a new job and during the interview process, ask if the owner codes in production at 1am with vi. If they say yes, walk out.

    22. Re: permissions by Pseudonym · · Score: 1

      Knuth might prove it correct but he wouldn't test it.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    23. Re: permissions by LifesABeach · · Score: 1

      Bottom line, someone is hiding information on how code should work. Think Trump and his taxes. But why should anyone optimize themselves to oblivion? There are many fiefdoms that are shrinking today, and there are only so many job openings as greeter at some Walmart. Of course the day is coming when Nigerians will replace Indians; oh boo-hoo.

    24. Re: permissions by rickb928 · · Score: 2

      Before forced reductions in anticipation of product decommissioning, we had a dedicated tester, who had good enough regression testing suites that he caught bugs in most releases. And these were most always forehead slappers, 'darn, I forgot that again!!!' type.

      Moving to the new version, new platform, they solved the testing problem by delaying releases interminably, denying features until forced, then complaining about schedules and arbitrary timelines, as in being forced to release code 8 years late.

      Our web team is magnificent. the usual response to release bugs is 'it didn't do that in test'.

      Let's pause for a moment and re-read that. For full effect. You've gotten the joke, I know.

      And the then 'Is it doing it for (fill in this blank with any criteria)?'.

      Followed closely by retracting the code, re-releasing it, and the same bug occurs. More recriminations and demands for objective reports from users. Yes, as their interface to users, I am regularly questioned as to the veracity of the bug reports.

      This is the Agile process in action. Sort of.

      --
      deleting the extra space after periods so i can stay relevant, yeah.
    25. Re: permissions by rickb928 · · Score: 1

      Every activity you pay for is a cost center. Everything that brings in revenue is a profit center.

      A business is profitable when the profit centers deliver more value than the cost centers, and are able to do so sufficiently to meet the expectations of investors (if any) and sustain either growth or continuity.

      None of this is new, but we do see efforts (not new either) to redefine success in business.

      Feh.

      --
      deleting the extra space after periods so i can stay relevant, yeah.
    26. Re: permissions by rickb928 · · Score: 1

      And without testing, your post introduced a minor bug into the thread.

      Fortunately it is innocuous. Some code is less equal than some other.

      --
      deleting the extra space after periods so i can stay relevant, yeah.
    27. Re:permissions by Z00L00K · · Score: 1

      The description you provide is a very simplified perspective, but the reality is that sometimes the bugs you fix aren't easy to create a simple success/fail test scenario for. This is very common in systems where you have a lot of interdependencies and race conditions. Each piece of the puzzle may work fine but together they create problems one time out of a thousand - and never in a test rig, only in real world platforms.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    28. Re: permissions by rickb928 · · Score: 1

      When I owned a Saab, a splendid care save for the complexity and unfortunate influence of General Motors, my dealer technician was quite proud of the fact that he was trained and proficient in all repairs and maintenance, even transmission service and body work. Many auto techs are proficient in diagnosis, most engine repair, blah blah, but not in body work nor transmission repair. I was impressed.

      Then I had a problem he couldn't figure out - it would stall at a stop, just die, restart fine. After weeks of thinking, diagnosis, blaming fuel, my Google searches found a candidate - and he actually had a used part to swap in and try. Bingo!

      It took me a day to ask two questions:

      1. How was it I found the solution?
      2. How was it he had a spare part laying around to try?

      Answer: He did know the problem, but could not recall it.

      And my coders, bless them, are so damned good they need not test. Right.

      --
      deleting the extra space after periods so i can stay relevant, yeah.
    29. Re: permissions by vtcodger · · Score: 1

      Some of that. But I made quite a good living for several decades back in the 1960s, 1970s, and 1980s integrating large systems. Did some development also, and have some sympathy for developers. Good unit tests help. and so would automated testing. But let's get real. Few actual deployed systems have meaningful specs, and even those that started with specs probably didn't maintain the specs and have bugs in the original specs -- omissions (oh, you wanted the trig functions to be fast as well as accurate? should have said so). bad ideas, good ideas poorly specified, ambiguous equations. (how can equations be ambiguous? The, hands down best spec I ever saw had an equation of the form (A+B)/(C-D). Except that A,B,C,&D were all pretty complicated. But it was written in the spec the way you might write it on a blackboard without the parentheses and got programmed as ((A+B/C) -D -- oopsie) , etc,etc,etc. It all adds up.

      IMHO, most folks grossly underestimate the number of yet to be discovered bugs lurking in virtually all software.

      Which is why they assume that with just one or two more fixes, everything will be fine.

      And is also why patching our way to security very likely will never really work.

      Working with most systems is like trying to keep a 1970 car on the road. It may run fine on good days. It may even get decent gas mileage and not be terribly polluting. My 1979 Mazda GLC got better gas mileage than any of the cars in my driveway today. And it had not only a catalytic converter, but an air pump and EGR and lord knowns what else (The actual hardware was more complex than the shop manual description--a fact I discovered only when trying to reassemble the engine after replacing the head gasket ... This hose from the mysterious gidgie near the wiper motors. Where does it go to?). The emissions numbers weren't bad at all even when compared to much newer cars. But between rust and the unavailability of repair parts, I eventually had to junk it.

      --
      You can't see ANYTHING from a car, You've got to get out of the goddamned contraption and walk...Edward Abbey
    30. Re:permissions by thsths · · Score: 1

      As somebody said, this may be an architecture problem, or maybe a timing problem, not just a simple bug. And you do not change your architecture willy-nilly, in the hope that it fixes the issue. At the very least, you would want some engineering process to underpin any significant changes.

    31. Re: permissions by zifn4b · · Score: 2

      Some of that. But I made quite a good living for several decades back in the 1960s, 1970s, and 1980s integrating large systems. Did some development also, and have some sympathy for developers. Good unit tests help. and so would automated testing. But let's get real. Few actual deployed systems have meaningful specs, and even those that started with specs probably didn't maintain the specs and have bugs in the original specs -- omissions

      Hey I'm an old timer too but you apparently never caught up-to-date. Waterfall doesn't work. Never did. By the time a specification is written, it's already out of date and doesn't reflect what the customer actually wants. Other timers by the names of Ward Cunningham, Kent Beck, Martin Fowler and many others figured this out. Now we have Agile and Xtreme Programming and all of the variants.

      Here let's get real with you. First of all, the software projects of the 60's, 70's and 80's were comparatively minuscule to the projects we're trying to tackle today. Waterfall might have worked partially with much smaller less complex projects but it definitely doesn't hack it today. This is a fact. To dispute this, would be to dispute the large-scale empirical research done by the industry veterans I mentioned above. If you think they're wrong, you should be able to school them and make them look like idiots. Betcha can't.

      --
      We'll make great pets
    32. Re: permissions by Immerman · · Score: 1

      Nope. Sometimes it's "set fire to management".

      --
      --- Most topics have many sides worth arguing, allow me to take one opposite you.
    33. Re:permissions by vtcodger · · Score: 1

      "Only the bug reporter can find out whether what you fixed also fixed their problem. You can track that - and say the issue is either confirmed fixed, or unconfirmed fixed."

      Basically, I agree. But I don't think it's simple at all. Any organization where developers and "stakeholders" aren't in close contact tends to function like an elaborate game of telephone/chinese whispers https://en.wikipedia.org/wiki/.... Written language without feedback is far from a perfect form of communication. For several years I was in charge of testing a very marginal system and ended up doing more of the user liaison than I (or anybody else) really wanted me to do. I used to call the author of every bug report after we released a fix. A remarkable percentage of the time the fix either didn't really work, or fixed the wrong problem or sometimes just made things worse.

      I also used to call every bug report author whose complaint was rejected by developers because the system was "working as designed". (Something of a misstatement. Very little of the original design actually got implemented). That was not a whole lot of fun, but it did allow us to get a lot of what the users wanted into the (overly cumbersome) design change process.

      --
      You can't see ANYTHING from a car, You've got to get out of the goddamned contraption and walk...Edward Abbey
    34. Re: permissions by Comrade+Ogilvy · · Score: 1

      That is pretty insightful and succinct, AC.

      I think there is a fourth point worth mentioning: testers are a practical means of making your developers more efficient and more effective. They allow the developers to go fast, while giving them feedback about when they were going too fast. When this feedback is kept low key, good developers can more easily learn better habits.

      Somehow heated meetings called by an angry VP about something a developer did seven months ago that blew up in at a customer site just do not hone good habits the way twenty instances of "Psst. That stuff you did yesterday looks like it might have a problem. Let me show you what I am confused about."

    35. Re: permissions by Entrope · · Score: 1

      The original post sounds like a company that makes software for commercial use, in which case the software development would be a profit center.

    36. Re: permissions by arth1 · · Score: 1

      Who the fuck has money for this?

      Companies that don't have money for handling all the field returns and customer complaints, and the repercussions of them.

    37. Re: permissions by budgenator · · Score: 1

      Well, mostly like cockroaches then.

      --
      Apocalypse Cancelled, Sorry, No Ticket Refunds
    38. Re:permissions by DickBreath · · Score: 1

      Not approval. Just verification. If your change was not approved, then activate the Russian gun using robot. The unapproved changes then tend toward zero according to Darwin's laws.

      --

      I'll see your senator, and I'll raise you two judges.
    39. Re: permissions by Anonymous Coward · · Score: 1

      your reply seems to imply that a code change requires reading ALL of the code, not just the new or changed code, and this is simply not true.

      It's not true, but it's also not false either. You need to understand all the code the changes effect to understand if the code will break anything or not. In more flexible languages and in poorly designed code, sometimes that could mean having to understand everything. Rarely is that scope limited to only the changed lines. We need better tools which can measure the impact of a change and say "hey, go verify all this stuff too".

      As a bad example: Someone is refactoring a function and swaps two int parameters. They get interrupted and forget to go back and update all references to the function. Everything will compile and looking through the change diff the function will look perfect. However everything calling that function is now incorrect and depending on what those parameters are it could be years before those bugs are detected and/or they could cause major data corruption in production. Unit testing may or may not uncover the bug, again, depending on what those fields represent. Like using the wrong type of nail to hang up cabinets, in a year everything could come crashing down, and you wouldn't figure that out by only looking at the design or the installed cabinets.

    40. Re: permissions by Aighearach · · Score: 1

      Waterfall always worked, it just was never the straw-man that you're taking aim at. You even drag in having an out-of-date spec, without considering that that hurts everybody the same. An agile project with an out-of-date spec doesn't have any advantage there.

      You get it exactly backwards when you suggest that waterfall works for small projects with low complexity. Like, 101-level idiocy type of backwards. It is easily explained by your idea that your opinions are actually facts, though. It means you can't learn, not matter the size or obviousness of the mistake.

    41. Re: permissions by Karlt1 · · Score: 1

      I had a boss that gave me some really good advice 15 years ago when I was getting chewed out by the owner (which was his boss), "get a backbone". If your boss is constantly reaching around you to your workers, they don't respect you and you should be fired for sucking or you leave because they're doing it wrong.

      If YOU are managing them, it's your job, not your boss's. Take responsibility or take off.

      I couldn't agree more. If you hire me to be the dev lead/team lead, etc. -- "the one ringable neck", don't go around me and trust my judgement. My manager's job is to tell me and the team the "what", the "when", and the priorities. It's my job to determine the "how" with my team.

    42. Re: permissions by Karlt1 · · Score: 1

      Found the Apple programmer responsible for GotoFail. Fucking Apple, can't even afford a developer to check/verify.

      j/k, I don't believe that was unintentional or by accident at all.

      It looks like it could have been a bad automatic merge.

      This was the bad code....

        if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
              goto fail;
              goto fail;

      A bad auto merge could have easily have caused this.

    43. Re: permissions by Thelasko · · Score: 1

      And more review costs more. And more testing costs even more than more review. So managers aren't a big fan of either.

      Customers typically aren't willing to pay more for a product based on its quality review process. They will assess the quality of the product themselves, or by word of mouth. Managers don't care about quality review because the customers don't either.

      Keep in mind, review and testing don't make the product good, the developers do. Review and testing are just there to keep the developer in check. If developers were infallible, testing would be a complete waste of resources.

      Unfortunately, developers are human, and all humans make mistakes. So, how much review and testing is appropriate? Here's a few clues:
      1. Does a bug put someone's life in jeopardy?
      2. How much financial risk can a bug expose the customer or company to?
      3. How many bugs has the development team made in the past?

      When you are testing medical devices or financial software, test the hell out of it. If you have excellent developers making a game, you might want to consider skipping review and test.

      --
      One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
    44. Re:permissions by balbeir · · Score: 1
      Ah, I recall a system like that at IBM. I think it was called CMVC

      It required a 7 step checking process. Totally maddening.

      It was a very efficient productivity annihilator.

    45. Re: permissions by rmandevi · · Score: 1

      There is one profit center in a company. Not engineering, not marketing, not even sales.

      It's called Accounts Receivable.

      All those other departments are cost centers whose only goal in life is to convince customers to pay the bills that Accounts Receivable sends out. If a department can't get people to pay more money to Accounts Receivable, it isn't only a cost center, it is a loss center and should be gutted. However, one must note that any department (such as legal or compliance) which is even the "cost of doing business" is helping Accounts Receivable to get paid on any bills at all.

      So, enough of this cost and profit center nonsense.

      --
      People who live in glass houses shouldn't walk and text.
    46. Re: permissions by camperdave · · Score: 1

      there is no way to stop management

      Really? What about a nuclear war? Or are they just like cockroaches?

      In a nuclear war, management are the folks in the bunkers.

      --
      When our name is on the back of your car, we're behind you all the way!
    47. Re: permissions by camperdave · · Score: 1

      That must be one powerful bug if you need to use fire management to deal with it. I thought the days of Halt and Catch Fire were long behind us.

      --
      When our name is on the back of your car, we're behind you all the way!
    48. Re: permissions by MrPeach · · Score: 1

      Lock the fucker out of the system. No one should have permission to do what he is doing.

    49. Re: permissions by zifn4b · · Score: 1

      The problem isn't methodology. It's people.

      Obligatory Dilbert. However, that still doesn't make Waterfall viable. ;)

      --
      We'll make great pets
    50. Re: permissions by zifn4b · · Score: 1

      Waterfall always worked

      This is the best part of the Dunning Kruger effect. You don't even realize how many people probably laughed at your post. In fact you probably won't get why this comment is even more funny and will still call me stupid. :D It's ok, you're superior to everyone else. Just keep telling yourself that. We peons can only dream of aspiring to your level of intellect, oh wise one.

      --
      We'll make great pets
    51. Re: permissions by david_thornley · · Score: 1

      Some of our input is through the GUI, which is hard to automate. Some of the output is visual on the screen, or the output of gcode that goes to CNC mills. I've been looking for ways to automate the tests off and on for years, and haven't found anything that would allow 100% coverage.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    52. Re: permissions by david_thornley · · Score: 1

      When I was writing my own tests for the testers, I was upset about two things.

      First, both the code and the tests were built according to one person's understanding of the requirements. I have been hit by now and then by "The user was doing WHAT?" - and it can be a perfectly reasonable thing for the user to do, just not one I anticipated.

      Second, that was my code. Those were my tests. I'd write the code first and then the test, and, amazing as it was, would you believe the tests showed that the code was fine? It wasn't a matter of knowing the weak spots, it was a matter of knowing the code.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    53. Re:permissions by david_thornley · · Score: 1

      However it's easy to make a bad architecture with many of the programming languages and development environments that are around today.

      Speaking as an old fart who's been around for a while, you put an extraneous "m" in "any", unfortunately not caught by your spelling checker because it's still grammatical.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    54. Re: permissions by Aighearach · · Score: 2

      Well, that's the thing about Dunning-Kruger; if you thought it through a little farther, you'd realize that a bunch of people glancing at my post and laughing are almost all at that early peak. ;) You seem rather sure of yourself too, and yet, you didn't even get far enough in to touch on the meat of my comment.

      Know going in that I'm an old-school software developer and that my comment was a universal truth. If you didn't understand it, or were too busy laughing at the nearest meme to try, that's fine; but it wasn't wrong. It can't be wrong, actually, because it was an observation of historical fact.

      Almost everything is waterfall, and waterfall was never the extreme absolutist caricature that you and other idiots laugh at. Yes, you're right, I am superior to you when it comes to reading comprehension of the term "waterfall development model." What people laugh at never even existed, so how much chance do they have to be correct, or have some insight? The author of the book people point at to support their weird claim that waterfall was absolutist even clarified later, in response to those criticisms, that it is not and never was a static system with no changes allowed, you simply try not to make late changes. There was never anything at the end that said, "and when problems come up, you don't even respond." That is just idiocy, and the target audience of the book were engineers for whom that is actually rather obvious.

      The vast majority of software was always made using waterfall process, and that is still true today.

    55. Re: permissions by zifn4b · · Score: 1

      Waterfall is desirable for infrastructure where requirements should not change. Agile infrastructure is an oxymoron.

      You'll need something to back up your claim otherwise it's just an opinion.

      Dunning–Kruger effect is a symptom of people with low abstract reasoning. Guess what the number one skill for a programmer is. Abstract reasoning.

      This is partially correct. Abstract reasoning as I'm sure you're aware typically denotes highly theoretical reasoning typically using mental simulation. I think it would be more correct to say that the skill that the people that suffer from the Dunning Kruger effect lack is one whereby they formulate a theory about what would work in practice, then they test it and evaluate the results and refine the theory and their understanding and competence to continually improve the results. That's not purely abstract reasoning. In fact, the PDCA methodology is really just common sense in any discipline. It's just more formalized because people who have specialization in STEM fields for example well tend to lack common sense. Trust me, I know from personal experience and I bet you do too whether you care to admit it or not.

      There are no known ways to enhance abstract reasoning.

      I know this not to be true. You should get a more up-to-date education in cognitive science. There is a lot of new research in this area that is yielding new discoveries all the time. It's hard to keep up with.

      It requires meta-cognition, which is heavily linked to abstract reasoning, and introspection, allowing one to self-teach in their own personal way. In other words, people with strong abstract reasoning can further enhance their abstract reasoning, but people with weak abstract reasoning are basically stuck with what they have. Welcome to the power-curve with a very very long tail.

      It does requires meta-cognition, no doubt. But abstract reasoning alone as I mentioned above doesn't get you all the way there. Theory and practice are two different things that complement each other. If you only have strength in one you're missing out on a lot of potential

      Interesting note. Abstract reasoning peaks in teenage years, then starts to slowly decline before falling off a cliff around 30. The theory for this is as a person gains more experience, they use their memory instead of reasoning, causing their abstract reasoning to atrophy. For people with strong abstract reasoning, they peak beyond 30 and continue to grow. This create a huge gap in abilities and why experience is a bull sh*t metric.

      There is empirical evidence to suggest otherwise. It really depends on whether you continue to train your mind beyond formal education in the same way that you did when you were in a formal education system. It doesn't really have a strong correlation with abstract reasoning. It's really more of a use it or lose it type of thing.

      --
      We'll make great pets
    56. Re: permissions by zifn4b · · Score: 1

      that my comment was a universal truth.

      Wow, I bow down to you oh wise and mystical prophet who is so elevated in enlightenment that us below you can't even comprehend it. Why are you even talking to me then? I'm so stupid I can't comprehend what you're saying because it's just so far above everyone else's intellectual capability. You just like talking to yourself? Because if you believe that, that's precisely what you're doing. The joke's on you bud.

      --
      We'll make great pets
    57. Re: permissions by Aighearach · · Score: 1

      When a person uses the phrase, "universal truth," they're not claiming anything about being enlightened.

      That was a truly legendary vocabulary fail on your part. Pathetic.

      I mean, seriously. English isn't your first language, so just look up what it means. ;) And if English is actually your first language, you don't quite have a first language, only a first half-language, because you're not even fluent.

      Just look it up. I dare you.

    58. Re:permissions by eric_harris_76 · · Score: 1

      Separation of authority. Good management.

      Stuff like that.

      I've worked for a couple of companies that grew pretty fast for many years in a row, and part of the transition from mom-and-pop shop where company meetings can take place in a conference room to one that makes meeelyons of dollars is to leave "cowboy mode" behind.

      Yeah, that adds delays, and is occasionally frustrating. But it also means not ending up like Barings Bank.

      --
      There's no time like the present. Well, the past used to be.
  2. Users don't report bugs by Teancum · · Score: 3, Interesting

    That right there is a part of the problem. Software testers report bugs. Hints about potential bugs can come from end users, but end users are not software testers.

    There is no substitute to a really good (professional.... and paid) software tester that and reliably reproduce bugs that need to be removed. If anything, they are far more valuable than even code monkeys writing thousands of lines of code per month (something also largely irrelevant for quality software). If anything, I would pay the software testing team before the coders if you need to use some volunteer labor like in an open source project.

    End users can offer hints to a good software testing team as to what might be bugs, and end user reports should definitely be taken seriously since it is something that slipped past those testers as well. When the software testers are fired and/or it is presumed that unpaid volunteers are going to be doing that quality assurance process, especially for a commercial software product, you get what you pay for.

    1. Re:Users don't report bugs by Anonymous Coward · · Score: 1

      A million times this.

      I work in a place that doesn't have testers and the amount of time I waste hunting down bugs I don't even know how to replicate or interpreting user feedback, building tests for processes then testing them myself some more, or worse, releasing untested code, is absolutely fucking insane. I feel like tier 1-3 support all rolled into one some days. Which is weird because I'm also relied upon to actually write code.

      But alas, top execs see hiring QA as an expense, but continue to expand in hiring more programmers to develop more code faster.

    2. Re: Users don't report bugs by Pikoro · · Score: 2

      Are you the owner of Ham Radio Deluxe?

      --
      "Freedom in the USA is not the ability to do what you want. It is the ability to stop others from doing what THEY want"
    3. Re:Users don't report bugs by zifn4b · · Score: 1

      There is no substitute to a really good (professional.... and paid) software tester that and reliably reproduce bugs that need to be removed. If anything, they are far more valuable than even code monkeys writing thousands of lines of code per month (something also largely irrelevant for quality software). If anything, I would pay the software testing team before the coders if you need to use some volunteer labor like in an open source project.

      This works a lot but it's not a panacea. I've seen several large software efforts where manual testing and test plans start becoming ineffective because the complexity gets to a level where no amount of highly talented testers can deal with it. The execution of manual test plans starts taking inordinate amounts of time. The cataloging of test plans and keeping them up-to-date becomes counter-productive. The only way to move beyond this point is to develop an automated testing strategy. I'm not referring to unit tests specifically. Look up the four Agile Testing Quadrants. Read the book How Google Tests Software and you'll understand why they created an entirely new position called "Software Engineer in Test". There are products like Zephyr and Test Rail to name a few that can help glue it all together.

      --
      We'll make great pets
    4. Re:Users don't report bugs by Waccoon · · Score: 1

      How can users report bugs? There's a mantra that every developer should hide problems, either to save face or because errors are super scary looking.

      I almost never get error codes of any sort these days. More and more log files are in binary format and need special tools to read. When there's a bug in the code of a web page, often all I get is a blank screen. Even the classic BSOD now has an emoticon as its primary message.

    5. Re:Users don't report bugs by Matheus · · Score: 1

      The meat of this answer is good... with more detail that answers some of the rebukes:

      The corollary I would make is to my other life in the Sound Engineering business. My golden rule is I never tell an engineer what's wrong with their mix during a show (and only after if they specifically ask for my feedback) and similarly wish others would follow the same rule. This is because: 1) If we can't hear it we're probably not going to do a good job of fixing it. and 2) Chances are we actually already know about it and are either working on fixing it OR it's something fully broken that we're currently incapable of doing anything about.

      How this ties: Terminology aside, users *should report issues. Feedback is important and a stream of information (provided you have the processes / resources to get useful information out of it) is a good thing. BUT any "work order" that goes to the devs shouldn't come from that stream of consciousness. Any "bug"/"feature request" should be verified by QA / product management (for features) before change work moves forward. For what are really "Feature Requests" this is fairly straight forward. Whomever is responsible for controlling feature creep and project scope needs to gatekeep those. For what are truly "Bugs" you similarly need to be able to triage what gets fixed and when PLUS if no one in house (QA/etc) can verify or reproduce the bug then just like my above example how are the devs expected to properly fix it. This is essentially TDD: QA creates a reproducible test that confirms the bug and the devs fix the problem until it passes the test.

      SO with a proper "intake" process your devs aren't working off of some user bug that the user needs to validate. They are working on a fully qualified bug report that QA has created and verified so that once fixed QA is fully capable of validating the fix is in (and in conjunction with a proper regression suite also that it didn't break anything else along the way).

      In a small shop where there aren't separate layers of QA / Prod Mgmt / etc the above functions may be consolidated into what may be a single "dev" BUT the process is the same. You can't fix what you can't see (reproduce) so go through that work first and the rest sorts itself out.

  3. WTF? by Anonymous Coward · · Score: 1

    Fire the manager. This sounds like very bad management. This is a process to follow, not a tool to blame when developers fuck up.

    I used to work as a QA manager. What I tested and accepted was generally committed and released on my OK and the senior Dev was rational and sane so we were almost always on the same page. The one time we really disagreed, he reminded me I wasn't his boss. I agreed, then repeated previous points made by our shared boss, and then he promptly gave in. Our boss was really good at making sure everyone was on the same page and priorities.

    Our team worked so well together, we started our own company after the previous company went tits up. If you have members on your team who act against you by breaking process, let them go. They are worse than dead weight.

  4. Feature Toggles by louispq · · Score: 2

    In addition to the feature branching you could also look into feature toggles. A feature toggle is a variable used in a conditional statement to guard code blocks, with the aim of either enabling or disabling the feature code in those blocks for testing or release. While this approach would not prevent unapproved code from being in a release, it would act as a gatekeeper to determine if a specific feature should be exposed to the end user. I however am not sure how you could address your concern for the database

  5. Entice users to test the new code by eric31415927 · · Score: 1

    More money, better computers, whatever it takes - get a subset of the users on board to test the new code before it's final.

  6. Re:Rip the ethernet out by davester666 · · Score: 1

    Hulk smash!

    --
    Sleep your way to a whiter smile...date a dentist!
  7. Feature Flags? Better Releases? by KulSeran · · Score: 1

    If it's not strictly a bug fix, feature flags are a good way to go. Keep a standard of adding any reasonably sized addition behind a feature flag. That way it's easy to turn on/off your new button, or swap between two methods of doing something.

    If it's testable, have a code review and release process built around difference testing. Reviewers have to sign off on the externally visible differences in the code's effect. Release engineers can close bugs based on expected diffs and reject releases in the face of un-expected ones. These can be simple diffs of database files, or more complicated screenshot difference analysis. Either way, you have someone other than the dev having to click a checkbox that the change makes sense.

    1. Re: Feature Flags? Better Releases? by Zero__Kelvin · · Score: 1

      No. Just no. Features aren't discreet entities. They are tightly coupled. If you have 4 featured you can toggle that is 16 different programs you need to test. You can't prove feature A will work with and without feature B enabled. You just increased your QA efforts by 2^n where n is the number of features. Epic fail.

      --
      Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
    2. Re: Feature Flags? Better Releases? by WalrusSlayer · · Score: 1

      Exactly this. To me this essentially sounds like trying to implement version control within the code. Reinventing the wheel and doing a poor job of it to boot.

      There may occasionally be something so trivial that a runtime switch makes sense to back out the functionality (probably in the UI layer). The original poster was talking about an extremely large, layered, and complex system. Feature flags in that context will eventually just make a bad problem worse, if not immediately

  8. isn't this pretty straightforward? by ooloorie · · Score: 4, Informative

    Fixes are included in a test build for users to test and accept -- but what if they never do? Leave your best answers in the comments. How woud you stop un-approved code changes from being deployed?

    - You set up the central repository to only accept code if it can be merged and results in all tests passing.

    - You make sure that there is defined code ownership and that people can only change code with a review and with the approval of the owners, also enforced by the source code control system.

    Long-term, there are two more things that should happen:

    - Developers need to learn how to break up large diffs into many small, individually testable diffs.

    - You need to break up your codebase so that it's not a single project with 1Mloc, but 50 small projects with 20kloc each.

    1. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      Code ownership is so 1960s ...

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    2. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Code ownership is so 1960s ...

      Pretty much every project on GitHub has code ownership.

    3. Re:isn't this pretty straightforward? by Excelcia · · Score: 4, Insightful

      In the 1960's was when you wrote software by punching cards that someone else fed in and where it had to work the first time. Every time. That kind of discipline is sorely needed by the original question submitter.

      The whole haphazard development model described in the question is absurd. First of all, what kind of single bug requires rifling through back end databases, business rules, web services and multiple front ends? That's not a bug in the software, that's a bug in the pre-design definitions phase. That is not a bug. Seriously... you can't just accept all the premises in the question without thought. That kind of change only happens when someone is is calling "the customer wants this feature changed" or "we misunderstood what the customer needed" a bug, which is wrong on its face.

      Secondly, multiple people making changes of that scope simultaneously is just wrong, whatever the cause. Distributed revision control systems were made able to handle multiple simultaneous branches in order to break bottlenecks on people working on different areas of a common source file. They were designed to accommodate merges that had occasional and minor overlaps. What is described here is a completely inappropriate use of that kind of environment. So to answer the question directly, when asked what tools can help, the answer is no tools can help you. The process is wrong. You are far better off reverting to a revision control system that enforces a single checkout of a source file if this is what is going on. Better yet, correct your development strategy.

      This can't be emphasized strongly or often enough. Code ownership is a good step forward in this scenario, but the only real fix for these problems is to completely refactor the way change is managed in this project. You wouldn't be wrong to Gantt chart these changes with their subsystem impacts so they can be scheduled on a non-interference basis. Better yet, if you are having to make multiple back-end through to UI changes, you need to go through a whole scope identification phase again.

      Your change system is hopelessly broken. Fix that, then the correct use of existing tools to assist you will become readily apparent.

    4. Re:isn't this pretty straightforward? by phantomfive · · Score: 1

      FWIW you can do this pretty easily with git + gerrit.

      --
      "First they came for the slanderers and i said nothing."
    5. Re:isn't this pretty straightforward? by thsths · · Score: 1

      While I agree that this may be the case, it is also possible that the software structure is terrible. Maybe one feature is spread out over many different parts of the project. Especially if some mixing language like PHP is involved, that is actually quite typical, because you work with Javascript code that is fix and Javascript code that generated, and possibly from different sources.

      Unfortunately, there is no easy fix for this. You need to refactor the software if you want to make it more maintainable.

    6. Re: isn't this pretty straightforward? by Zero__Kelvin · · Score: 1

      Close. git + gerrit - Agile FTW

      --
      Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
    7. Re:isn't this pretty straightforward? by ausekilis · · Score: 1

      Fixes are included in a test build for users to test and accept -- but what if they never do? Leave your best answers in the comments. How woud you stop un-approved code changes from being deployed?

      - You set up the central repository to only accept code if it can be merged and results in all tests passing.

      I'll expand on this in case anyone is confused. The code itself should be developed alongside unit tests. Whenever a new interface/class is developed, there should be tests built to ensure that *every method* behaves exactly as expected. Java has packages like JUnit, Python has nosetests, and there are others. Lastly, with such a widespread development team, it's imperative you develop coding standards and have management backing them up. Use things like the SOLID design principle, and make sure that code is properly commented.

      - You make sure that there is defined code ownership and that people can only change code with a review and with the approval of the owners, also enforced by the source code control system.

      Long-term, there are two more things that should happen:

      - Developers need to learn how to break up large diffs into many small, individually testable diffs.

      - You need to break up your codebase so that it's not a single project with 1Mloc, but 50 small projects with 20kloc each.

      I would add accountability too. Linus gets a lot of flack for his often profane in-your-face leadership style, but he has managed to keep the Linux kernel going strong for decades now. He calls out the developers of bad code that break the development rules (principles, structure, behaviors, etc...) and will not accept those changes. If you hold a developer accountable for their crap, they'll shape up or move on. Either way, the project is that much better for keeping people that actually care about the end result.

    8. Re:isn't this pretty straightforward? by tommeke100 · · Score: 1

      This sounds all pretty standard if you have a software engineering background, but sometimes office politics takes over.
      The codebase being dispersed over different teams, each team of course thinks their stuff is most important.
      Those 50 small projects? You just created dependency hell! Sure, in theory you should strive for high cohesion and low coupling of projects, but suddenly team A needs this from team B, and they don't want to spend time asking, so they just implement that functionality at their level. Or the lower level team really wants to push through that change, suddenly the other team can adapt plenty of code (that should be low coupling).

    9. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Yes, the problems you list occur when you break up big projects into smaller ones. They also occur when you don't break up projects. The difference is that when you break projects up, these problems actually become visible and exposed, which is why they can then be addressed by management and through tools.

    10. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      I would add accountability too. Linus gets a lot of flack for his often profane in-your-face leadership style, but he has managed to keep the Linux kernel going strong for decades now. He calls out the developers of bad code that break the development rules (principles, structure, behaviors, etc...) and will not accept those changes.

      By the way, the Linux kernel is actually a fairly big codebase, which goes against what I have been saying about breaking up projects. It works for the Linux kernel because of Linus. Most software projects don't have the luxury of a manager with the kinds of technical skills and obsessions as Linus.

      In fact, in many corporate environments, Linus would have been pushed out by people like this, people who put their non-technical agenda ahead of getting the job done.

    11. Re:isn't this pretty straightforward? by thsths · · Score: 1

      The length of a name should be either configured in a central location, or it should be (effectively) unlimited. Using fixed length fields does seem very 1960s. It is possible that a number of pieces fail on that issue.

    12. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      Pretty much any project in the real world hasn't.
      The coders who coded it (did I reall writete 'coders'?) is long gone from the team.
      The code I see and have to fix is probably written by a guy who is not working for the company since 20 years anymore ...

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    13. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Lots of companies have figured out how to deal with code ownership in the presence of turnover. It's not rocket science. If you don't know how to do that, perhaps it's time to take up a job as short order cook or something.

    14. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      Most companies don't have code ownership.
      As it is an outdated idea from the 1960s.
      Of course it is not rocket since: it is utterly dumb!

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    15. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Most companies don't have code ownership.

      Well, maybe for the fly-by-night companies you seem to consult for, or maybe you simply don't understand what "code ownership" means.

    16. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      And maybe you are just an idiot?

      Perhaps you want to read this: https://martinfowler.com/bliki...

      I never ever in the last 30 years worked for a company that hat something different than "collective code ownership" ... because as I mentioned before: code ownership is a retarded concept.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    17. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Perhaps you want to read this: https://martinfowler.com/bliki... [martinfowler.com]

      Oh, I was way ahead of you and had thought of even sending you that link. The problem with Fowler's page is that it doesn't list the kind of weak ownership most companies actually use, namely something between strong and weak code ownership: teams build libraries and apps, anybody within a team can make changes to the code the team is responsible for, but other teams usually go through team members to make changes, get patches approved, etc. You know, pretty much the same way the entire FOSS ecosystem works, they way Github projects work, etc.

      I never ever in the last 30 years worked for a company that hat something different than "collective code ownership" ... because as I mentioned before: I don't know what I'm doing or how to build big systems, so only small fly-by-night operations staffed by ex-baristas hire me

      FTFY

    18. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      You indeed seem to be an idiot :D

      I don't know what I'm doing or how to build big systems, so only small fly-by-night operations staffed by ex-baristas hire me

      But it is more funny than insulting, so perhaps I take the idiot back and search for a term that is a synonym for "asshole" because talking like this is pretty assholy behaviour.

      If you where my coworker in a proffesional environment you had now problems ;D

      You know, pretty much the same way the entire FOSS ecosystem works, they way Github projects work, etc.
      On a GitHub project, assuming it is an "open one" every commiter could potentially destroy the master. Even intentionally.
      In professional closed source software usually you usually do not need to fear that.
      So regardless how big my projects were and what kind of software (outonomous driving e.g.) there never was a "code ownership" policy in place. And like many others (e.g. Fowler) I find idiotic and not fitting for agile software development (and also not fitting for Waterfall etc.)

      But who am I that I dare to think such stuff with in total only roughly 35 years experience ...

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    19. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      On a GitHub project, assuming it is an "open one" every commiter could potentially destroy the master.

      Notice the term "committer"? GitHub projects have a defined list of committers, a list that is often much smaller than the list of people who submit patches or who use the software.

      But who am I that I dare to think such stuff with in total only roughly 35 years experience ...

      I don't know. Who are you? If you have "roughly 35 years experience", you are apparently not "angel'o'sphere", since that guy seems to have graduated in 1997 and not worked much in corporate environments.

      If you where my coworker in a proffesional environment you had now problems ;D

      No doubt. In fact, I think I would have problems if you were my coworker in any environment.

    20. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      On github basically anyone can commit on a branch and make a merge request. It only depends how you set up the access rules.

      So a pretty dumb comment.

      angel'o'sphere never 'really' graduated. In Germany my degree does not count, it is a Vordiplom in Computer
      Sciense and Physics. That is a little bit below an american Master, but significantly above Bachelor. I studied till roughly 1999, perhaps 2003, would need to check my 'university bills'. I wrote a Diploma Thesis about automatic Program Transformations, basically the stuff we now have in CASE systems as model transformations. To have a real Diploma I need one or two more written exams. But I'm to lazy for that :)

      1997 I incorporated with some friends my first stock company (that is why it is the inofficial end of my studies). Working in Y2K reengineering fixing roughly 1million lines of Cobol and some 600k PL/1 code.
      Afterwards I was chief consultant (or how ever you would call that in english) for Thyssen Krupp Stahl, coaching a set of teams with in total of 300 software developers, reporting directly to the CTO. Then Fiducia, coaching about 10 teams with about 10 members each doing requirements engineering, high level design and architectures and teaching UML, for the restructuring of several majour banks and thier data centers with roughly 3000 software developers.
      Other big companies I consulted are: EnBW.com, Landesbank Badenwuertemberg, Continental, Finanzinformatik, Postbank etc.

      I started commerical programming on Appe ][ with age of 16 in 1982. So: I have 35 years of software development and system management experience, as I imediatly started working in the university on Unix and Vax systems, partly programming partly adminstration. I also programmed in the robotics institute a bit, mercano wheels robot, pretty fascinating.

      Btw. if you goggle a bit you even might find an old CV that contains the complete project history since 1982 till something around 2007. Around 2007 I removed all projects that were older than 10 years.

      So: yes, I consulted as lead architect/coach software projects with several thousand people involved, and now get of my lawn. (Without Diploma ... no one ever asked)

      And now stop making a fool out of yourself by insulting fellow /. ers.

      If you don't agree that code ownership is an outdated concept, that is fine. Insulting other software engineers is not fine.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    21. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      I started commerical programming on Appe ][ with age of 16 in 1982. I studied till roughly 1999, perhaps 2003

      You were a Master student until age 37 and you didn't even finish? Seems like your education matches your ridiculous technical views.

      Insulting other software engineers is not fine.

      Well, I'm not a software engineer. Come to think of it, I don't think you're either.

    22. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      I'm a computer scientist, german universities usually don't offer software engineering courses.
      Actually I'm not sure what the exact distinction between both terms would be (in german both terms translate to the same term)

      As you probably have guessed: I worked mostly at the university and skipped the classes :) that is why I'm a highly educated professional. Why you imply you think otherwise is beyond me.

      I oversee your insults, as you are just a young Padawan.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    23. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      I'm a computer scientist

      What makes someone a scientist is that they do research and publish. What research have you done and where is it published?

    24. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      Being a scientiest is what the course of the study is called.
      So if the univeristy calls it 'computer sciense' I'm obviously a computer scientist.

      My papers and thesises are published at http://www.kit.edu/ and http://www.fzi.de/

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    25. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Being a scientiest is what the course of the study is called. So if the univeristy calls it 'computer sciense' I'm obviously a computer scientist.

      I studied piano for several years. That doesn't make me a pianist.

      Why would you have published a thesis if you didn't finish your degree?

      Anyway, thanks for the background; it's much clearer now where you're coming from.

    26. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      Thesises are automatically published.
      I don't remember if I mentioned it, but to finish the degree I would have needed to make 2 or 3 more writen exams/tests.
      As I just had founded a 'Software Reengineering' company, and was mainly bussy with crafting CASE tools and doing Y2K reeningeering, I focused on work.
      I probably had finished the degree if some things went different. On the other hand, a degree is not that important, at least not for me.
      After I did my diploma thesis my Prof. offered me a dissertation. So I guess it was not that bad :)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    27. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      So it took you 20 years to write one Diploma thesis, it was "published" by the university, you didn't get a degree, and you believe that makes you a scientist. Well, we'll just have to disagree on that.

    28. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      Hu?
      I basically studied and worked at the university for ten years. No idea how you come to 20.
      The thesis took me about 5 month, the limit on thesises is 6 month I think ... but you can probably extend the timeframe once.
      The topic I studied is 'computer science' so if I had finished my complete degree I would be a 'computer scientist' ... no idea about what you want to argue ... more precisley a 'Diplom Informatiker' which translates into english as 'computer scientist'.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    29. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Well, you can consider yourself a "computer scientist", I consider you a university dropout with no significant publications and have zero respect for your professional opinion based on your background (thanks for being so honest). As I was saying, we'll have to agree to disagree.

    30. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      Not my problem :)

      And I have no problems with drop outs either, most of them simply were smart enough to no longer follow 'the system'.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    31. Re:isn't this pretty straightforward? by ooloorie · · Score: 1

      Not my problem :)

      Well, you brought up your supposed credentials as support for the idea that people should take you seriously.

    32. Re:isn't this pretty straightforward? by angel'o'sphere · · Score: 1

      My business card says: 'software generalist'
      And my customers take me seriously, otherwise they would not pay my bills or hire me at the first place.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  9. presumably you tagged the sources by david_bonn · · Score: 1

    Presumably you tagged the sources that went into the build that went to your customers?

    If you did, when you make bug fixes you need to check out against that tag, not to the bleeding edge code where new features are being added.

    Depending on how many fixes there are and how complex and messy the source tree is, you can either try to merge the changes into your bleeding edge code base or make the changes twice. In general, if the bleeding edge is being vigorously refactored or otherwise aggressively reorganized, you'll probably end up making the changes twice. Something that isn't often brought up when refactoring is how you will handle merging bug fixes.

    It is best to have one developer who drives the source control system and knows how to do merges.

    If you didn't tag the sources you released to customers, you and your entire team needs to be shot.

  10. Gatekeeper(s) - Needed by brian.stinar · · Score: 2

    and the "fix" gets released with the larger code change set, to production...

    The problem here is that the fix "gets released." I agree, that it seems like releases should at least have the criteria that at least one other person has reviewed the code being released. Otherwise, they have the criteria that one person decided to release it (by definition.)

    I think you could create a system by which pull requests are approved by someone other than the person that created them, and then, after it's been approved, then the code is authorized to be merged into a release branch. Here's one such discussion of that. I'm not an expert on this, but I've heard of it, and I think this line of reasoning could help you.

    Good luck!

    1. Re: Gatekeeper(s) - Needed by Zero__Kelvin · · Score: 1

      You just described the Linux kernel development process (I.e. I 100% agree and said approach is very well vetted)

      --
      Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
  11. How Would You Stop The Deployment Of Unapproved Co by Goondra · · Score: 1

    MODULE based languages help by isolating code changes to smaller chunks that are more easily tested.

    --
    DGDanforth
  12. Learn from the Rust project's developers. by Anonymous Coward · · Score: 2, Insightful

    A lot could be learned by observing what the developers of the Rust programming language project do when running their project.

    They're dealing with a large project that covers a complex domain, a huge amount of code, and many developers scattered across the globe.

    The first thing to do is to use git, and perhaps something like GitHub. This will allow your developers to collaborate using a free and open source version control system.

    Next, you need a Code of Conduct to prevent social injustice from negatively affecting the project. A Moderation Team is tasked with ensuring that everyone is tolerant, and any intolerance will be ruthlessly stamped out.

    Changes go through a request for comments process. This keeps everything organized and everybody on the same page. Bugs have detailed bug reports and discussion.

    GitHub pull requests are used to integrate the changes. All changes are reviewed by somebody else. If you're a lucky contributor, you may even have your contribution reviewed by none other than Steve Klabnik zerself! If the review passes then their automatic integration/merging bot will merge the pull request into the master branch.

    Your project doesn't have to follow the exact same approach that the Rust project follows, of course. But I think that there are a lot of things that any large software development project could learn from how the Rust developers work. Their approach has scaled to over 1,700 contributors!

    1. Re:Learn from the Rust project's developers. by K.+S.+Kyosuke · · Score: 1

      Next, you need a Code of Conduct [rust-lang.org] to prevent social injustice from negatively affecting the project. A Moderation Team [rust-lang.org] is tasked with ensuring that everyone is tolerant, and any intolerance will be ruthlessly stamped out.

      That was a good one!

      --
      Ezekiel 23:20
    2. Re: Learn from the Rust project's developers. by rickb928 · · Score: 1

      Where I work, the key value is respect. This allows us to collaborate, to propose the best solution, to do what the customer wants and not what seems right to us.

      Even then we struggle with egos, but respect is the most important value, and the core of the business.

      --
      deleting the extra space after periods so i can stay relevant, yeah.
    3. Re:Learn from the Rust project's developers. by Altrag · · Score: 1

      This works a lot better in an open source world where there's a small core team (maybe even one person) that does all the final review and integration, plus typically a (public) alpha/beta/RC phase and the ability to say "sorry it was an alpha.. we'll try to fix it but the data loss is your problem" if it screws up. And if you're not happy with the latest RC you push it off by a week or two.

      In a business environment, the first is sometimes true. If you're lucky. Frequently though the integration is "we need a new version out by Thursday no matter what! Oh and we need this list of 47 breaking bugs fixed before release!" Not enough time to do those fixes never mind test them? Tough. And of course such dictates are handed down by management and are to be taken as if they were God's commandments.

      Sure, you can find places where they're willing to put off releases in order to add some polish, but in many if not most cases the business decisions outweigh the technical decisions. If you have a major customer expecting a release on Friday then there damned well better be one ready to go by EOD Thursday come hell or high water. The consequences of it fucking up in a couple months are less important than the consequences of pissing them off this week.

  13. Step One by Anonymous Coward · · Score: 3, Insightful

    Step one is to get high-level management to understand and agree with the risks as well as to understand and agree with the costs of preventing them.

    You would think that this is a no-brainer, but its not. I've listened to a COO tell me from across a boardroom table that they have to be able to bypass deployment processes for business-critical hot fixes because time is of the essence in those situations, and that was the end of it. So what you've got is that in an "emergency" an "informal" approval from an "important" person is all that is needed. Feel free to define those words however you wish, naturally.

    1. Re: Step One by Anonymous Coward · · Score: 1

      Yes, if your process is discovered to be broken and cause bad shit. Sometimes when you're already in the shit, you just need to get back up and running asap.

      Say that your process states you need a UPS on all servers. A UPS fails at 3am at a remote tower and your spare turned out to be of low capacity or just failed. Do you leave the shit off, or do you plug it straight into an outlet?

      In software, if you're getting attacked by a 0day, do you push out the 2 byte fix that has VERY specific code path and use, or do you follow your 3 week QA cycle, testing new unrelated changes as well?

      Bypasses are needed in emergency situations, ideally by someone who can think.

      An ER Doctor probably would like to fix an injury using their best technology available. Sometimes, they just need to stick their finger in a hole for a bit until the proper solution is ready.

    2. Re:Step One by budgenator · · Score: 1

      At some point you need to rely on trust so that you can leave the flexibility in the process to bend the rules in an emergency.

      But Dude, It's always an emergency! (Now watch this get +5 insightful, instead of +1 funny)

      --
      Apocalypse Cancelled, Sorry, No Ticket Refunds
  14. Re:Ban peer programming by Anonymous Coward · · Score: 1, Interesting

    Two Johnny Jr coders should not be allowed to change code marked as mission critical by a senior developer or domain experts.

    I take it you don't work in the industry (called "Silicon Valley" by outsiders). Here, a senior developer is usually 21 or 22 years old, and has been with the company for about 2 months on average. Some of the more experienced senior developers might be 24 years old, and might have even been with the company for up to 4 months.

  15. Microservices by lucm · · Score: 2

    When people are worried about changes in "many layers of the stack", it's usually a good time to re-architect the system and build microservices. Basically, you get the entire stack in every microservice and you stop worrying about ripple effects; you upgrade or troubleshoot things at a much smaller scale.

    I highly recommend this book:
    https://www.amazon.com/Buildin...

    It explains how to achieve this, including how to deal with the tough parts like the database layer.

    --
    lucm, indeed.
    1. Re:Microservices by Kjella · · Score: 1

      When people are worried about changes in "many layers of the stack", it's usually a good time to re-architect the system and build microservices. Basically, you get the entire stack in every microservice and you stop worrying about ripple effects; you upgrade or troubleshoot things at a much smaller scale.

      Isn't this one of the problems caused by modularization, not solved by it? Basically if everything was in the same VCS it'd be a huge change set doing some database changes, some business rule changes, some desktop GUI changes, some Android GUI changes, some iPhone GUI changes etc. but the moment you start breaking it up you have to start tracking that this change of functionality requires changes in five different projects and unless everything makes it into the next release it won't work. The more you've divided into microservices, the more places you need to change. Each service will be less complex but the interaction between the services would get more complex because you need to pass things around from service to service.

      --
      Live today, because you never know what tomorrow brings
    2. Re:Microservices by zifn4b · · Score: 1

      When people are worried about changes in "many layers of the stack", it's usually a good time to re-architect the system and build microservices. Basically, you get the entire stack in every microservice and you stop worrying about ripple effects; you upgrade or troubleshoot things at a much smaller scale.

      I highly recommend this book: https://www.amazon.com/Buildin...

      It explains how to achieve this, including how to deal with the tough parts like the database layer.

      Just watch the Spotify Engineering Culture videos. What you refer to as "ripple effects" they refer to as "blast radius" which I like much better. The benefit of micro services is that if one micro service blows up, the rest continue to run at least enabling partial functionality as opposed to taking the whole system down or putting the entire system into a funky state.

      --
      We'll make great pets
    3. Re:Microservices by lucm · · Score: 1

      When people are worried about changes in "many layers of the stack", it's usually a good time to re-architect the system and build microservices. Basically, you get the entire stack in every microservice and you stop worrying about ripple effects; you upgrade or troubleshoot things at a much smaller scale.

      Isn't this one of the problems caused by modularization, not solved by it? Basically if everything was in the same VCS it'd be a huge change set doing some database changes, some business rule changes, some desktop GUI changes, some Android GUI changes, some iPhone GUI changes etc. but the moment you start breaking it up you have to start tracking that this change of functionality requires changes in five different projects and unless everything makes it into the next release it won't work. The more you've divided into microservices, the more places you need to change. Each service will be less complex but the interaction between the services would get more complex because you need to pass things around from service to service.

      If it' a small team with limited features, maybe. But on more complex systems this is just impossible. For instance if the product has multiple concurrent releases (ex: legacy, LTS, canary) and multiple dev and QA teams working on different features with different timelines, you can't have everything in a big bucket. There's going to be breaking changes daily.

      But if you use a microservice architecture, you're dealing with tiny building blocks; all you need is a good CI strategy and decent deployment automation and you can support pretty much any combination.

      --
      lucm, indeed.
  16. RELEASE Engineer by Anonymous Coward · · Score: 1

    It's pretty straightforward.

    You need a Release Engineer position (full time, not a repurposed Developer). They need to have the authority to say NO to a release.

    Go read up on what REs do. That's exactly what your organization needs.

  17. Broken code fix by fard69 · · Score: 1

    Developer's head on a pike as a warning to others. The hint will be taken, I promise.

  18. Post your question on /. by Anonymous Coward · · Score: 1

    ... it will certainly stop the developers from deploying unapproved code changes for 2 minutes.

    1. Re:Post your question on /. by fredrated · · Score: 1

      While they read Slashdot? Surely they will waste more time than that.

  19. Linus Had A Good Talk On This In Relation To GIT by NicknameUnavailable · · Score: 1

    This link is great in relation to how Linus deals with a huge distributed codebase. It's actually what convinced me GIT was superior to SVN.

  20. Official Builds. CVS Tags by Cmdln+Daco · · Score: 1

    You lay down a CVS Tag and the build technician builds from it. Releases are clearly identified with an MD5 identifier.

    If only one official binary exists, it's what people will run.

  21. Eliminating Bugs: 101 by meglon · · Score: 1
    --
    Fascism: An authoritarian and nationalistic right-wing system of government and social organization. See also: NAZI's
  22. A piano by sjames · · Score: 2

    Next person to release an untested line of code will play the piano for us *SLAM*

  23. For starters get your company to pay by rsilvergun · · Score: 1

    for testing. That means full blown test environments as well as time in the user's day or a special team to test bug fixes. Also if you go with a team don't outsource that team to the lowest bidder. They'll just pass everything as "OK" and spend the rest of their time looking for a better job. Hire somebody, give them a decent salary and benefits.

    Unless testing really isn't that important. Depending on your needs it might not be (despite all the indignation that engenders). One thing I've learned about writing software: Good enough is _always_ good enough. Just ask Microsoft (Word) and Corel (WordPerfect).

    --
    Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
  24. you mean the decade we went to the moon? by Anonymous Coward · · Score: 1

    yes. code ownership is so 1960s. so is software that worked properly.

  25. Decide what's more important and who's more import by TheOuterLinux · · Score: 1

    Obviously, you'd allow the "community" to look at bugs and submit issues, but it seems as though in trying to prevent bad blood, there's no chain of command in these kinds of projects. The person with the highest bug fixing record gets the final word, followed by the "new features team" rather than adding features and then try to fix conflicts; this is where the original author of the project has the final say over the top bug fixer if they aren't one in the same. If multiple solutions exists to a bug, offer a community vote and an honest layout of any compromises that may result for each solution. Interface eye candy should always be last in a project.

  26. Re:you cannot force your manager to do their job by brian.stinar · · Score: 1

    Yeah, this is a management problem. The technical safeguard I proposed won't work unless management buys in, which clearly they haven't already since this could be addressed by policy, but it hasn't been.

  27. Communication & formal processes by Monolyth · · Score: 1

    Tools are one route, but they will take time & money to implement which you may not have and don't usually resolve the underlying problem of lack of responsibility or process. There are numerous integration tools that can bring together your source control, testing suites & feature tracking tools. In addition DevOps and release management software can provide automated workflows but again you are talking a rather large spend in time, money or both.

    Communicate
    Remove the stigma that developers can't "talk to the users". There is nothing written in stone that says you can't work closely with users and form lasting professional relationships with them. Before you go trying to enforce a formal process on them, simply communicate your concerns with them directly. You don't have to babble on about code merges, database scripts. KISS - focus on the cost to the company in time and money if something is missed in testing (or lack thereof). Their interest in making the system and release process go more smoothly should be fairly apparent based on their responses. If available resources are the concern then this is when you can bring in upper management to assist with bulking up your user base to improve the release testing and day to day operations. However, make sure you don't get stuck with just one person. Knowledge silos on the users end can be just as dangerous as they are on the development side.

    Formalize your process and enforce it
    If you got buy-in from your user communication this should go pretty smoothly, if not you'll need extra leverage from upper management. Make sure you've worked out a decent workflow with the users. It doesn't have to be laden with cool tools. The process should easily spell out what is changing and what needs testing for each release. Keep in mind the audience you'll be working with, don't design or purchase some crazy release management system if the users are only comfortable sending emails. Tools will come with time, the most important thing is that your process is easy to follow and enforce.

  28. Refuse to deploy until/unless work is QA'd and app by techSage · · Score: 1

    Have the guts to say it and then do it. PMs will get onboard when they get nervous that work won't get to clients.

  29. Amen by caferace · · Score: 1

    As a long time SQA/HQA eng, this is an awesome question. I've been around a lot of blocks. New build. Broken. Here's another one. Broken. My Golden Rule? Stay until it works. I'd so much rather have a good build than something slapped together. It wastes everyone's time.

  30. As a STE/QA/SDET by Bomarc · · Score: 1

    I've tried. And been fired for it. From the unemployment office, it is amusing to watch as WS ATG investigates a company due to bad testing practices. It is disturbing to watch as 'computer glitches' cause hundreds if not thousands of travelers to be impacted. It is disturbing to send an email that - due to bad management practices (just what this article describes) mean that I cannot guarantee or relate the quality of a product; then be escorted out the door the next day.
    I have and always will stand up for quality, which in this 'we will not fix it next release' era is a difficult thing to do.
    Best thing to do: Put in 'requirements' that there be a code review before a 'check-in' is accepted. Best of luck if no one want to accept your recommendation(s).

  31. Yahoo 'Warp Drive' by Anonymous Coward · · Score: 1

    Yeh, it sounds like Yahoo's Warp Drive (link below). Where they sacked the QA. So all the code is merged and NOBODY tests it, the first the users get to accept it is when its live code.

    The claim there is that developers do their own test tools to improve their code, i.e. they do an adhoc thing to fill in for the missing QA people. But obviously its a subset of QA, it doesn't involve users, and it doesn't span code outside the developers own reach. He would not be able to require another programmer fix a problem before release, since he is not QA.

    Really sacking incompetent leadership is the only solution. Can you imagine a self driving car built by Yahoo? They wouldn't even be able to demonstrate to THEMSELVES that it won't crash, because they've simply never tested it.

    https://developers.slashdot.org/story/15/12/12/0115226/no-more-qa-yahoos-tech-leaders-say-engineers-are-better-off-coding-with-no-net

    1. Re: Yahoo 'Warp Drive' by Anonymous Coward · · Score: 1

      Wow. But it sounds like there were huge layoffs and that was the spin so it wasn't as depressing as it obviously was. No one in the comments were buying that shit (except for one dude who thinks he's special).

      For fucks sake, they're blaming QA for injecting errors into the work. How in the fuck?

      Some serious double think shit.

      All the process change to have the developers not be common sense deficient could have been done and kept a small talented QA team. This was purely justification for layoffs on downward spiral.

    2. Re:Yahoo 'Warp Drive' by david_thornley · · Score: 1

      Can you imagine a self driving car built by Yahoo?

      Sounds perfectly safe to me, unless you actually have to have it go from one place to another. Then you might strain your back pushing it.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  32. Yes it addresses the problem by lucm · · Score: 1

    Rolling it out in microservices just means some have issues and others not, making it more confusing and less cohesive.

    I don't think you understand what a microservice is.

    The point is not to randomly package web services; the point is to define components that correspond to specific areas of the business domain. That way, when you upgrade or deploy a specific microservice, you know exactly what part of the business you're impacting, and this makes governance a lot easier. Instead of having a handful of managers snoozing in CAB meetings and rubberstamping changes that are not clear, you can get the thumbs up from the right people and leave the rest alone.

    This is by far the easiest way to avoid rogue or hidden commits making their way to production. And microservices are not a "fad", they're the latest iteration of a concept that's been around for quite a while (SOA) and that just needed a bit of further thinking.

    You really should read that book, it's worth it.

    --
    lucm, indeed.
    1. Re:Yes it addresses the problem by phantomfive · · Score: 1

      the point is to define components that correspond to specific areas of the business domain.

      If people were capable of that, they wouldn't be in the problem to begin with. Their system would already be suitably modular.

      --
      "First they came for the slanderers and i said nothing."
    2. Re:Yes it addresses the problem by lucm · · Score: 1

      the point is to define components that correspond to specific areas of the business domain.

      If people were capable of that, they wouldn't be in the problem to begin with. Their system would already be suitably modular.

      So you're basically saying: they can't fix it because if they could they wouldn't have to fix it. So from the get go you're already in patch mode. That's the best way to set yourself up for failure.

      Here's the key to improving things: you don't compromise when you're at the whiteboard. You compromise once you have a clear picture of where you want to get and once you know that the gap between your current state and the desired state is too large for your current resources. And even then you don't change the goal, you just set a realistic roadmap.

      --
      lucm, indeed.
    3. Re:Yes it addresses the problem by phantomfive · · Score: 2

      Basically I'm saying that if you don't know how to write modular code, if you don't know how to define components in a way that corresponds to specific areas of the business domain (and that's not quite the right way to do it, but close enough), then it doesn't matter if you use microservices. Your microservice architecture will end up just as messy as your non-microservice architecture.

      The underlying problem isn't microservice vs non-microservice: both can be fine architectures. The underlying problem is not knowing how to divide up your system into components, not being able to recognize the natural lines in the problem.

      --
      "First they came for the slanderers and i said nothing."
    4. Re:Yes it addresses the problem by bad-badtz-maru · · Score: 1

      How is service (aka remote interface) design any different than designing a local interface? Doesn't the entire discussion of microservices just completely regurgitate overall software design discussions that have taken place since the 60s? Isn't call latency essentially the only difference?

    5. Re:Yes it addresses the problem by lucm · · Score: 1

      Doesn't the entire discussion of microservices just completely regurgitate overall software design discussions that have taken place since the 60s? Isn't call latency essentially the only difference?

      Not if you do it right. There's essentially 2 differences with microservices vs (SOA/RPC/etc).

      1) the full stack comes with the service, so it's self-contained
      2) the services are designed to match the business domain

      For instance, in the good old days of SOA, a core team would often align the service catalog with the backend systems (ex: ERP, MRP, HRM etc) cramming in all kinds of business logic, then the edge developers would compose more services using those building blocks. With microservices, the catalog is aligned with business activies (ex: make a sale, hire a new employee, etc.) and each service corresponds to the most granular tasks possible. This is not just semantics; if you have worked with SOA and find yourself working with microservices you'll see the difference right away.

      What's cool with microservices is that unlike SOA (which is process-heavy and requires a core team that knows everything) you can pretty much let the SME build services around their narrower expertise; if you do it right, using an API gateway for instance to handle authentication and throttling, it's a lot easier to maintain. Each team becomes responsible for "their" API.

      And btw microservices don't have to use a network. You coud have just a bunch of dockers running on the same host and talking to each other via unix sockets and it's still considered microservices. It's very common with technologies that are socket-friendly (ex: php-fpm).

      --
      lucm, indeed.
    6. Re:Yes it addresses the problem by bad-badtz-maru · · Score: 1

      Latency considerations aside, I just don't see service interface design as being any different from designing a class used on any other layer. If people were allowed to construct gigantic monolithic service interfaces, well, that was probably poor design overall and not specific to service architecture. There was never anything about SOA that precluded building narrowly-scoped interfaces.

  33. Separate Testing Envs, hold merges til post-UAT by RGRistroph · · Score: 1

    I have had this problem in several different projects with different teams.

    I generally think of it as the "code hostage" or "cherry-picking" problem. You have the work of 15 issues reviewed and merged and loaded up and running on a test environment. For 14 of those issues, a "user" ( or whatever you call the non-developer issue-owner in this case ) checks in and says it is good. Time is passing and the 15th person is a no-show. It's worse than if they said it still wasn't fixed -- then you would immediately go to work reverting that code change and re-testing everything -- but instead everything is held up in limbo.

    One way to address the majority of these issues, is to set up a separate testing environment or server per ticket, and put the pull request or branch on it, before it is merged to the main branch. Force users to test BEFORE it gets on the path that will end up in a deployment. This means that slow moving people won't block others.

    This might seem expensive, but with APIs to cloud hosting and/or container technology, it can be automated, and is a lot cheaper than it would have been a few years ago.

    You can still end up with a problem on the now integrated code, and still have to cherry-pick / revert some commits, and since the result has not yet been tested all together, you still have to re-test. However this happens much less often, because it is only happening in the cases where interaction between different work is causing the problem.

  34. Re:Easy by Kohath · · Score: 1

    Even easier: automatically approve all code changes.

  35. Re: Give all the users AIDS by anorectal insemena by Anonymous Coward · · Score: 2, Funny

    Somewhere, on some porn forum right now, someone is asking a coding question.

  36. Re:Give all the users AIDS by anorectal insemenati by davester666 · · Score: 1

    You have to come back from fantasyland. She was your sister, and you roofied her... And the "other cousin" was one of her stuffed dolls.

    --
    Sleep your way to a whiter smile...date a dentist!
  37. This is not difficult by ghoul · · Score: 1

    as long as everyone buys in that Quality is important and fixing urgent bugs is also important.

    When we go to production we have a 3 day code freeze during which only P0 bugs (which are rare at that point) can lead to the code being changed.
    After production the code is tagged and new development start on a new branch.
    Any Production bugs which cant wait till next release are fixed on the production branch, tested by QA team and released.
    The developer makes sure to do the same fix in the new code branch (if the code has changed significantly sometimes the fix is no longer needed or you do an equivalent fix)
    Code is built everyday. At the end of everyday we let the QA team know which stories are ready for testing. Developers work on their private branches and at 2 PM merge and build. A list of tickets fixed and stories completed is sent to QA team and they can start testin (what do they do till 2 PM? Work on automation) After 2 Pm developers will not check in code unless its for a fix to one of the stories they sent for testing and QA raised a bug. This is done if the build is broken and QA cannot work else it is fixed in private branch and available next days build. By the end of the sprint pretty much every story has been tested - we dont consider a story done if QA is not done and all P0 and P1 bugs are fixed. Automation may not be complete but at least manual QA is done for the effort to count in that scrums velocity.
    Before every release we have a strenghtening Sprint where we are not doing new functionality rather fixing all leftover P2 and P3 bugs (we do fix these durings Sprints but a story is not considered blocked for P2 and P3). This also gives time for other activities like preparing runbooks and data dumps for the switchover.
    Typically Business UAT team is running one cycle behind the dev and QA team so this also gives them a chance to catch up , do one final round verifying all stories and production tickets for the release and give a signoff. 3 days before we freeze. Typically by this time if we dont have a lot of bugs the team is actually pruning stories for the next release.
    The only tricky part is when we tag and branch and try to start working on the new features during the strenghtening sprint. Then we have to be carefull about merging back the last minute fixes into the next release branch.

    --
    **Life is too short to be serious**
  38. Spend Money by ohnocitizen · · Score: 1

    Hire better, more senior people. Hire more staff if you are understaffed. Because if you have enough developers, and they are seasoned, then together you'll come up with a process that works for YOUR company and YOUR team. Or - be like too many companies in a race to the bottom of underpaying, understaffing, and then complaining when it doesn't work out. Or worse - thinking some process or tool will save the day. It won't, and if it did - you wouldn't deserve it.

  39. Project Management by s1d3track3D · · Score: 1

    We use JIRA but there are many ways to do this. Implement a pipeline that must be followed.

    * User creates a ticket in system (bug/issue, etc).
    * Developer works on ticket (in new branch)
    * Developer get's code review from peer
    * Developer pushes changes to staging server
    * user who filed ticket tests the change/signs off on fix
    * code deployed to QA to test change
    * QA signs off on case
    * Developer merges code from branch to master (or build release engineer)
    * code is released

    I'm sure you've found that 6 weeks is long for a "sprint". 4 weeks should be the max length. Over a million lines of code -- in existence for over 10 years -- gets updates in six-week "sprints" using source control and bug-tracking systems. But now an anonymous reader writes: In theory users report bugs,

  40. Gerrit by nateman1352 · · Score: 1

    Want to keep unapproved changes out and have a cross geo org? Easy, just make Gerrit code reviews mandatory.

    1. Re:Gerrit by tlhIngan · · Score: 1

      Exactly.

      Gerrit requires code be approved before it will merge it into the mainline branches. It replaces a centralized Git server.

      Deployments pull from the official Gerrit mainline, while developers can push/pull into their own private branches without requiring approval. But to push to mainline requires approval and review.

      And there's a full chain of custody - if some bad code gets approved, you can see all the comments and who approved the change.

      It's a bit tricky if you need to revise a fix, but it just means alternate, supported forms of the standard Git commands you're used to.

    2. Re:Gerrit by Wootery · · Score: 1

      Yup. What is this doing on the front-page?

  41. Sarbanes Oxley/SOX ... by Billly+Gates · · Score: 3, Interesting

    ... hides

  42. Different Tack by ytene · · Score: 1

    There's a wealth of excellent suggestion here already, but I'd like to take a different approach to answering your question. Put simply, start with you customer[s]. Your post does not mention but strongly suggests that this software is for in-house use. On that basis, identify your stakeholders and understand their appetite for risk and their desire to move forward quickly.

    As the old adage [of project management] goes: "Do you want this quickly? do you want this with quality> do you want this at low cost? Pick any two..."

    Once you have a clear picture of the risk appetite and operational demands of your client, you are going to be able to make some strategic recommendations about the way you go about developing software. However, one observation I would make is that whatever answer you finally come up with, one of the most important things to realise is that you can't "create" good software quality, it has to be controlled. What this means is that to drive up software quality, you have to apply the right controls to the right steps in the delivery sequence.

    If we were to go just from the text of your post, then we might recommend that you deploy some form of software configuration management (SCM) solution, such as Rational Clearcase or one of the many closed or open source competitors. This will give you "hands off" deployment of code to your Production systems, which means that you can then remove Developer [update] access to Production systems. Of all the things you do, this might be the single most powerful, because now you have created a control that requires all software to go through a formal change process.

    Once this is in place, you might then be able to layer additional requirements on to your process, such as "All changes to Production systems must be approved by the Business Owner of the application being changed". Or perhaps, "All change requests must be accompanied by a User Acceptance Testing Lead sign-off that the code has been tested and accepted." Or maybe, "All changes must be accompanied by a backout plan that has been tested in the UAT or QA environment". Sorry, this kinda assumes you have segregated environments. If you don't, well, good luck, I guess...

    These are, of course, just scattergun suggestions as to things you might like to take a look at. Without conducting an end-to-end risk assessment of your SDLC practices, it's actually difficult to know where to start. However, if you have access to any Industry Standards, then you might find lots of useful "best practice" advice. Among publications I would recommend, you might like to look at:-

    NIST Cyber Security Framework (CSF) Release 1.1 [Free]
    NIST Security and Privacy Controls for Federal Information Systems and Organizations (NIST SP800-53r4) [Free]
    COBIT 5 [Licensed]
    ISO27002 [Licensed]
    ITIL Service Management Framework [See Wikipedia reference Page, Axelos, etc][Licensed]


    In short, there is no shortage of best practice guidance out there. Your challenge will be to look at the size and capability of your organisation, at the risk appetite and budgetary tolerances of your sponsors, then go from there.

  43. I'm somewhat in the same boat where I work. by aix+tom · · Score: 2

    From my experience I suspect the problem doesn't start with "The code being pushed into production" in wrong way, the problem starts with *Users* sending un-coordinated bug reports and feature request directly to the developers.

    Without some program/feature person "In charge" on the user side it feels pretty hopeless.

    The only solution I have come up with for me: Make sure that management KNOWS that without proper procedures in place the is an increased risk of bugs slipping through that might affect production code. It works pretty well so war. We have a few cases of bugs that affect production for a few hours each year, but as long as management understands they lose $X to bugs because they don't want to pay $Y for propper QA procedures, and it's *Their* decision to implement better QA when the cost of bugs increases too much for their tates, and don't blame the developers for it, then it works pretty OK.

  44. Trust by dmorgantini · · Score: 1

    It's a difficult concept I understand, but if you don't trust your engineers it might be time to consider getting new ones. Trust falls into 2 categories: They won't put the wrong thing live and when they do they will fix it quickly.

  45. Re:Easy by MrMr · · Score: 1

    The first correct answer to the question I've seen. Make sure you can revert and fix and assume shit will happen despite all codes of conduct, extreme vetting and review processes you throw at it.

  46. Code reviews: Just say yes by clay_buster · · Score: 4, Informative

    Good shops require at least tone reviewer for each code change. This paper describes the effectiveness of code reviews based on previous studies https://www.cs.umd.edu/project...

  47. Your using the wrong process model / you can't fix by Zero__Kelvin · · Score: 1, Interesting

    Our team size, structure and locations prevent having a single gatekeeper for code check-ins...

    Linus Torvalds disagrees. Your real problem is that you use Agile. Your process is broken by design. Study how the real professionals do it (Linux kernel) and you will learn a great deal.

    --
    Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
  48. How would a user test a fix before production? by rundgong · · Score: 1

    I don't really understand this development model "theory". Are users "end users" or are users in-house testers?
    If they are end users, how would they test the fix before it reaches production code?
    If they are testers and they don't test the fix, who the hell closes the bug report?

    Since you worry about errors getting introduced by merges, it sounds like you are also missing regression testing.

    If you don't do regression testing, and don't verify fixes on the release branch, what the hell is your QA department doing?

    I think the theory you are looking for is this:
    1: Users report bug.
    2: QA verifies the bug on the released code, and also that it exist in latest development code.
    3: Developer fix bug.
    4: QA verifies fix and close the bug report.
    5: Code Freeze. QA does regression testing, and verifies all new fixes still work as intended.
    6: Release!

    There is no need for a single gatekeeper to do merges. Your developers need to be competent enough that they don't routinely break stuff when merging. If they are not capable of getting a merge right most of the time, you need new developers.

  49. Pull requests by loufoque · · Score: 1

    GHE has a new mode where pull requests need explicit approval to be merged, and you can also prevent pushing to the main branch.

    1. Re: Pull requests by buchanmilne · · Score: 1

      New to Github Enterprise?

      Gitlab Community Edition has had this for about 18 months. Pull/merge requests can run automated builds including running tests, the results of which can be seen in the merge review screen. It can also be configured to auto-merge based on testing criteria (coverage, test results etc.).

    2. Re: Pull requests by loufoque · · Score: 1

      18 months counts as new to me, it's not like we upgrade that software every month.

      Nice attempt at advertising for Gitlab, but most companies prefer to use Github Entreprise.

  50. So ... your users are the QA department? by Opportunist · · Score: 3, Insightful

    Hey, not that it's anything unusual, but if you cut corners, expect to be sued for patent infringement by Apple. Or something like that.

    In all seriousness, though, if your USERS report bugs, you have a fundamental problem here. Because this is what it should look like:

    User defines specification. Programmer codes to spec. QA tests if spec is implemented correctly. Program ships. User finds something he doesn't like? It obviously has to be a change request, because the program does what the user specc'd.

    Yes, it is that simple. And yes, I'm fully aware that users don't have the first clue what they actually want. But they will never learn if you keep treating their blunders and imprecise specifications as if it was YOUR fault!

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    1. Re:So ... your users are the QA department? by Tablizer · · Score: 1

      User defines specification.

      For non-trivial projects, often users don't know what the hell they want. They may try to express it, but often express it poorly. After all, they are not experienced techies.

      What they really want is to see it in production, or at least a decent mock-up. That way the impact of their decisions can be seen directly. And often one can devise a better way to do what they really want, but it can take a while to understand what they are really getting at.

    2. Re:So ... your users are the QA department? by filesiteguy · · Score: 1

      Not quite that easy. User and analyst come together and define requirements. Analyst writes specifications, gives to developers, runs UAT with sprint and all looks good.

      Code implemented in production and unrelated issue occurs due to change in code that then forces some other item to be wonky.

      Bug.

    3. Re:So ... your users are the QA department? by antdude · · Score: 1

      Yep, it pissed me off when a dedicated QA doesn't exist. Hence, why so many issues. Speaking of QA, I'm looking for a QA testing job. :P

      --
      Ant(Dude) @ Quality Foraged Links (AQFL.net) & The Ant Farm (antfarm.ma.cx / antfarm.home.dhs.org).
    4. Re:So ... your users are the QA department? by Opportunist · · Score: 1

      Yes, users don't know what they want. And this is THEIR problem, not mine. After paying through the nose a few times, maybe they start thinking BEFORE ordering instead of ordering "something" and then keep patching and tinkering with it 'til it runs as stable as a pig on stilts.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    5. Re:So ... your users are the QA department? by Tablizer · · Score: 1

      Yes, users don't know what they want. And this is THEIR problem, not mine. After paying through the nose a few times, maybe they start thinking BEFORE ordering instead of ordering "something" and then keep patching and tinkering with it 'til it runs as stable as a pig on stilts.

      Earth Living 101, Lesson #1: Humans are NOT rational.

      And, they'll blame the technician for not reading their mind correctly.

    6. Re:So ... your users are the QA department? by Tablizer · · Score: 1

      If the marketing people could not visualise the product to the customers how did they manage to sell it, that's a mystery to me. Did they sell empty promises [?]

      Yes, that's what marketers do. They are bullsh8t artists.

    7. Re:So ... your users are the QA department? by david_thornley · · Score: 1

      Users don't know what they want. That's YOUR problem, not theirs. After paying through the nose a few times, they'll find someone else who can do a better job and you'll be hitting the unemployment office. When you explain why you were let go, nobody will want to hire you for anything other than a junior-level position.

      You're responsible for providing software the users want. Providing software precisely to user specs is ducking responsibility and wasting effort.

      Users are paid to do their job. Their skills usually don't include systems analysis and requirements design. Those are relatively rare and somewhat expensive skills, and it makes sense to hire people with these skills and put them in a department where they'll use them routinely. As you get above junior level (we call it "associate" around here), you will be expected to be able to do more than just code to a spec. If you want to be a senior, you'll be expected to know the business well enough to make intelligent decisions.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    8. Re:So ... your users are the QA department? by david_thornley · · Score: 1

      Analyst writes specifications, gives to coders. Developers are normally expected to do more than translate a spec into machine-readable form.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  51. Wrong question by Bud · · Score: 1

    You don't want to make it even more cumbersome to change the code, as it sounds like you are already struggling with the 10 Mloc codebase. So forget about having humans "approve" the changes.

    What you want to do is make it easy to submit good code and difficult to submit bad code. This means that you will need the capability to quickly assess the proposed patch, for some definition of "good" and "bad". Computers are fairly good at this. In other words: test-first development, with automated testing on several levels.

    Bug comes in, you write an automated user acceptance test that FAILS. Then you try to find and fix the bug. When the newly added test passes, the bug is by definition fixed. Add a couple of unit/module tests, and a couple of UATs for good measure. Rinse and repeat.

    There's plenty of tools for this. All major platforms have the capability for programmatic reflection. Use e.g. Cucumber for the acceptance tests, and the relevant unit test framework for module/unit tests. In addition to the functional tests, try static analysis.

  52. Pull Requests by technomom · · Score: 1

    Unit tests and pull requests. Use them.

  53. Re:Easy by MightyYar · · Score: 1

    In a marketing-driven organization, the software group does not necessarily have this power. If marketing agrees to accept the risks, you sometimes have no choice.

    --
    W..w..W - Willy Waterloo washes Warren Wiggins who is washing Waldo Woo.
  54. Whips. by sabbede · · Score: 1
    Massive whips.

    And attack dogs. Angry attack dogs.

  55. Separation of duties by TomGreenhaw · · Score: 1

    Don't allow developers to promote code - that should be done by a specific role responsible for change management, code review and deployment. Use file system monitoring software to alert and log all changes.

    --
    Greed is the root of all evil.
  56. Just spell out the rules clearly. by sbaker · · Score: 1

    Produce a one-page "procedures" document - clearly, but simply lay out the process in moving code from the programmer's branch to the QA branch and into the production branch. Have everyone read and sign it.

    The first time someone violates it, you give them an informal warning.

    The second time they violate it, have them sit down with management and HR and tell them that if they violate the rules again, they'll be terminated.

    The third time, you terminate them.

    Easy...no automation required...you simply have to cause a change in the 'culture'. Programmers are very good at following rules - providing they are clearly stated and obviously put in place for a reason.

    If you insist on there being an automated system...

    When I've worked on setups like this, we give programmers the rights to do what they like in their own working branch(es) and into the QA branch - but deny them access to the production branch. QA get read-access to the QA branch and are the only people allowed to check stuff into the production branch. Generally programmers get their build together at the end of a sprint - then at the start of the next sprint, QA check it out and either release it or punt it back to the programmers...have two week sprints instead of six so that this doesn't add too much latency into the bug fix cycle. If you're spending more time fixing small bugs than adding large features, then you can temporarily drop the sprint cycle down to one week - if major features are being rolled out - then push the cycle up to at most 3 weeks.

    --
    www.sjbaker.org
    1. Re:Just spell out the rules clearly. by david_thornley · · Score: 1

      The first time someone violates it, you find that another manager ordered it done. The second time, you call management and they say the guy did what he should have. The third time, you make it "him or me" and you really should be prepared for termination. That's how it will work in the typical company.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  57. Project Management System by Elixon · · Score: 1

    I am dealing with similarly sized project for last 13 years. Our workflow is different though. We have continuous updates (no batch updates) when it comes to bug fixing. We use our in-house Project Management system.

    - Client sends a request/bug report, our team creates new Task in our PM and
    - assigns it to department/programmer
    - programmer fixes it, tests it on Devel version puts the task to QC status
    - QC team tests described problem and greenlights deployment
    - programmer deploys/merges the fix into the live version and puts the task to Completed
    - QC team re-tests live version and notifies client of completed task

    Although there are few levels of fixes

    - trivial - we skip the QC status/QC test in the middle, programmer fixes it, tests it and deploys it with setting it to Completed which trigers QC team test and client's notification (really super trivial fixes, text typos etc.)

    - complex - when developing complex new features we freeze the deployment (blocking task) of other patches while the complex task is in QC status to avoid any conflicts during subsequent deployment - QC status ensures that the problem is tested by QC team in exact state it will be deployed and there will not be competing patches deployed before this one. But it blocks other patches. This one has high priority in our PM and gets fast-tracked before every other patch.

    There are many draw backs of every scenario but we try to keep healthy balance between speed/flexibility and super-stability. This yields good results. But the PM (project management) with good prioritization and tracking features is essential. It solves the problems with deployment/testing...

    --
    Well, I've got to get back to work. When I stop rowing, the slave ship just goes in circles.
  58. Lots of details missing here... by p4nther2004 · · Score: 1

    What Source Control Management (SCM) do you use? (Git, SVN, etc? Do you use one?) What Bug Tracking system (Jira, whatever) do you use? (Do you use one?) What Migration process do you use? Do you use tools? I must disagree with another poster. Agile itself is not the problem. However, if your programmers, etc. are not disciplined....they don't all follow the process that everyone agreed to....that is the problem.

  59. CMVC ? by pedz · · Score: 1

    An old system from IBM called CMVC (which is still in use by the way) was not just an SCM but a bug reporting system as well as a build system. A defect is opened. Code changes are tied to that defect. When that happens test records are opened and sent to the person who opened the defect. There is also a verify record created. The build group can not build that defect until the test records are complete. Then they build it. Now you have a defect that is linked to the code changes and linked to a specific build (or builds if you have multiple branches of development).

    It does not prevent the problems mentioned above but it does clearly define who should do what when. Much like sbaker pointed out above. And then you manage the people involved to get them to do their part at the proper time.

    When the complaint comes from a customer the support person takes on the role of the customer and is responsible for the testing. This usually causes support to be broken into pieces. One is solely facing the customer and the other(s) take larger roles in the testing including sometimes setting up tests for the developers to use.

  60. This is easy. by Lumpy · · Score: 1

    you hire a person to be the gatekeeper that does exactly what you want.

    Sorry, but there is no cheap and free way to do this, it's called a project manager and they need to be competent and detail oriented.

    Devs sign off on the code and their own testing, then this person makes sure that the bet testers also tested and signed off on it, then they personally sign off that all is well and OK's publishing to a new gold release.

    Not hard to do, and requires your management to be competent and understand they need to spend money on manpower.

    --
    Do not look at laser with remaining good eye.
  61. Change the Culture and get a Change Review Board by Sean0michael · · Score: 1

    My organization a while ago saw significant issues with untested fixes being deployed and similar bad practices (undocumented configurations, lack of integration testing, etc.). The thing that did it for us was seeing our up-time drop below 99% in production systems. It became downright embarrassing and started costing us real $.

    So our then-CIO froze all production changes for 90 days. In that time, we instituted a change review board. They now approve all production changes. Without the culture change that came with the culture freeze, the new process might have failed. But we bought into it. And by putting them in as the gate-keeper, we now require documented QA approvals.

    So in your case, a Change Management process like this would help. But you'll also need to change the way people care about your production environment. You'll need both, but take heart - it can be done.

    --
    Funtime Candy Wow! - my plan for eventually conquering Japan.
  62. Blurred roles here by Senior+Frac · · Score: 1

    I think your difficulty is that your current work flow obfuscates two roles. You are using your Stakeholders (the users of your software) as the individuals in charge of acceptance. They're likely not motivated, or possibly not qualified, to do so really. Remember they're just interested in getting THEIR work done. If their workflow were "enlightened" like yours, then they might care about process... but probably not.

    The missing piece of the puzzle here is the role of Product Owner. An individual that works with your team in close proximity that prioritizes your work and helps you determine what the acceptance criteria are before you start. Your work is not done until that person accepts the work according to the criteria.

  63. Re:Your using the wrong process model / you can't by Anonymous Coward · · Score: 1

    How in the blue fuck is Agile the problem? Agile does not preclude have a single gatekeeper for code check-ins at all. Clearly you talk without knowing what you are talking about.

  64. Welcome to Software Development by utahjazz · · Score: 1

    This is the part of C++ that you can't learn in 21 days.

  65. I have an idea, call Rusia by Jerry+Diaz · · Score: 1

    Call Russia and ask them for some of those Gun-Shooting robots and install them behind your developers.

  66. Well-defined Devops. by netsavior · · Score: 1

    Developers code. Developers review code. Developers write code to test code.

    Developers can't touch production.
    Automated checks of ANYTHING are golden because you aren't relying on people, and you aren't pitting people vs people.
    It is all about consistency when you boil down to the bones of a well-running team.
    Start with those rules and actually follow them and you end up with a pretty awesome setup, because Developers will naturally gravitate to defensive, test-driven programming when those are the rules.

    1) All code is reviewed before it is merged, this is easily enforcable in bitbucket or github, probably others, but use one of these two anyway. It won't stop all your problems, but it is great triage and it forces lone-wolf mitigation. I don't even care if the reviewer is an expert... this isn't a gate keeper activity as much as it is a sanity check. "hey why did this variable get set, then re-set before you checked it?" or "hey how come you deleted 90 source files?"
    2) All your code goes through some kind of code-quality gate like Sonar Qube or some other Linting tool. This can find and highlight common mistakes, and get them fixed before they are even reviewed. Developers hate to modify a pull request, so give them as many free "oh if I fix this nobody will bother me" wins
    3) All unit tests must pass before code is merged. This is slightly tricky but you are going to need Jenkins or some other tool that is not as widely used as Jenkins; and integrate it into your bitbucket/github.
    4) All deployments are automated. Sure you can have someone push a button, but they shouldn't have to fiddle with anything. And whoever is pushing that button can't be a developer.
    5) Since your deployments are automated, your QA system is exactly like your production system (but maybe smaller scale) this way you are actually testing the thing as it will be deployed. "Kinda sorta how it will work in prod" is never a good test. If your QA deployment is automated, and the deploy is broken in QA, then you have to fix it before it goes to prod. Ideally your developers can't touch QA either, but you can work toward that.
    6) Since your developers aren't touching production, they will be forced to do things like: write actual helpful log messages, not make code changes that break the deploy, and reproduce production problems in Unit Tests so they stay fixed forever.

  67. In this case, yes by Excelcia · · Score: 1

    No, I'm saying that the comment "code ownership is so 1960's", which was obviously meant as a "get with the times grandpa" statement was improper. Good project management practices are timeless, and development strategies and disciplines from the past are not necessarily improperly applied to current projects. A certain amount of centralized command and control is necessary. Where that is applied depends on the technical and cultural aspects of a project. In projects with a strong central scope and well defined design, projects that have good change acceptance procedures and where developers are professional a more distributed and loose change creation process can be applied, a la Git. In projects where there is not a strong central change acceptance process and where the scope definition and design are loose, a much more rigid change creation process must be adhered to, like change management systems from the past (CVS, VSS). Like applying Gantt charts and other staging tools to the change scheduling process. Like anything except the "stick a bunch of developers together with a bunch of code together in a blender and set it to frappe" process that is being applied now.

    In this project (if it's actually a real project and not just another Slash-question carefully crafted to incite discourse), there is no viable command and control on the management end and there is none on the revision control end. Which leads to a project mired in anarchy as we see is the case. There are no tools that can help at this point. There is no substitute for a disciplined methodology. What was depicted in the question was completely unprofessional.

    To answer your question, reverting to punch cards would be a step up for this project.

  68. You are missing QE/QA in your process. by enjar · · Score: 1

    You are missing a quality engineering or quality assurance group -- a group that's independent of the developers and specializes in developing appropriate tests, test harnesses, test automation and also provides another set of eyes on features and bug fixes.

    Our process:

    Bug is reported or feature request is approved for developer to work on.

    Development cycle:
    Developer implements feature / fixes it. Ideally based on design of fix/feature, QE develops test plan/tests. A lot of work can happen concurrently. Some people even write the tests first, then code second.

    Code review code and fixes with other knowledgeable developers (and QE)
    Repeat this cycle till feature/fix and tests are ready.

    Fix is submitted to integration system with appropriate tests.

    QE (most definitely NOT the developer) verifies 1) software works 2) regression test actually ran. Ideally this is a completely separate QE from the one who did the submission, but this depends on resources.

    Software enters customer release process (dev and qe largely forget about it and move onto something else)

    Customer release process runs tests (or some representative subset of) against a consolidated build of "everything" to check for integration issues.

  69. Whole lotta wrong in that. by thesandtiger · · Score: 1

    The golden path should be:
    1) User reports a problem to the service desk.
    2) Service desk looks into the problem and either addresses it if it's user error or punts it to QA/testing.
    3) QA/testing investigates and documents as much as possible about the bug - replication steps, affected screens, whatever. They would do this both in production and a staging environment to see if it's an environmental issue.
    4) Developer takes the bug and figures out the issue, creates a fix, which is then sent back to QA/testing.
    5) QA/testing tests the fix in a staging environment and signs off on it.
    6) Fix gets deployed to pre-prod staging, QA tests it.
    7) Fix gets deployed to production, QA tests it.

    I get that in smaller shops devs tend to just push stuff out (I worked in a few of those) but that's really not a great way to do things.

    --
    Since I can't tell them apart, I treat all ACs as the same person.
    1. Re:Whole lotta wrong in that. by david_thornley · · Score: 1

      I was on contract-for-hire at a bank when I was told to advance something into production. What I didn't realize was that the production version had been changed on the fly, with nothing in source control. I'm fairly sure that's why the manager didn't want to hire me, and I know perfectly well that's why I didn't want to be hired there.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  70. Use git branches and let each branch be tested ... by ThluksatorStrauch · · Score: 1

    individually on a staging environment. It would even be possible to fire up stage instances for each branch automatically.

    I don't see a big problem here.

  71. Re:Linus Had A Good Talk On This In Relation To GI by ZenShadow · · Score: 1

    I use git for non-distributed development, and it works better than any other source control system I've used (and I've used quite a few). Has its quirks, but so do they all.

    I do miss $Id$, though.

    --
    -- sigs cause cancer.
  72. Add code review to your definition of done by Frans+Faase · · Score: 1

    At the company where I work, we review each other code changes. If you are using Jira (or similar bug tracking system) it easy to introduce a review step. If you use a code management system (and you should) you can do development in branches and have the reviewer (who preferable also performs a test by checking if the scenario mentioned in the bug report now works correctly) merges the branch to development if no problems are found. Otherwise the issue is reverted to open. Code review is a very powerful technique for finding bugs. It also helps understanding the code base, because developers tend to be drawn to certain parts of the code, often to the point that they are considered the owners. Code reviewing code written by others also helps you get better at developing software, because often you will find solutions that you had not thought about yourself. And because you review each others code, the learning goes in both directions. I sometimes spend more time on reviewing code than the fixer spend on solving the issue. Often I walk over to the developer to ask some questions, why he or she has chosen a certain solution. Sometimes, they give a good answers, sometimes it leads to a short discussion, and it even happens that the developer him/herself realizes that there is another case that will go wrong as well, and that the bug needs to solved in a different way. If you are using Scrum or similar development methods with short cycles/sprints, make code review part of your definition of done, meaning that an issue is not demonstrated as fixed (or included in a release) if it has not been code reviewed.

  73. Test code required by jraff2 · · Score: 1

    Make it mandatory that the test for the error be part of the submission, then the developer has the code to test for the error/bug/problem etc. Yeah it might get problematic, but better to have the error actually checked than not.

  74. corporal punishment by OrangeTide · · Score: 1

    Most developers respond strongly to physical pain.

    --
    “Common sense is not so common.” — Voltaire
  75. Ummm... by tlambert · · Score: 1

    > 552 Fuck off -- the requested action was requested by a dweeb

    Obvious much?

  76. Feature Branches, Release Branches by Afty0r · · Score: 1

    Each "change" (whether it is a fix or new feature) can be developed within its' own branch.

    This branch is then deployed to one of your UAT environments for user testing (once it has passed QA, static analysis, code review etc.)

    When the time comes for a release, you "roll up" your approved feature branches by merging them into a single release branch. On this branch you carry out extensive QA and regression testing. This is then the branch which is released (deployed).

    Using this method any changes which have not been APPROVED as a feature branch never make it into your final deployment package. (though they still exist and can easily be added in future by merging).



    (note if you have limited number of UAT environments this becomes complex and needs a schedule and conflicts can occur - or proper devops and more environments).

  77. DevOps by Arkham · · Score: 1

    You make it so there is only one path to production. Use CI/CD with build promotion based on criteria. Don't give anyone the ability to install production code directly. You install code, configuration, and settings the same way -- though source control

    1. developer writes code
    2. developer creates pull request
    3. request triggers a build that runs unit tests and static analysis
    4. on success, code review is performed
    5. on success, build is merged to release branch, which causes build promotion to QE environment
    6. on successful testing, artifact of QE process kicks off build promotion to staging
    7. performance tests and integration tests are run
    8. artifact of successful integration tests cause build promotion to production

    If you have a process like this, it's simple and nothing gets into production that should not. This goes for configuration changes too.

    --
    - Vincit qui patitur.
  78. An ounce of prevention is worth a pound of cure by raymorris · · Score: 1

    Companies that don't do testing and code review spend 80% of their time running around putting out fires. There are other fires they don't even know about yet.

    Companies who do code review spend 10% of their time on that, and their developers stressed out all the time trying to put out fires.

    Doing it right is much cheaper than doing it over.

  79. Doing it right is faster than doing it over by raymorris · · Score: 1

    > a lot of risks are eliminated or realized before things go out the door; in practice, this means a fairly conservative and slow development process.

    At one place I worked, we were very fast at getting new requests developed and out the door - because we weren't busy fixing the code we shipped six months earlier, and the code we shipped last week. So it may *look* slow if you watch a careful process in action from minute to minute, but it's much faster on a macro scale - features get released sooner when developers aren't running around putting out fires that they themselves kindled.

  80. Product Owner(s) by stardaemon · · Score: 1

    The product owner is simply an individual responsible for the product.
    Users report bugs to the product owner, not the dev.
    The product owner is then responsible for any requirements updates, scheduling of developer(s), test(ers) and whatever else might be needed.

    --
    The only way to stay sane in an insane world, is to be mad yourself...
  81. Re:differant code signing certs by david_thornley · · Score: 1

    Why do we need signatures? You can use "svn blame" to find what I did without bothering with a signature. Code goes into the release branch and that is put into production when ready, all without signatures.

    --
    "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  82. Solved years ago by ebvwfbw · · Score: 1

    This was solved at least in the 1980s when we used to do it. The solution is to freeze the code. Pick a date and at that point the source code is frozen. Move it to a test machine if you have to, however no new changes are allowed. Build it and test it. If it's good (and therefore approved), release it.

    I think we used to use sccs, however any revision control system will do. All of us developers had our own tree. In fact, the entire tree, linked file by file,dir by dir. This was back in the days when the largest drive you could get was a couple of gig, maybe not even that. I could check out my own version of code, update it and compile it all into my version of that program for testing. There were maintenance commands to resync all the links and such to stock, update the real source tree and such. Every night a new version would build. This was world wide.

    If your asking about just some guy changing code on his own, a rogue guy, that's a daily management chore for someone (that isn't responsible for coding, a separation of duties). You'll have to rsync everything to someplace you trust to be the authority. Someplace the other people can't get to because some people will play games. Then check it all for a status to see what's changed. Do you have approvals for all the changes? If not, roll it back, find the offender and have a little talk with them about that. If everything is approved, check it all in. Make sure all of this is kept track of every day. I do this all the time. I had a case a couple of years ago that a manager swore his machine was set a certain way. I had subversion control over it. I told him how the machine was set up from day one to today. He was right, it was set up the way he thought years ago. Then about 2 weeks later he changed it to the way it is now. I had the change, date, even his e-mail and ticket to change it. So it was approved and he knew about it. He thanked me for my efforts and moved on. You have to be able to do this. Developers are great people, very creative, smart, etc. However sometimes they can be real assholes. Especially young ones that never make any mistakes and it could be years later and they don't remember. Once you show them, they're fine. No problem.

    Good luck.