Fork me on GitHub
#off-topic
<
2020-12-07
>
jjttjj18:12:50

Would an "advent of software design" be feasible, or would software design exercises be inherently too large/subjective/etc?

noisesmith18:12:50

@jjttjj I think the hard part is judging how you'd evaluate the designs?

noisesmith19:12:24

I could see "advent of software integration", where you are given weirder and weirder architectural constraints to plug into a system

noisesmith19:12:34

that's much more straightforward to evaluate at least..

jjttjj19:12:04

Yeah it'd be hard to have an answer you could put into a form input and evaluate instantly

noisesmith19:12:49

I mean, the advent of code is already (implicitly) testing design - it's just that the problems are small enough that you don't need much design per se

noisesmith19:12:53

I guess another approach is to have increasingly bizarre requirements that escalate from problem to problem, but if you make good architectural decisions you can reuse code?

jjttjj19:12:17

Oh yeah that could be interesting

noisesmith19:12:28

it's still subjective though "how many rewrites did I have to do? how hard were they?"

jjttjj19:12:50

Yeah. I just can't help but feel when trying these advent problems that there's a different muscle that is way more important to exercise at least for me personally

jjttjj19:12:48

but I wonder if it's possible to package in as fun a way

phronmophobic19:12:57

"advent of software design" sounds fun, but I'm also not sure how that might work. sounds like an interesting design challenge šŸ™‚

jjttjj19:12:50

Day 1: āœ”ļø šŸ™‚

šŸ˜„ 3
paul.legato19:12:30

How about changing the deliverable to a one-page architecture diagram, something like that?

paul.legato19:12:52

Or a one page long form text description of a software system

phronmophobic19:12:29

day 1: write design day 2: evaluate someone else's design

dgb2320:12:03

I just finished writing a custom web based application for an SMI, took me about half a year. It all works well and the client is happy, but I wish I had way more time for UI/UX, because the data model is a bit intricate (bi temporal, with a reporting feature), so I had a lot of explaining to do and some of the things are not intuitive for a non-technical user. But I just now had a bit of an epiphany. Iā€™ve been doing it all wrong. I was following the standard CRUD Rest-like MVC model, Iā€™ve been taught and doing for years. But it makes no sense at allā€¦ Even though the data is relational and has some tricky concepts, it is not that much data. Maybe 10k rows or something and the updates are infrequent (some maybe daily, but often just weekly/monthly). Why didnā€™t I just send the whole data to the client and used simpler tools and less communication overhead to manipulate them? Forgoing most of the complex queries and checks. Just send a nice data-view, and then show a subset on the client with a well designed navigation and visualisation concept? I feel like Iā€™ve been following paradigms that just donā€™t make sense for these smallish data-sets, just because I ā€œbelievedā€ they should be used, but by doing that Iā€™ve violated the YAGNI/premature optimization principle and missed an opportunity to craft a unique and intuitive user experience instead. Even from a performance perspective it would have been better to make the writes slower, (and heavily cache the whole data-view) and the reads fast maybe de-normalized. Am I completely missing something?

seancorfield21:12:48

@denis.baudinot No, I think you're right that these days the clients are usually powerful enough to send a large blob of data and then slice and dice it and render it in interesting ways on the client.

seancorfield21:12:18

Even for plain tabular data, it's reasonable to pour the whole lot into something like "tablesorter" so end users can choose how much data to look at, how to sort it, how to filter it. We do that at work for datasets that are in the thousands of rows (beyond that, the client UI can get a little sluggish, depending on how many columns are being rendered). And it's certainly true for graphical display of "thousands" of raw data points these days too.

seancorfield21:12:57

Helps avoid a lot of pagination ugliness at the CRUD layer.

dgb2321:12:50

@seancorfield thankā€™s for the perspective. This is helpful because I work alone and in very small teams. So I need to make a lot of decisions, which is sometimes daunting so I appreciate some feedback from other professionals.

respatialized21:12:42

@tonsky wrote a good essay outlining that PoV with a demo application in Datascript: https://tonsky.me/blog/the-web-after-tomorrow/

šŸ‘ 3
respatialized21:12:54

I think CRDTs also have a lot of potential to supersede what were previously considered 'battle-tested' client-server architectures, without even needing to send all the data all the time

dgb2321:12:38

@afoltzm like the people at https://replikativ.io/ are doing?

āœ… 3
dgb2321:12:57

It sounds intriguing! but I would have opted for an even much simpler solution, in retrospect, and focus on the UX. For these clients, the UX is the whole value. Good UX saves their time, makes them happy and lowers their mental drain.

dgb2321:12:48

maybe CRDTā€™s are a good way to scale a ā€œbruteforceā€ application (like explained above) after it is needed?

hiredman21:12:35

https://git.sr.ht/~hiredman/dset/tree/master/src/com/manigfeald/dset.clj is a dcrdt triple store (uses the same sorted set for indices as datascript)

hiredman21:12:34

just pushing all the data out to the client works well until you want the client to be able to modify the data, and then you need to sync those modifications across other clients, etc

hiredman21:12:04

the problem with crdts is while they can keep your data model in a consistent state, they can't un-ring a bell so to speak

hiredman21:12:26

you almost always look at the data, and then act on it, do some side effect, even if the side effect is just displaying the data to a human. if later you merge states (using a crdt) and it turns out that data was superseded, clawing that action back can be a challenge

hiredman21:12:51

at least with client server and the database you have a sort of single point where that can occur

šŸ‘ 6