• 0 Posts
  • 18 Comments
Joined 2 years ago
cake
Cake day: June 16th, 2023

help-circle


  • Problem in some teams are the respective audiences for the commit activity v. the ticket activity.

    The people who will engage on commit activity tend to have a greater common ground and sensibilities. Likely have to document your work and do code reviews as the code gets into the codebase and other such activity.

    However, on the ticket side you are likely to get people involved that are really obnoxious to contend with. Things like:

    • Getting caught up in arguments over sizing where the argument takes more of your time than doing the request
    • Having to explain to someone who shouldn’t care why the ticket was opened in the first place despite all the real stakeholders knowing immediately that it makes sense.
    • Work getting prioritized or descoped due to some political infighting rather than actual business need
    • Putting extra work to unwind completed work due to some miscommunication on planning and a project manager wanting to punish a marketing person for failing to properly get their request through the process
    • Walking an issue through the process to completion involves having to iterate through 7 states, with about 16 mandatory fields that are editable/not editable depending on which state and sometimes the process is stuck due to not having permission because of some bureaucratic nonsense that runs counter to everyone’s real world understanding.

    In a company with armies of project managers the ticket side is the side of dread even if the technical code side is relatively sane.




  • Actually, the lower level may likely be less efficient, due to being oblivious about the nature of the data.

    For example, a traditional RAID1 mirror on creation immediately starts a rebuild across all the potential data capacity of the storage, without a single byte of actual data written. So you spend an entire drive wipe making “don’t care” bytes redundant.

    Similarly, for snapshotting, it can only track dirty blocks. So you replace uninitialized data that means nothing with actual data, the snapshot layer is compelled to back up that unitiialized data, because it has no idea whether the blocks replaced were uninialized junk or real stuff.

    There’s some mechanisms in theory and in practice to convey a bit of context to the block layer, but broadly speaking by virtue of being a mostly oblivious block level, you have to resort to the most naive and often inefficient approaches.

    That said, block capacity is cheap, and doing things at the block level can be done in a ‘dumb’ way, which may be easier for an implementation to get right, versus a more clever approach with a bigger surface for mistakes.


  • Problem is in practice, I suspect something is pretty wrong in most teams.

    Some common examples come to my mind:

    • Management hears “talk about what you’ve done and what you will do” so great time to sit in and take notes for performance review, and it becomes a “make sure management knows you spent all your time and did really impressive stuff” meeting. Also throws a kink in “things I need help with” as there’s always the risk that management decides you aren’t self sufficient enough if they hear you got stuck, so you also need to defend why you got stuck and how it isn’t your fault.
    • The people who feel like everyone needs to know the minutia of their trials and tribulations including all the intermediate dead ends they went down on the way to their final result. Related to the above, but there are people who think to do this even without the need to impress management.
    • The people who cannot stand to “take it offline” and will stop everything to fully work a problem while everyone is still ostensibly supposed to stay in the meeting despite having nothing to do with the two people talking (sometimes even just one, a guy starts talking to himself as he tries to do something live).
    • Groups that are organized but have very little common ground. An “everything must be scrum” company sticks a guy who does stuff like shipping and receiving into a development team and there’s no ‘scrum-like’ interaction to be had and yet, there he is wasting his time and having to talk about stuff no one else on that meeting has a need to hear either.

  • Yep, and I see evidence of that over complication in some ‘getting started’ questions where people are asking about really convoluted design points and then people reinforcing that by doubling down or sometimes mentioning other weird exotic stuff, when they might be served by a checkbox in a ‘dumbed down’ self-hosting distribution on a single server, or maybe installing a package and just having it run, or maybe having to run a podman or docker command for some. But if they are struggling with complicated networking and scaling across a set of systems, then they are going way beyond what makes sense for a self host scenario.


  • Based on what I’ve seen, I’d also say a homelab is often needlessly complex compared to what I’d consider a sane approach to self hosting. You’ll throw all sorts of complexity to imitate the complexity of things you are asked to do professionally, that are either actually bad, but have hype/marketing, or may bring value, but only at scales beyond a household’s hosting needs and far simpler setups will suffice that are nearly 0 touch day to day.


  • For 90% of static site requirements, it scales fine. That entry point reverse proxy is faster at fetching content to serve via filesystem calls than it is at making an http call to another http service. For self hosting types of applications, that percentage guess to go 99.9%

    If you are in a situation where serving the files through your reverse proxy directly does not scale, throwing more containers behind that proxy won’t help in the static content scenario. You’ll need to do something like a CDN, and those like to consume straight directory trees, not containers.

    For dynamic backend, maybe. Mainly because you might screw up and your backend code needs to be isolated to mitigate security oopsies. Often it also is useful to manage dependencies, but that facet is less useful for golang where the resulting binary is pretty well self contained except maybe a little light usage of libc.


  • But it you already have an nginx or other web server otherwise required to start up (which is in all likelihood the case), you don’t need any more auto startup, the “reverse proxy” already started can just serve it. I would say that container orchestration versioning can be helpful in some scenarios, but a simple git repository for a static website is way more useful since it’s got the right tooling to annotate changes very specifically on demand.

    That reverse proxy is ultimately also a static file server. There’s really no value in spinning up more web servers for a strictly static site.

    Folks have gone overboard assuming docker or similar should wrap every little thing. It sometimes adds complexity without making anything simpler. It can simplify some scenarios, but adding a static site to a webserver is not a scenario that enjoys any benefit.


  • Because serving static files doesn’t really require any flexibility in web serving code.

    If your setup has an nginx or similar as a reverse proxy entry point, you can just tell it to serve the directory. Why bother making an entire new chroot and proxy hop when you have absolutely zero requirements beyond what the reverse proxy already provides. Now if you don’t have that entry point, fine, but at least 99% of the time I see some web server as initial arbiter into services that would have all the capability to just serve the files.


  • “web development” casts a wide net.

    The classic imagery of someone playing with frontpage back in the day, or screwing around with html in a text editor, sure. But those folks wouldn’t call themselves web developers (there was a phase over 20 years ago where anyone that cobbled together a geocities would declare ‘web developer’ on their resume, but I haven’t seen someone do that in ages).

    However, you can get in pretty deep with code running in the browser as javascript and/or wasm. Backend gives them some nested dictionary in json or protobuf and they parse, manipulate, iterate over it, sometimes making some pretty complex visualizations. Basically a ‘web developer’ is nowadays on par with any Game or GUI application developer in terms of what they might be writing. There are a few things left out of direct reach by a browser runtime, but you have access to plenty and the backend abstractions to get something in reach of HTTP are often no easier than the thing being abstracted, it’s just reframed as ‘http’.




  • You’re bending your team/process to fit agile, and not bending agile to fit your team/process

    Yeah, this one is tricky.

    If a methodology is supposed to help, but you don’t change your processes in any way, then it seems odd to assert that you are “adopting” a methodology.

    In fact, I would say that the typical dysfunctional Agile shop basically “bends agile” to fit their process, meaning they undertake a superficial exercise to map a problematic process to Agile terms and declare victory. Sometimes taking the time to actually make the process worse in a way they wanted to, under the smoke screen of “Agile transition”. For example, in my company customers are generally using our projects together, so we had basically a set cadence of release dates. All projects were only allowed to target designated release days (March 1st, June 1st, etc.) A project, if it made sense could skip a release window, but the projects wouldn’t just release 2 weeks differently than all the related projects. Project owners declared this “not Agile” and said everyone just release whenever, much to the complaints to customers that now have a barrage of updates that are in no way synced up, with QA that tried to use the projects as the customer would abolished, so until the customer there’s no one using the “current” editions of the projects together in one place. Agile is perfectly happy with a prescribed cadence (in fact I would say usually I hear the mantra that you try to fit your work to the schedule, rather than letting the work mess up the schedule), but development managers didn’t like the way the release schedule tied their hands so they blamed Agile for a really bad quality move.

    I’m all about processes that fit your team, I just think fixation on Agile branding does more harm than good.


  • In our case, tossing stuff in the backlog to never get done is just part of trying to get through life.

    We have an… eccentric colleague who demands the craziest stuff that no one else wants. Now in a sane world, we explain that his requests are either extremely costly for a minor thing no one cares about, or, like 90% of his requests, run explicitly counter to what our customers want even if we could trivially do it. He is not a customer nor is he in contact with customers or marketing or sales, he’s in a different technical team but has an “armchair enthusiast” interest in my teams product.

    We used to try to have that discussion to reject items to make it clear they will never ever get worked on. However whenever we did that he would demand hour after hour after hour of meeting to discuss each request that we want to reject and convince us why his requirement is the most awesome thing in the planet, and with enough meetings maybe we’d stop being so clueless and come around to recognize the brilliance.

    So now we toss it in the backlog, and there’s always a point of comparison like “Customer giving us $40M asks for feature X”, and he has to rationally accept why X jumps ahead of his backlog items, even if he is displeased. One new project manager made the mistake of trying to close out the backlog items and the meeting invites flew about us daring to ignore his awesome requests.

    So we have a chunk of backlog that every one knows will never happen, and in fact if our backlog ever dried up, then we’d have a big problem because then we’d actually have to have that tough conversation about why his ideas are bad. At this point some of his wacky stories have been on the backlog for over five years.


  • That’s about your team and/or your teams leadership, not scrum.

    While true, that cuts both ways, a successful team is not successful because of ‘scrum’, it’s successful because it finds a methodology that works for them, which can be in terms of scrum, but even if no one was chanting Agile buzzwords, that team would still self organize in a similar way, just without the precise buzzwords.

    What’s obnoxious is that a lot of folks, with a vested interest in, say, consulting, will give credit to “Agile” for teams succeeding and then simultaneously call all failures that ostensibly use Agile but fail “not true Agile”. It can be harmless enough when self-organizing, but then it doesn’t really matter if it is “big-A Agile” or not. People hung up on the “big-A Agile” may be expecting to cash in with consultancy money, or use it as a club to assert their authority by their self-proclaimed alignment to ‘Agile’. They are advocating for Agile, therefore if you challenge anything about their direction, they will invoke the magic Agile word to silence criticism about their methods. Once an organization has “acheived Agile”, ironically they frequently close the door on any consideration of methodology reform. “We are running Agile now, whatever you may think we are doing wrong the industry agrees with us because the industry uses Agile, so stop complaining”.

    So Agile may be technically workable, but the frustration is that it is vague enough to allow anyone to do almost anything and still ‘fairly’ claim Agile, but as a brand word it confers unreasonable authority for certain folks. As the most prominent brand word in the world of project management, it is further correlated with the ‘default’ asserted methodology of any crappy group looking toward consultancy/self-help to fix their bad team situation with a bandaid of methodology.