this post was submitted on 09 Apr 2025
16 points (100.0% liked)

Learn Programming

1798 readers
1 users here now

Posting Etiquette

  1. Ask the main part of your question in the title. This should be concise but informative.

  2. Provide everything up front. Don't make people fish for more details in the comments. Provide background information and examples.

  3. Be present for follow up questions. Don't ask for help and run away. Stick around to answer questions and provide more details.

  4. Ask about the problem you're trying to solve. Don't focus too much on debugging your exact solution, as you may be going down the wrong path. Include as much information as you can about what you ultimately are trying to achieve. See more on this here: https://xyproblem.info/

Icon base by Delapouite under CC BY 3.0 with modifications to add a gradient

founded 2 years ago
MODERATORS
 

I will frame the question in terms of a specific C# objective that I am working on right now but I imagine the question is a pretty general one related to the Dunning-Kruger effect, in a way - how do you know how to build an application when you don't know all the issues you are supposed to prevent?

There is a message hub and I am developing a consumer for it. The original plan was to just create a few background services that get initialized alongside the application, that have a loop to load new messages/events and then process them.

Some time has passed and it feels like I am knees deep in Wolverine, Quartz, Hangfire, MassTransit, transactional outbox and all manner of different related things now. The potential issues are dealing with downtime, preventing loss of messages by storing them in a separate table before processing them, and everyone on the planet has a different idea on how to prevent and solve them and none of them sound simple and straightforward.

Honestly at this point I don't know enough about which problems are going to appear down the line and if I need to use third party libraries, but I am guessing they exist for a reason and people aren't supposed to just manually create their own amateurish implementations of them instead? But how do you know where to draw a line when you don't know exactly the problems that you are supposed to be solving?
What are the problems with having a table for the message queue over a whole 3rd party library for it, or what's wrong with the MS BackgroundService class? How are you supposed to know this?

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 1 day ago

Thinking you can even prevent all unkowns is a foolish endeavor. Only work on solving the problem at hand. Why would I think about some future requirement and lose sleep over it? That's the PM and sales team headache! Or think of it another way... you haven't yet reached the bridge yet but you're already thinking you need rope for the imagined bridge collapse.

All you can do with the present is make it relatively easier for your future self. Avoid complexity (thanks grug brained programmer!), don't tie yourself into knots and back yourself in corners (keep the code readable, testable and simple. This means minimal external dependencies, lose coupling but good coherence, and avoiding reinventing solution to difficult to solve problem)

some of these goals seem contradictory but you have to apply them to a specific problem and the objective of solving the problem (why are you solving this problem?). For instance, for crypto the advice of avoiding reinventing the solution takes precedence to minimal dependencies one because your objective is security which is important to get right without tolerance for bugs.