Live data from Hacker News

Widget Driven Development

alexei.me

11–20 of 25 posts

Re: Widget Driven Development

#11
This is rather vague.

Let's take a more concrete example:

Let's say you want to add a button somewhere that hides/shows another widget. Surely you don't want to go to the backend to do that? So how do you do it? With the store approach, clicking the button creates an action, that modifies the store (changing a visibility parameter somewhere) and repaints the UI.

In the diagram there is no flow back from the "API" box to the widgets. Though it still something that needs to happen.

The "API" necessarily contains some state, at least to track which component needs which data.

Re: Widget Driven Development

#12
post #5

The benefits seem unclear to me, especially how this solves the shared-state issue. Is it just that each "widget" calls the same API "manager" and propagates the changes to every widget in the event of a change? Isn't this exactly what Redux already do if you use actions to fetch data and put it into the store, with the difference that each "widget" manage filters and state based on the fetched API data? Seems like i…

With pure Redux approach the mutation flow is more complex: - send mutation request to Backend - fetch updated data - put the updated data in the Store - see the updated data propagated in components The suggested approach: - send mutation request to Backend - see the updated data being fetched and displayed by components To me the second is much cleaner and easier to reason about

Wouldn't the lack of a shared store on the client lead to an inconsistent application state when different components fetch different versions of the data? I.e. one part of the UI could think you're logged in as admin while another thinks you're a guest user.

Re: Widget Driven Development

#13
post #11

This is rather vague. Let's take a more concrete example: Let's say you want to add a button somewhere that hides/shows another widget. Surely you don't want to go to the backend to do that? So how do you do it? With the store approach, clicking the button creates an action, that modifies the store (changing a visibility parameter somewhere) and repaints the UI. In the diagram there is no flow back from the "API" box…

>Let's say you want to add a button somewhere that hides/shows another widget.

That's a good case. This is purely UI state, right? (we don't store it on the server).

For UI state we still need to depend on prop-drilling or State Management solutions.

In the article I'm mainly talking about the Data which exist on Backend (as you can also see from all the pictures). In my experience such Server data is 90-95% of all data in most UI applications and that data contributes the most to the complexity.

Pure UI state is often just a fraction of the the whole State and is's often synchronous, so managing it should not be complex. So this kind of coupling will still exist.

To clarify, I do not say Widgets should be 100% independent. We do not achieve complete decoupling. But moving Server Data under control of Widgets gives us closer to this.

Re: Widget Driven Development

#14
post #11

This is rather vague. Let's take a more concrete example: Let's say you want to add a button somewhere that hides/shows another widget. Surely you don't want to go to the backend to do that? So how do you do it? With the store approach, clicking the button creates an action, that modifies the store (changing a visibility parameter somewhere) and repaints the UI. In the diagram there is no flow back from the "API" box…

>Let's say you want to add a button somewhere that hides/shows another widget. That's a good case. This is purely UI state, right? (we don't store it on the server). For UI state we still need to depend on prop-drilling or State Management solutions. In the article I'm mainly talking about the Data which exist on Backend (as you can also see from all the pictures). In my experience such Server data is 90-95% of all d…

Well, you're comparing things that are not quite comparable then...

The store approach is all about how the app handles local UI changes. Whether the action goes and fetches data from the server doesn't matter. What matters is that the store gives you a single source of truth that represents the state of the UI, and that this state gets one-way-synced with its actual dom representation.

Re: Widget Driven Development

#15
post #14

Earlier quoted context omitted.

>Let's say you want to add a button somewhere that hides/shows another widget. That's a good case. This is purely UI state, right? (we don't store it on the server). For UI state we still need to depend on prop-drilling or State Management solutions. In the article I'm mainly talking about the Data which exist on Backend (as you can also see from all the pictures). In my experience such Server data is 90-95% of all d…

Well, you're comparing things that are not quite comparable then... The store approach is all about how the app handles local UI changes . Whether the action goes and fetches data from the server doesn't matter. What matters is that the store gives you a single source of truth that represents the state of the UI, and that this state gets one-way-synced with its actual dom representation.

>Whether the action goes and fetches data from the server doesn't matter

I tried to explain in the article why it matters.

If you are comfortable with putting all the data in a single Store and this works fine to you, then you may disregard the article.

Re: Widget Driven Development

#16
post #3

> [Widget Driven Development] makes the data flows transparent, architecture flexible, the code resilient and easy to test. A direct quote from my "expert-junior-evangelical" phase. When I marveled at my own cleverness & marketed my brand-new paradigms to my unfortunate peers. Lots of assertions, few citations, no research. All the fun was in coding, not in studying books or even the industry at large. Then, business…

> not in studying books or even the industry at large

In fairness the author spends most of the article explaining the approach of the industry at large (it's a good explanation too).

Re: Widget Driven Development

#17
post #3

> [Widget Driven Development] makes the data flows transparent, architecture flexible, the code resilient and easy to test. A direct quote from my "expert-junior-evangelical" phase. When I marveled at my own cleverness & marketed my brand-new paradigms to my unfortunate peers. Lots of assertions, few citations, no research. All the fun was in coding, not in studying books or even the industry at large. Then, business…

> not in studying books or even the industry at large In fairness the author spends most of the article explaining the approach of the industry at large (it's a good explanation too).

It appears like a good explanation. But other commenters have pointed out how it lacks precision. Name dropping CSS modules, React query and other technologies is marketing, not research.

By comparison, this article properly analyzes an actual industry trend, not generalizing one developers experience: https://martinfowler.com/articles/micro-frontends.html

I’m not a believer in micro-frontends but the quality and intent Marin fowler’s of writing is actually respectable.

Re: Widget Driven Development

#18
Thank you for formalising this.

We came to a similar conclusion as we moved from imperatively handling server state to using ReactQuery.

What I got to like the most was the small cognitive load. Other than the minimally shared UI state, everything I need to hold in working memory is close by. Not that it's novel or impossible to achieve the same through other means, but that this way of building UIs often leads to a manageable result.

It works very well in cases where the server is the source of truth, but I don't want it to feel like it is.

The creator of ReactQuery talks extensively about the philosophy behind his library in a recent PodRocket episode. [0]

0 - https://podrocket.logrocket.com/tanstack

Re: Widget Driven Development

#19

Thank you for formalising this. We came to a similar conclusion as we moved from imperatively handling server state to using ReactQuery. What I got to like the most was the small cognitive load. Other than the minimally shared UI state, everything I need to hold in working memory is close by. Not that it's novel or impossible to achieve the same through other means, but that this way of building UIs often leads to a…

"the small cognitive load" - true that!

Thanks for the link to the podcast. Will definitely check this out

Re: Widget Driven Development

#20

Earlier quoted context omitted.

> not in studying books or even the industry at large In fairness the author spends most of the article explaining the approach of the industry at large (it's a good explanation too).

It appears like a good explanation. But other commenters have pointed out how it lacks precision. Name dropping CSS modules, React query and other technologies is marketing, not research. By comparison, this article properly analyzes an actual industry trend, not generalizing one developers experience: https://martinfowler.com/articles/micro-frontends.html I’m not a believer in micro-frontends but the quality and int…

>the quality and intent Marin fowler’s of writing is actually respectable.

Sorry, didn't want to be picky, but the article you mentioned is not written by MarTin Fowler. And I also didn't find there many "citations" you were looking for in my article.

I'm sorry that you found my article of a little quality.

I did my best trying to analyze different approaches to Data Management, How we came to those and their problems. I illustrated those with the my own diagrams to help readers better understand the concepts.

The article is based on my 10+ years experience in the industry.

It went through many iterations of reviews and corrections.

There nothing unique in the approach I described. It builds on what libraries like ReactQuery allows to do.

I basically just tried to formalise why I see this approach as the next logical step in how we approach building UI apps.

I'm not a native English speaker and not a professional blogger. Most probably there are ways to write such an article better. I do my best learning how write better.

Having said that, I think you are not fair comparing it with your "expert-junior-evangelical" phase.

Post reply on HN