• 201 Posts
  • 1.25K Comments
Joined 3 years ago
cake
Cake day: June 11th, 2023

help-circle
  • they asked me if I could develop some useful metrics for technical debt which could be surveyed relatively easily, ideally automatically

    This is where I would have said “no, that’s not possible” or had a discussion about risks where things you simply can’t cover with automated metrics would lead to misdirection and possibly negative instead of positive consequences.

    They then explore what technical debt is and notice that even many things outside of technical debt have significant impact you can’t ignore. I’m quite disappointed they don’t come back to their metrics task at all. How did they finish their task? Did they communicate and discuss all these broader concepts instead of implementing metrics?

    There’s some metrics you can implement on code. Test coverage, complexity by various metrics, function body length, etc. But they only ever cover small aspects of technical debt. Consequently, they can’t be a foundation for (continuously) steering debt payment efforts for most positive effects.

    I know my projects and can make a list of things and efforts and impacts and we can prioritize those. But I find the idea of (automated) metrics entirely inappropriate for observing or steering technical debt.


  • As a lead dev I have plenty of cases where I weigh effort vs impact and risk and conclude to “this is good enough for now”. Such cases are not poor management - which I assume you mean something like “we have to ship more faster, so do the shortest”. Sometimes cutting corners is the correct and good decision, sometimes the only feasible one, as long as you’re aware and weigh risks and consequences.

    We, and specifically I, do plenty of improvements where possible and reasonable. Whatever I visit, depending on how much effort it is. But sometimes effort is too much to be resolvable or investable.

    For context, I’m working on a project that has been running for 20 years.






  • I would say doneness is about completeness within context, not immutability.

    The environment may change, but within context, it can still be considered done.

    It’s fine to say and consider software never done, because there are known and unknown unknowns and extrapolations and expectations. But I think calling something done has value too.

    It is a label of intention, of consideration, within the current context. If the environment changes and you want or need to use it, by all means update it. That doesn’t mean the done label assigned previously was wrong [in its context].


    We also say “I’m done” to mean our own leave, even when there is no completeness on the product, but only on our own tolerance.

    In the same way, if you shift focus, done may very well be done and not done at the same time. Done for someone in one environment, and not done for someone in another.

    More often than ‘done’ I see ‘feature complete’ or ‘in maintenance mode’ in project READMEs, which I think are better labels.


  • Paying is never a guarantee, and if you pay a ransom, you’re always at the discretion and risk of the attacker.

    The only thing this changes is that if you know the specific software that encrypted and if it’s known publicly that it can not decrypt and if you know about that is that you know paying won’t allow for decryption.

    It’s the same for paying so they don’t disclose and share exfiltrated data. They’re already doing illegal immoral activities, and you’re hoping they will follow your agreement when you pay. But there’s no guarantee.

    This is why the general public guidance is to never pay ransoms. It supports those industries, gives you no guarantees on fulfillment, and whether fulfillment occurs or not, whether your money was not only wasted but will be used for further damage elsewhere, can be considered entirely random.

    The attacker’s goal is always betting on despair of the victim, on their grasping on even minuscule hope and at great expense.


  • aside: A simple head meta tag with color-scheme light dark will make the web-browser respect user settings and show light or dark. No need for a toggle the user has to activately activate. One meta tag is enough.

    <meta name="color-scheme" content="light dark" />

    MDN meta color-scheme


    If you override the default colors, the light-dark() CSS function is very useful, if the “newly available” compatibility is enough.

    html { background-color: light-dark(#fff, #222); }
    

    or with variables for reuse and centralized definitions :root { --bg-0: light-dark(#fff, #222); } html { background-color: var(--bg-0); }

    Well, I only wanted to suggest the meta alternative and went on a longer tangent. I want to see more websites with dark scheme, especially given how easy it is to enable, and how straight-forward it is if you know how to get started even with custom coloring.



  • From the paper abstract:

    […] Novice workers who rely heavily on AI to complete unfamiliar tasks may compromise their own skill acquisition in the process. We conduct randomized experiments to study how developers gained mastery of a new asynchronous programming library with and without the assistance of AI.

    We find that AI use impairs conceptual understanding, code reading, and debugging abilities, without delivering significant efficiency gains on average. Participants who fully delegated coding tasks showed some productivity improvements, but at the cost of learning the library.

    We identify six distinct AI interaction patterns, three of which involve cognitive engagement and preserve learning outcomes even when participants receive AI assistance. Our findings suggest that AI-enhanced productivity is not a shortcut to competence and AI assistance should be carefully adopted into workflows to preserve skill formation – particularly in safety-critical domains.





  • You add more tags?

    In my main work projects I regularly archive tags into refs/archive/tags/* - which is hidden from normal tooling, but still accessible in Git and (some?) Git tooling and UIs.

    Branches get “path” prefixes like draft/* or other longterm category indications. I don’t archive them, but if I would, I would put them into non /refs/heads like /refs/archive/heads/*.






  • Do good work, be interested and show interest, and be in a recipiable environment.

    If your current environment is overbearing with power politics you don’t succeed in and you want change you’ll probably have to change environments.

    If you want impact consider whether smaller companies and teams would be beneficial. You may be able to fill your desires of impact and control even without becoming a formal lead role. Or become one implicitly or naturally quicker in smaller less formal and structured environments.

    You can also look for job offerings for those kinds of roles specifically. No need to seek out a climb in house when you can find more direct routes.



  • If the XML parser parses into an ordered representation (the XML information set), isn’t it then the deserializer’s choice how they map that to the programming language/type system they are deserializing to? So in a system with ordered arrays it would likely map to those?

    If XML can be written in an ordered way, and the parsed XML information set has ordered children for those, I still don’t see where order gets lost or is impossible [to guarantee] in XML.