in reply to Rediscovering Hubris

What you're saying sounds reasonable if working solo ... but not if working in a large team for a large organisation. How many developers are in your team at work? How do you organise your teams at work and how do you go about improving teamwork?

To illustrate where I'm coming from, some points derived from Why Create Coding Standards and Perform Code Reviews? follow.

Successful software tends to live a long time: bugs are fixed; new features added; new platforms supported; new versions of the language and its libraries are released; the software adapted to new markets. That is, successful software development is a long term activity. Planning for success means planning for your code to be maintained by a succession of many different programmers over a period of many years. Not planning for that is planning to fail.

Programming is easy, Engineering hard. You need to hire programmers with sound technical skills and domain knowledge, enthusiastic, motivated, get things done, keep the code clean, resilient, innovative, team players ... and then motivate them, train them, keep them happy so they don't want to leave, yet have effective handovers when they do ... a hard problem. Yet to be successful that's what you need to do.

Replies are listed 'Best First'.
Re^2: Rediscovering Hubris
by dsheroh (Monsignor) on Jan 18, 2021 at 09:28 UTC
    I'm not seeing how this is a refutation of the OP. Good teamwork doesn't require coding against bleadperl and using all the latest whiz-bang FOTM modules from CPAN. Shunning CPAN is going rather overboard, certainly, but doing good engineering requires building on a solid foundation of proven technologies rather than chasing the "latest and greatest" new shiny. Particularly when you know the proven technologies will still be there in the long term, but the new shinies might not.

      Some of the “latest and greatest” Perl libraries are 15 years old.

      I wrote this up at some point better but here’s the tl;dr: someone could write the most genius library in Perl history but if it comes without full tests, documentation, a ticket queue… it is hurdle riddled nonsense as far as value to other hackers, coworkers, and inheritors. And unless one is a “class A hacker,” as the animes say, the chances of the software being actual genius is basically zero.

      If that sounds like I discourage writing stuff from scratch, I don’t. I have always advocated for as many new libraries and experiments as possible, while also being quite judgemental of low quality releases and output of other paid devs. Hobby, experiment, personal project? Anything goes. Leaving a mess for others? Not cool.

      Fair enough. Yes, it's true you want to be solid, but I also feel it's vital to do more. Here's why.

      If you're successful in the long term, sooner or later you're gonna need to upgrade ... and developing a strong upgrade capability early forces you to implement high automated test coverage early ... which confers many benefits, listed at Effective Automated Testing.

      With high automated test coverage in place, you can confidently test your software with many different versions of Perl and libraries ... which may flush out further bugs (e.g. a test may pass with one version of Perl/library but fail with a different version). In summary then, developing a strong upgrade/autotest capability early improves code quality.

      It also gives a psychological boost - you no longer fear/dread having to upgrade or port to a new platform, you welcome it! You can easily run experiments with different versions of Perl and libraries to verify that everything still works and to see if they run faster or slower and by how much.

      Finally, being able to gracefully move to the latest and greatest may help with recruiting top notch developers (especially younger ones). Admittedly most of my experience here is with C++ programmers but, especially the younger ones, are usually energized by using the latest and greatest features.

      Regarding teamwork, you are right, I was out of line, I was imagining the arguments between Leitz and some of the younger guys at work who love using the latest and greatest. :) I've experienced many heated arguments in teams over the years, as indicated at Conflict in Teams, so have learnt the hard way that it is vitally important to clear the air and get everyone pulling in the same direction.

        @eyepopslikeamosquito, I really like the posts you're linking to, thanks! Something for today's study.

        From skimming those posts, I think we agree on a lot. So far at work I've finagled using VCS branches and not pushing code straight to the production branch during a release cycle (we are not CI/CD), requiring peer review before merging into the release branch, requiring a test document for each set of changes, automated some of the build steps, significantly increased the automated testing, and have written several documents that explain the code base processes.

        Most of that comes from reading "Working Effectively With Legacy Code". Being the "new guy" in an established code base gave me the openness to see what wasn't tested or documented. It has been a challenge. In a chat with Matt S Trout (of Shadowcat fame), he pointed out that dealing with a large code base is a skill of its own. That was super encouraging, I went from feeling really really really behind to just really really behind. :P

        I also failed to communicate something that impacts what you wrote. I work on system tools that rely on the customer's OS version of Perl. We don't embed Perl into the tool, and the customer base tends to use older OS versions. If our tool was only used in-house then your initial points are appropriate, and upgrading Perl is a really good idea.

        Chronicler: The Domici War (domiciwar.net)

        General Ne'er-do-well (github.com/LeamHall)