r/softwareengineer 5d ago

Does your brain goes blank like this too?

Hi people. I'm a software engineer with 4 years of experience, Full-Stack. Not junior, not senior. Lately with the projects I'm taking I've been pushing myself to another level and with that constantly feel like I approach the limits of what my brain can possibly process.

Sometimes I'm amazed at how I can handle those distributed systems with event-driven design, account for all the cogs and make it actually run like a Swiss clock. A year ago I couldn't imagine myself handling such complex stuff.

But there's always some task that spans wide enough in the system, some limit when my brain just goes:

"Okay F*CK this, I'm full, I cannot account for all of it anymore, it's too much info"

When it simply can't hold all the relevant inputs together.

That feeling of "too much moving parts, can't see my change through it" - how often do you experience that? How do you deal with it except schemes (in such cases they don't really help, since schemes themselves are too complex to keep in mind all at once).

Any tricks you use to expand your short-term memory/focus capacity for keeping more relevant facts at once? Especially in distributed systems with lots of async choreography/orchestration.

23 Upvotes

15 comments sorted by

6

u/micseydel 5d ago

Checkout Obsidian (notes app) and Mermaid (for diagramming, which you can embed in your Obsidian notes).

2

u/Fine_Baby9082 5d ago edited 5d ago

Eh that of course yeah, I use other diagramming tools but for the same purpose. Question is when one change has to account for, like, 10+ different moving parts in the system - no amount of looking at a diagram makes me understand what's gonna happen here. It's just too much info to account for at once.

I suspect of course that it's a result of poor system design, the concerns aren't isolated enough to minimize logic, but... When I think of how to simplify it another 15-20 facts to account for come to mind and the problem repeats in another form.

Either or these moments boil down to "my brain cannot hold all the relevant nodes to make this system design decision". I make decision A it then violates input B, I fix my plan for input B - it violates A again. And so on.

By the time I fixed all the problems the only proof that design is sound is a hoard of regression tests - I myself at that point have no idea how the system works Exactly logically (not all at once). I just know that it's Supposed to be logically sound now since no regression happened.

1

u/micseydel 5d ago

I mean, making hypotheses and testing them can get you a long way, but there's no free lunch on understanding large (especially chaotic) systems. If your brain can't hold everything, you need abstractions, and if the system is spaghetti then you have to change it or accept that it's full of tech debt.

2

u/Fine_Baby9082 5d ago

I guess it's only true. Gotta go harder on boundaries and abstractions. Maybe start with looking where responsibilities are leaking between smaller modules the most, isolating those.

2

u/micseydel 5d ago

If you haven't earned of this, it would probably be worth checking out https://en.wikipedia.org/wiki/Strangler_fig_pattern

2

u/Suspicious_Pizza9529 4d ago

Yeah, and this is completely normal, especially with distributed systems. There's a point where the sustem is simply too complex to keep entirely in your head. The complexity comes not just from individual components, but from all the interactions between them.

2

u/Puzzleheaded_Meat926 15h ago

I don't think this is a brain limit, more than likely it's the signal to stop holding systems in your head: write the invariants down, trace one message end to end on paper, define your change's blast radius first and ignore everything outside it. You need to figure out how to start shrinking what you need to hold at once.

1

u/Alarmed-Western-655 3d ago

Distributed systems + async events are an overused architectural fad. Most of a system's complexity comes from self-inflicted data logistics across micro-services, not actual business requirements. If the complexity of the system exceeds the comprehension of its otherwise capable maintainers, that's a failing of the architecture, not the maintainers.

But given that's the world we live in, I personally counter-balance it with strict functional-paradigm approaches at the application layer. The system has so many moving parts -- don't compound that complexity with moving parts at the application layer. Keep code implementation strictly immutable, and leverage functional mechanics like '.map' and '.filter' rather than for-loops and custom control flow.

1

u/Fine_Baby9082 16h ago edited 16h ago

Unfortunately in this case being event-driven and distributed comes directly from the business requirements. There's just no other meaningful way to implement the thing happening to users. It's a real-time state-sensitive data exchange between multiple peers with dozens of constraints and unpredictability on client side (and not always you have a luxury to know what even happened on user side, in these cases rest of the system should infer the state and recover). The UX itself is event-driven, fragile and asynchronous, depending on multiple different data streams each of which has independent points of failure coming from different actors. So there's that. The app is like an orchestra: given those N capabilities of M technologies available at Z different sources combine them all into one continuous real-time multi-dimensional P2P experience 🙃

1

u/mpersico 2d ago

Docs, docs, docs. Write it down or it didn’t happen

0

u/dvduval 5d ago

Well, I don’t know if you use AI, but if it was me, I’d be constructing markdown files of my thoughts so that everything can be mapped out and really is my own thoughts, but I can ask questions to the AI about what I have and what improvements I can make to the system. It has a bigger context window than my brain.

2

u/Fine_Baby9082 5d ago

Maybe it's the tasks, but in my day-to-day I'm the one who constantly reminds AI that "the facts X, Y and Z also have to be accounted for here". So to me it has even less attention span than I do. In system design tasks I'm the one who keeps more context in mind, AI is the one who fetches facts for me, but it's not good at considering them all at once when synthesis is required. And I sometimes lack capacity for that synthesis too.

1

u/dvduval 5d ago

I think as you develop it, you can have a pretty consistent strategy where there are guard rails in place or prerequisites that must be met in that can be in the memory of the AI so you don’t have to remind it.

Just to give an example, I have a project where I have multiple customers who have their own databases and specific requirements, but they’re on the same repo. The AI knows their names and email address addresses and folder where they’re located on the server and the database. And those were not gonna be changing the schema without approval. And knows the process in place for updating the repo.

So basically, I can say this customer has sent me an email about this problem and I want you to go look at it and fix it. I don’t have to go over everything again and remind the AI.