• 2 Posts
  • 20 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.



  • Mint was a reaction to Gnome 3, the unique workflow upset a lot of people and the people behind Mint decided to build Cinnamon desktop (its Gnome 3 made to look/work like Gnome 2). They needed a distribution to build/test their work and so based a distribution off of Ubuntu and called it Mint.

    As a bit of explanation, there are only a few projects which attempt to build an entire linux distribution from scratch. This involves finding code from thousands of sources, work out packaging, etc… We call these ‘base’ distributions, Debian is the base distribution for Ubuntu, Ubuntu is the base distribution for Mint.

    Ubuntu tends to be slightly ahead of Debian in the software versions it uses and automatically enables the ‘non-free’ repositories. Ubuntu tends to push some Canonical specific things like Snaps (which everyone hates)

    I believe Mint rolls the Canonical specific things out of Ubuntu and you get the latest version of Cinnamon.

    Its all a bit…


  • If its for work I would suggest picking a “stable” distribution like Debian, Kubuntu or OpenSuse.

    A lot of people recommend Arch or Fedora but the focus of those is getting the very latest releases, which increases your chance of stuff breaking.

    A lot of people will suggest niche distributions, those can be great for specific needs but generally you will always find Debian/Ubuntu/RHEL support for commercial apps.

    I would also suggest looking at the KDE Desktop, many distributions default to Gnome but it is unique in how it works, KDE (or XFCE) will provide a desktop similar to Windows 11.

    Lastly I would suggest looking at Crossover Linux by Codeweavers.

    Linux has something called WINE, its an attempt to implement the Windows 95 - 11 API’s so windows applications can run on linux.

    WINE is how the Steam Deck/Linux is able to play Windows games. Valve embedded it into Steam and called it “Proton”.

    WINE is primarily developed by Codeweavers and they provide the Crossover application that makes setting up and running a Windows application really easy.

    People will mention Lutris but that has a far higher learning curve.

    There is an application database so you can see in advance if your applications would work: https://appdb.winehq.org/



  • This advice isn’t grounded in reality.

    Management normally defines ways to track and judge itself, these are typically called Key Performance Indicators.

    KPI’s are normally things like contract value growth, new contracts signed, profit margin, etc…

    So if the project manager is meeting or exceeding their KPI’s and you walk up to their boss telling them the PM is failing as basic job functions, the boss won’t care.

    This is because the boss might have set the KPI’s or the boss might also be judged on them. In either situation its to the bosses advantage to ignore you.

    The boss will only care if there is a KPI you can demonstrate the PM failing to meet.

    Every person/group will have various incentives and motivations. To affect change you have to understand what they are.


  • A project manager has responsibility for delivery of a project but they typically lack domain specific knowledge. As a result they can’t directly deliver something, merely ask subject matter experts for advice and facilitate a team to deliver.

    Most PM’s cope with the stress of this position poorly.

    This cartoon is an example of micro management (a common coping mechanisim), the manager has involved themselves in the low level decisions because that gives a sense of control. If a technical team then tell them its a bad decison the team are effectively attacking their coping mechanisim.

    The solution isn’t to tell them their technical idea is terrible, when you’ve fallen down this rabbit hole you have to treat the PM as a stakeholder. They are someone you have to manage, so a common solution is to give them confidence there is a path to delivery, a way to track and understand it.


  • 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


  • Similar to most navies.

    Engineering’s workload won’t really change, they’ll do certain types of maintenance.

    Most navies don’t have command staff on the bridge full time. There would be a watch officer who is fairly junior learning how to operate the ship so the down time is an opportunity for them to grow and learn.

    Most navies seperate the captain and first officer, with the first officer involved in running the ship and the captain running the big picture.

    So you would expect the first officer to spend the time checking on every department to ensure they are up to standard.

    That would mean department heads would be running drills or bringing equipment down for maintenance so its ready.

    The captain would likely be planning and thinking through the encounter.

    For any free time senior officers have there is probably a mountain of reports (personnel, ship, intelligence, etc…) to read and keep tabs on.


  • During the pandemic I had some unoccupied python graduates I wanted to teach data engineering to.

    Initially I had them implement REST wrappers around Apache OpenNLP and SpaCy and then compare the results of random data sets (project Gutenberg, sharepoint, etc…).

    I ended up stealing a grad data scientist because we couldn’t find a difference (while there was a difference in confidence, the actual matches were identical).

    SpaCy required 1vCPU and 12GiB of RAM to produce the same result as OpenNLP that was running on 0.5 vCPU and 4.5 GiB of RAM.

    2 grads were assigned a Spring Boot/Camel/OpenNLP stack and 2 a Spacy/Flask application. It took both groups 4 weeks to get a working result.

    The team slowly acquired lockdown staff so I introduced Minio/RabbitMQ/Nifi/Hadoop/Express/React and then different file types (not raw UTF-8, but what about doc, pdf, etc…) for NLP pipelines. They built a fairly complex NLP processing system with a data exploration UI.

    I figured I had a group to help me figure out Python best approach in the space, but Python limitations just lead to stuff like needing a Kubernetes volume to host data.

    Conversely none of the data scientists we acquired were willing to code in anything but Python.

    I tried arguing in my company of the time there was a huge unsolved bit of market there (e.g. MLOP’s)

    Alas unless you can show profit on the first customer no business would invest. Which is why I am trying to start a business.



  • 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.




  • Just to add.

    Look at any hobby in your life and break out the money spent vs the enjoyment you got out of it.

    For example the Cinema costs me £10 and a film is 2 hours long, meaning my fun time costs £5 per hour.

    A £100 console would have to provide me 20 hours entertainment for it to be comparable to going to the cinema.

    These days any PS4 game will have 10-40 hours content, but buying them costs money. Popping on CEX website the most expensive PS4 games are £12. Assuning you only get 10 hours of fun from a game…

    The question you should ask yourself is are there 3 games on the PS4 you are interested in playing?



  • I think there is a focus on C/C++ to justify Pythons performance.

    There have been times when the performance of Node js/Python were part of the reasoning for choosing Java/Scala.

    Each time you are regaled with how Python is C/C++ underneath and so faster. Each time you have to ask if they will write C/C++ libraries to ensure the application performance meets our needs.

    Similarly any time you go near lambas you get a comment on how python lambdas are faster because its C running, where as Java has to start a virtual machine, etc…

    3 different companies samething



  • The big argument for mono repos is checking out multiple repositories is “hard” while checking out one repository is “easy” but…

    Service Oriented Architecture became a thing because monolithic code bases were often becoming spaghetti. I worked on a project where removing an option from a preference window (max map zoom), broke a message table (because the number of visible rows in a table (not its size in the UI) was linked to the max zoom you supplied to a map library, for no reason).

    Thus the idea you should wrap everything you do as a self contained service, with a known interface. The idea being you could write an entirely new implementation of a service, implement the interface and everything would work. Microservices are a continuation of this idea.

    Yet every node/python based mono repo I have seen will have python files directly imported filed from inside anouther component/service. Not simply common aretfacts but all sorts of random parts. Subverting the concept of micro service (and recreating the problem).

    Separate repositories block this because each repository will be built in isolation on a CI, flagging the link. This forces you to release each repository and pull things in as a dependency. Which encourages you to design code to support that.

    A common monorepo problem is to shove everything in a docker image and call it a day. Then if you need a class from one monorepo in anouther one, you don’t have an artefacts so lazy devs just copy/paste files between monorepos.

    Monorepos aren’t bad practice by themselves, they encourage bad practice. Separate repositories encourage good practice (literally the need to manage them separately drives it).