• 1 Post
  • 16 Comments
Joined 1 year ago
cake
Cake day: June 15th, 2023

help-circle

  • This is about thew new starter cost.

    When a developer joins a team, they will not be as productive as they have to learn the code, frameworks, libraries, the project purpose, the tooling, etc… Often this impacts other members of the team lowering the entire teams productivity.

    When you use productivity tracking (e.g. things like capacity planning) you will see the teams performance drop and it will take time for it to exceed the previous measured performance. This is the cost of adding a new starter.

    So if it takes 6 weeks for a new starter to increase overall team producitivty then planning someone on a project for 4 weeks is pointless since the team will have a higher delivery rate without the extra person. This is typically why an organsation loses its ability to migrate staff between projects.

    Code formating affects the layout of the code and our brains do all sorts of tricks around pattern recognition, so if your code formatting rules are too different a someone migrating between projects has to spend time looking for code and retraining their brain.

    Its an additional barrier and a one within an organisations skills to remove (by forcing a common code standard).



  • Python is unique in formatting forms part of the syntax, every language has linters but its far more common for orgs to tweak the default rules .

    For example Java has Checkstyle. The default rules ‘sun checks’ give a line length of 80, tabs are 4 spaces and everything is placed on a new line.

    Junior devs inevitably want to trash the line length (honestly on 1080p monitors, 120 makes sense,).

    There is always a new line/same line discussion (everyone perfers same line but there is always one die hard new line person).

    The tab width discussion always has one junior dev complain that “tabs are better”, as someone who started development on Visual Studio 6 where half the team double spaced, the other half used tabs. Those people get a lecture from me on how we can convert tabs to spaces but not the inverse so it will always be spaces if I am near.

    With Checkstyle you upload the rule file as an artifact into your M2 repository. Then you can pull it down as a dependency when the checkstyle plugin runs.


  • I avoid any company that requires a software test before the interview.

    I worked for a company that introduced them after I joined, I collected evidence all of the companies top performers wouldn’t have joined since we all had multiple offers and having to do the test would put people off applying. The scores from it didn’t correlate with interview results so it was being ignored by everyone. Still took 2 years to get rid of it.

    The best place used STAR (Situation Task Action Result) based interviews. The goal was to ask questions until you got 2 stars.

    I thought these were great because it was more varied and conversational but there was a comparable consistency accross interviewers.

    You would inevitably get references to past work and you switch to asking a few questions about that. Since it was around a situation you would get more complete technical explanations (e.g. on that project I wrote an X and Y was really challenging because of Z).

    I loved asking “Tell me about something your really proud off”. Even a nervous junior would start opening up after that question.

    After an hour interview you would end up with enough information you could compare them against the company gradings (junior, senior, etc…).

    This was important because it changed the attitude of the interview. It wasn’t a case of if the candidate would be a good senior dev for project X, but an assessment of the candidate. If they came out as a lead and we had a lead role, lets offer them that.


  • If you signup to social media it will pester you for your email contacts, location and hobbies/interests.

    Building a signup wizard to use that information to select a instance would seemto be the best approach.

    The contacts would let you know what instance most of your friends are located (e.g. look up email addresses).

    Topic specific instance, can provide a hobby/interests selection section.

    Lastly the location would let you choose a country specific general instance.

    It would help push decentralisation but instead of providing choice your asking questions the user is used to being asked.


  • If you read the reports…

    Normally JPL outsource their Mars mission hardware to Lockheed Martin. For some reason they have decided to do Mars Sample Return in house. The reports argue JPL hasn’t built the necessary in house experience and should have worked with LM.

    Secondly JPL is suffering a staff shortage which is affecting other projects and the Mars Sample Return is making the problem worse.

    Lastly if an organisation stops performing an action it “forgets” how to do it. You can rebuild the capability but it takes time.

    A team arbitrary declaring they are experts and suddenly decideding they will do it is one that will have to relearn skills/knowledge on a big expensive high profile project. The project will either fail (and be declared a success) or masses of money will be spent to compensate for the teams learning.

    Either situation is not ideal


  • I have always had 1 question.

    In voyager we see the Borg have thousands of ships of varying sizes and control a vast area of space. Voyager is able to take down spheres and small cubes.

    Yet in Wolf 359 a single cube attacks and destroys hundreds of star fleet vessels. If a single cube is able to have that level of effect why didn’t the borg commit a larger fleet?

    You have the same issue in First Contact, they only commit 1 cube.

    Considering how difficult the federation finds holding them back, attacking with 3-6 cubes would seemto assure victory


  • The GAO has performed an annual review of the Space Launch System every year since 2014 and switched to reviewing the Artemis program in 2019.

    Each year the GAO points out Nasa isn’t tracking any costs and Nasa argues with the GAO about the costs they assign. Then the GAO points out Nasa has no concrete plan to reduce costs, Nasa then goes nu’uh (see the articles cost reduction “objectives”).

    The last two reports have focused on the RS-25 engine, last time the GAO was unhappy because an engine cost Nasa $100 million and Nasa had just granted a development contract to reduce the cost of the engine.

    However if you took the headline cost of the contract and split it over planned engines it was greater than the desired cost savings. Nasa response was development costs don’t count.

    Congress reviews GAO reports and decides to give SLS more money.


  • The other person was just wrong.

    Large scale Hydrogen generation isn’t generated in a fossil free way, Hydrogen can be generated is a green way but the infrastructure isn’t there to support SLS.

    Hydrogen is high ISP (miles per gallon) by rubbish thrust (engine torque).

    This means SLS only works with Solid Rocket Boosters, these are highly toxic and release green house contributing material into the upper atmosphere. I suspect you would find Falcon 9/Starship are less polluting as a result.

    Lastly the person implies SLS could be fueled by space sources (e.g. the moon).

    SLS is a 2.5 stage rocket, the boosters are ditched in Earths Atmosphere and the first stage ditched at the edge of space. The current second stage doesn’t quite make low earth orbit.

    So someone would have to mine materials on the moon and ship them back. This would be far more expensive than producing hydrogen on Earth.

    Hydrogen on the moon makes sense if your in lunar orbit, not from Earth.


  • Do not mix tabs and spaces.

    Its impossible to automate checking that tabs were only used for indentation and spacing for precise alignment. So you then take on a burden of manually checking

    You end up with the issue where someone didn’t realise and space idented or anouther person used tabs for precise alignment and people forget to check the whitespace characters in review and it ends up going inconsistent and becoming a huge pile of technical debt to fix.

    Use only one, you can automate enforcement and ensure the code renders consistency.



  • Years ago there was no way to share IDE settings between developers.

    You ended up with some developers choosing a tab width of 2 spaces, some choosing 4 spaces and as there was no linting enforcement some people using 2-4 spaces depending on their IDE settings.

    This resulted in an unreadable mess as stuff was idented to all sorts of random levels.

    It doesn’t matter if you use tabs or spaces as long as only one type is consistently used within a project.

    Spaces tends to win because inevitably there are times you need to use spaces and so its difficult to ensure a project only uses tabs for identation.

    IDE’s support converting tabs into spaces based on tab width and code formatting will ensure correct indentation. You can now have centralised IDE settings so everyone gets the same setup.

    Honestly 99% of people don’t care about formatting (they only care when consistency isn’t enforced and code is hard to read), there is always one person who wants a 60 charracter line width or only tabs or double new lined parathensis. Who then sucks up huge amounts of the team time arguing their thing is a must while they code in emacs, unlike the rest of the team using an actual ide.


  • I am actually arguing for a stable ABI.

    The few times I have had to compile out of tree drivers for the linux kernel its usually failed because the ABI has changed.

    Each time I have looked into it, I found code churn, e.g. changing an enum to a char (or the other way) or messing with the parameter order.

    If I was empire of the world, the linux kernel would be built using conan.io, with device trees pulling down drivers as dependencies.

    The Linux ABI Headers would move out into their own seperately managed project. Which is released and managed at its own rate. Subsystem maintainers would have to raise pull requests to change the ABI and changing a parameter from enum to char because you prefer chars wouldn’t be good enough.

    Each subsystem would be its own “project” and with a logical repository structure (e.g. intel and amd gpu drivers don’t share code so why would they be in the same repo?) And built against the appropriate ABI version with each repository released at its own rate.

    Unsupported drivers would then be forked into their own repositories. This simplifies depreciation since its external to the supported drivers and doesn’t need to be refactored or maintained. If distributions can build them and want to include the driver they can.

    Linus job would be to maintain the core kernel, device trees and ABI projects and provide a bill of materials for a selection of linux kernel/abi/drivers version which are supported.

    Lastly since every driver is a descrete buildable component, it would make it far easier for distributions to check if the driver is compatible (e.g. change a dependency version and build) with the kernel ABI they are using and provide new drivers with the build.

    None of this will ever happen. C/C++ developers loath dependency management and people can ve stringly attached to mono repos for some reason.


  • The linux kernel is very old school in how it is run and originally a big part of the DevSecOps movement was removing a lot of manual overhead.

    Moving on to something like Gitea (codeberg) would give you a better diff view and is quicker/easier than posting a patch to a mailing list.

    The branching model of the kernel is something people write up on paper that looks great (much like Gitflow) but is really time consuming to manage. Moving to feature branch workflow and creating a release branches as part of the release process allows a ton of things to be automated and simplified.

    Similarly file systems aren’t really device specific, so you could build system tests for them for benchmarking and standard use cases.

    Setting up a CI to perform smoke testing and linting, is fairly standard.

    Its really easy to setup a CI to trigger when a new branch/pr is created/updated, this means review becomes reduced to checking business logic which makes reviews really quick and easy.

    Similarly moving on to a decent issue tracker, Jira’s support for Epic’s/stories/tasks/capabilities and its linking ability is a huge simplifier for long term planning.

    You can do things like define OKR’s and then attach Epics to them and Stories/tasks to epics which lets you track progress to goals.

    You can use issues the way the linux community currently uses mailing lists.

    Combined with a Kanban board for tracking, progress of tickets. You remove a ton of pain.

    Although open source issue trackers are missing the key productivity enablers of Jira, which makes these improvements hard to realise.

    The issue is people, the linux kernel maintainers have been working one way for decades. Getting them to adopt new tools will be heavily resisted, same with changing how they work.

    Its like everyone outside, knows a breaking the ABI definition from the sub system implementation would create a far more stable ABI which would solve a bunch of issues and allow change when needed, except no one in the kernel will entertain the idea.


  • It never quite finds its grove.

    Season 1, 2 & 3 all had fantastic premises I would have loved 7 seasons of but were all unrelated and concluded within a season.

    Season 4 actually demonstrates the missed opportunity, they deal with the fall out of season 3

    For example if you think of the scene set in “A Vulkan Hello”, you would have ended up with an Action focussed version of DS9.

    You didn’t need a spore drive, Jason Isaacs could have stayed the same and we could still have watched scientists struggle to become soliders with the war causing the type of fall out we see in Season 4.


  • Activity Pub has a few parts, Lemmy implements the Threaded message part.

    Mastodon implements a short messaging (posts) part. Meta’s Threads will implement this.

    KBin implemented both parts, within KBin you’ll see microblog as an option for magazines (communities/subredits). This shows either ‘posts’ made to the magazine or posts with hastags associated with the magazine.

    The posts and threaded message parts have overlap in how they work so mastodon users can see certain threaded messages and comment on them.


  • KBin/Lemmy should provide a combined local view for duplicated magazines/communities across the fediverse. Treating the concept like a hashtag.

    The point of the fediverse is to distribute content so no one has a monopoly. People squatting on communities/magazines don’t understand there is nothing stopping people creating one on a hundred other instances.

    Each kbin/lemmy instance decides to follow magazines/communities from others through activity pub and stores it locally for the instance.

    Having the UI retrieve all local posts with the same magazine/community name (e.g. m/star_trek@kbin.social c/star_trek@lemmy.world). Wouldn’t be hugely difficult, I believe Kbin uses postgres database as the local store and suspect it would be a tweak to the SQL query it runs.

    Even if that wasn’t an option, there is a means to get all of the magazines/communities from the kbin UI/lemmy REST API. As well as retrieve all posts for a specific magazine/community. So you could do it entirely in a web client, for KBin it would be more work.

    The combined view wouldn’t change how you comment on specific posts. The issue is where do you post and what view would take dominance (e.g. if a magazine had themed itself).

    The solution here would be to default your local instance if it exists or the instance providing the most posts/comments. Perhaps with a drop down so users can choose.

    I would also configure things so instances can select a site wide default if they can’t moderate it effectively. For example pushing all posts to the star trek instance rather than local magazine with a mod who is MIA.

    This would remove most of the concerns users have about the fediverse, since they wouldn’t be confronted by different instances. To them the fediverse is <insert instance> it would also encourage distribution of content.