Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: Removal of @microsoft/fast-foundation #6951

Closed
janechu opened this issue May 5, 2024 · 14 comments · Fixed by #6996
Closed

RFC: Removal of @microsoft/fast-foundation #6951

janechu opened this issue May 5, 2024 · 14 comments · Fixed by #6996

Comments

@janechu
Copy link
Collaborator

janechu commented May 5, 2024

Removal of @microsoft/fast-foundation

Reason for removal

This package does not fill what FAST considers a core goal of the project. The FAST project seeks to provide useful tools for creating components as a platform gap filler, and not creating the components themselves. Refer to the core goals in the project re-alignment issue.

It is noted that the package has proved to be useful and popular among consumers, so we're open to the adoption of the package by other interested parties.

@scomea
Copy link
Collaborator

scomea commented May 6, 2024

Is "community maintains foundation package on the FAST repo" a possible outcome of discussion, or is that out from the start?

@janechu
Copy link
Collaborator Author

janechu commented May 6, 2024

Is "community maintains foundation package on the FAST repo" a possible outcome of discussion, or is that out from the start?

It is, we considered it as an option but ultimately we believe:

  • There is better contributing when a package has direct control by a person/group that is invested in maintaining that specific package.
  • Generally we observe that smaller mono-repositories have a better track record keeping on top of issues/PRs/etc.
  • A project such as FAST benefits from having a set of core goals and if packages do not meet those goals or are tertiary, they should not be part of that repository (but if they are related and useful to the community, can be included in the documentation for awareness).

That said I'll reiterate that this package has been found to be extremely useful for certain groups of developers looking to quickly leverage some component logic, it's just hard to pinpoint an un-opinionated view on how that logic should work so we'd rather recuse ourselves and instead encourage others to pick up similar types of work, I think the concept has proved to be valuable and there is the potential for several projects to spring up from it.

@janechu janechu modified the milestones: FAST Element 2.0, CLI 1.0 May 6, 2024
@wiredprairie
Copy link

I was just about to start embedding the web components I think are being removed in a large new web application/hybrid-native project I'm building. I'm glad I came across this issue before I started.

Understanding

The naming conventions and documentation however has left me confused as there seem to be references to (FAST) Foundation, Element, and Components.

FAST Element is I think is alternative to options like Lit from Google or Stencil.js.

Foundation I believe at this point is another name for the FAST web component library that uses FAST Element as building block. The web documentation is found at: https://www.fast.design/. There the web components seem to just be referred to as FAST Components, but the code and comments suggest that they are in fact, the FAST Foundation (web components).

Mind the Gaps

I don't see how the library of components is not still a gap filler. They either provide functionality that is otherwise missing or often error-prone to build in an accessible way, and/or provide a consistency to a UX that is often missing in the native web browser.

Having component/widget libraries from established respected companies is an important contribution to the greater good of the web. I've tried a number of component libraries (too many to count), and I'm disappointed how many: a) fail to provide a consistent dev platform, b) fail to create an accessible solution, and c) are used in major projects, d) allow customization/personalization, ... and bonus e) are for React only, rather than embracing an open web. There are only a small handful of options that solve all of these problems well. In fact, the number may be fewer than 5, especially those that have gained traction enough to be dependable.

There seems to be a resurgence of interest (thankfully!) in providing core level components, rather than designs where "everything looks like Bootstrap" that was common for many years. It's disappointing that Microsoft seems to be stepping away from embracing providing these foundational components. Providing these components and a design system is something I'd expect Microsoft to do well (since I can trace my development back to VB3, 4, 5, 6, .NET, Avalon/WPF/Silverlight, XAML, ASP.NET, ...).

Confusingly, the Microsoft Fluent UI components use FAST components, so this decision to drop the Foundation directly impacts the success of that project.

Summary

I can only guess why this project may not be gaining the traction you'd imagined when it was started. I suspect much of it due to the existing pitch and documentation. The documentation is out of date as it references @microsoft/fast-components which is a deprecated library. As a former developer at a large software company (and I was responsible for approving 3rd party component libraries for 2000+ devs), that alone would have been enough to decline the request. 😀

To wrap up -- it feels more like this project needs a reboot to re-energize it rather than being dumped/graveyarded.

As Microsoft creates the browser (Edge) I use 99% of the time on desktops and laptops, I'd argue the existence of this project (or rebooted as mentioned) is an important part of building for web and supporting the web ecosystem.

Off to find another library. It's dang difficult to build a modern accessible web application still in 2024. I thought this would be a solved problem by now.

@simonxabris
Copy link
Contributor

As someone who is building/maintaining a design system built on top of FAST, this is a shocking decision to me. The reason FAST was picked as the foundation for our design system is the existence of the foundation library. It had all the controls one would need for a component library, we only had to re-style them, which allowed us to get up and running extremely quickly which was very valuable, so valuable that it made it worth it to go with fast-element, which compared to lit has very little adaption, resources to learn etc. The entire value proposition of the FAST ecosystem for us was the Foundation library, I doubt that we are alone with this.

Now the original RFC states that this is the core goal of the project now:

Where the platform has gaps we intend to create solutions to fill those gaps, this primarily concerns the creation of performant rich web experiences.
If we have created a solution for a platform gap and that gap is filled for all modern browsers, we will deprecate and remove that solution.

I consider it a huge gap in the platform that it does not have simple controls that all performant rich web experiences use, like tooltips, switches, stylable select, combobox etc. Is there somewhere where I can find the reasoning that explains why this is not a gap worth filling anymore? If not could you please tell me? I'm genuinely curious about this.

Another thing I'm curious about, and I say this absolutely respectfully, curious about what the team's opinion is, why is having fast-element necessary? What gap does it fill, that is not filled by lit? What's the value proposition of fast-element (current or future planned versions) that makes it worth using despite lit providing seemingly the same functionality, with much bigger adaption and ecosystem? To me this seems like a gap filled, not by the "platform" of course, but filled, so according to the stated goals, I currently don't see how fast-element is necessary, apart from having a ton of adaption inside microsoft and moving that to another solution would take up way too much resources.

I tried to say everything above in a respectful way, if it sounded any other way I did not mean that, I'm truly just looking for answers to these questions. Thanks for any answers you can provide!

@janechu
Copy link
Collaborator Author

janechu commented May 21, 2024

As someone who is building/maintaining a design system built on top of FAST, this is a shocking decision to me. The reason FAST was picked as the foundation for our design system is the existence of the foundation library. It had all the controls one would need for a component library, we only had to re-style them, which allowed us to get up and running extremely quickly which was very valuable, so valuable that it made it worth it to go with fast-element, which compared to lit has very little adaption, resources to learn etc. The entire value proposition of the FAST ecosystem for us was the Foundation library, I doubt that we are alone with this.

I think you've partially hit on what we're trying to solve, we are in dire need of good resources and external projects built on fast-element. We've decided to spend our time on fast-element improvements and adoption. This will allow the community to take up maintenance of fast-foundation or packages similar to fast-foundation, we already have interest coming from some members in doing this and we will be updating the documentation site to include community projects.

In order to facilitate these goals, based on feedback, we will be merging in any relevant PRs into fast-foundation and then we will create a repository with the latest code that anyone interested in the community can fork or otherwise use as a starting point to publish their own package and take ownership.

@rajsite
Copy link

rajsite commented May 21, 2024

@janechu @chrisdholt are y'all willing to address the second question asked by @simonxabris reproduced as follows:

Another thing I'm curious about, and I say this absolutely respectfully, curious about what the team's opinion is, why is having fast-element necessary? What gap does it fill, that is not filled by lit? What's the value proposition of fast-element (current or future planned versions) that makes it worth using despite lit providing seemingly the same functionality, with much bigger adaption and ecosystem? To me this seems like a gap filled, not by the "platform" of course, but filled, so according to the stated goals, I currently don't see how fast-element is necessary, apart from having a ton of adaption inside microsoft and moving that to another solution would take up way too much resources.

Having used fast-element extensively and lit only in passing, I would like to understand the differences more clearly as well. Also if there is a goal to grow the FAST community around fast-element, I expect that to be a common question worth having a clear message for.

@chrisdholt
Copy link
Member

@janechu @chrisdholt are y'all willing to address the second question asked by @simonxabris reproduced as follows:

Another thing I'm curious about, and I say this absolutely respectfully, curious about what the team's opinion is, why is having fast-element necessary? What gap does it fill, that is not filled by lit? What's the value proposition of fast-element (current or future planned versions) that makes it worth using despite lit providing seemingly the same functionality, with much bigger adaption and ecosystem? To me this seems like a gap filled, not by the "platform" of course, but filled, so according to the stated goals, I currently don't see how fast-element is necessary, apart from having a ton of adaption inside microsoft and moving that to another solution would take up way too much resources.

Having used fast-element extensively and lit only in passing, I would like to understand the differences more clearly as well. Also if there is a goal to grow the FAST community around fast-element, I expect that to be a common question worth having a clear message for.

Short response for now (I’ve injured my hand so typing takes quite a bit of time currently. Without a doubt, this is a question which has been around since the beginning. I’m not sure it’s ever been shared but we did investigate Lit specifically before creating FAST. We also did a listening tour across Microsoft to identify needs. Ultimately, at that time, the core team felt the volume of asks and the changes required (some potentially fundamental) were too significant. This wasn’t about issues with Lit but the unique requirements of certain teams at Microsoft.

One specific thing we needed and still have many teams relying on is support for MVVM, which is one reason for some of the API deltas. FE 2 has some added support here in directives, but they aren’t well documented. @janechu is working on documentation and we’ll get deeper as we go.

There’s several emerging things we’d like to pursue and improve, and improvements coming from the web platform we’re advocating for so we can implement.

I’ll echo what Jane has said around focusing the project, but I also will add that I’m hopeful folks from the community will take up the foundation work. As someone who initially advocated for its creation and being intimately involved in it over the years, there is a large part of myself struggling with releasing “control”. My day job has focused more around Fluent UI and the implementation there and development/contribution to Foundation has suffered. Ultimately, Foundation was/is a huge part of my OSS journey and I’m hopeful folks will improve it and take it beyond where we could. For various reasons, having folks outside the Microsoft organization own it from within isn’t a great path forward, which is why we’re making a call to interested folks.

Much more than I intended to write, but I appreciate all the feedback and we are discussing it as it comes in. Forgive slow responses, typing with one hand, which I’m off to ice. :)

@simonxabris
Copy link
Contributor

@janechu @chrisdholt Thanks for providing some answers, much appreciated! Sadly we're a team of 3 engineers supporting 100+ frontend engineers with our design system, so the lack of resources on our side prevent us from picking up foundation officially, if there's traction for a community maintained version, we'll try to contribute as best we can.

@chrisdholt
Copy link
Member

@janechu @chrisdholt Thanks for providing some answers, much appreciated! Sadly we're a team of 3 engineers supporting 100+ frontend engineers with our design system, so the lack of resources on our side prevent us from picking up foundation officially, if there's traction for a community maintained version, we'll try to contribute as best we can.

Totally understandable - I'm following up with some folks who have showed interest and we'll keep the community up to date on how things are tracking.

@CuddleBunny
Copy link
Contributor

CuddleBunny commented May 29, 2024

I am definitely interested in taking on some derivative of fast-foundation myself, possibly as part of my regular job, but it'll be some time before I'm done with my current slate of large projects and can refocus on the design system. That said, it would probably be very different and redesigned from the ground up to split apart the template and design system tooling. It's likely that the adaptive-ui project will cover most of the design system portion so I would focus on the templates. In order to drive adoption and other contributors I think a framework agnostic approach would be beneficial, allowing the templates to be used in fast-element, lit, and maybe others.

The templates and design system pieces are the most important to my team and I, fast-element itself is just an ergonomic mean to that end. I'm not sure that it will have any staying power after these pieces are removed, time will tell.

@DavidVollmers
Copy link

@janechu @chrisdholt are y'all willing to address the second question asked by @simonxabris reproduced as follows:

Another thing I'm curious about, and I say this absolutely respectfully, curious about what the team's opinion is, why is having fast-element necessary? What gap does it fill, that is not filled by lit? What's the value proposition of fast-element (current or future planned versions) that makes it worth using despite lit providing seemingly the same functionality, with much bigger adaption and ecosystem? To me this seems like a gap filled, not by the "platform" of course, but filled, so according to the stated goals, I currently don't see how fast-element is necessary, apart from having a ton of adaption inside microsoft and moving that to another solution would take up way too much resources.

Having used fast-element extensively and lit only in passing, I would like to understand the differences more clearly as well. Also if there is a goal to grow the FAST community around fast-element, I expect that to be a common question worth having a clear message for.

Short response for now (I’ve injured my hand so typing takes quite a bit of time currently. Without a doubt, this is a question which has been around since the beginning. I’m not sure it’s ever been shared but we did investigate Lit specifically before creating FAST. We also did a listening tour across Microsoft to identify needs. Ultimately, at that time, the core team felt the volume of asks and the changes required (some potentially fundamental) were too significant. This wasn’t about issues with Lit but the unique requirements of certain teams at Microsoft.

One specific thing we needed and still have many teams relying on is support for MVVM, which is one reason for some of the API deltas. FE 2 has some added support here in directives, but they aren’t well documented. @janechu is working on documentation and we’ll get deeper as we go.

There’s several emerging things we’d like to pursue and improve, and improvements coming from the web platform we’re advocating for so we can implement.

I’ll echo what Jane has said around focusing the project, but I also will add that I’m hopeful folks from the community will take up the foundation work. As someone who initially advocated for its creation and being intimately involved in it over the years, there is a large part of myself struggling with releasing “control”. My day job has focused more around Fluent UI and the implementation there and development/contribution to Foundation has suffered. Ultimately, Foundation was/is a huge part of my OSS journey and I’m hopeful folks will improve it and take it beyond where we could. For various reasons, having folks outside the Microsoft organization own it from within isn’t a great path forward, which is why we’re making a call to interested folks.

Much more than I intended to write, but I appreciate all the feedback and we are discussing it as it comes in. Forgive slow responses, typing with one hand, which I’m off to ice. :)

Sorry for joining this discussion so late but it somehow went under my radar. I decided to use FAST as the underlying framework for building an enterprise level design system in the company I work in (https://explore.matrix42.design). I knew that it was a risky decision but ultimately I chose FAST over Lit because of the fast-foundation package which includes a lot of base functionality for more sophisticated controls and their accessibility. Now with the decision to remove this advantage to the competition I have to say there isn't really any reason to stay with FAST... Especially since even fast-element has some fundamental flaws (code splitting, template merging/inheritance) which just makes it compare bad to its competitors... I guess you guys made this a well discussed decision internally in MS but for me this feels like doomsday for this framework :/

@janechu
Copy link
Collaborator Author

janechu commented May 30, 2024

@DavidVollmers appreciate your feedback, we have some folks in the Discord and in this thread who are interested in picking up where we're leaving off for @microsoft/fast-foundation so there may be a migration strategy, and we will work with them on that front. Meanwhile we aim to improve @microsoft/fast-element which we have not been able to focus on due to our small cohort of developers that can dedicate time to the project. As you've stated there are some issues with it that we simply haven't had the time to address.

Ultimately, we view this as a win for the project, it has been stagnating for some time and this re-structuring is intended to invigorate it. I would ask our community to have some faith in where this is all going, we're working the most efficient way we can to achieve all of our goals (and hopefully yours).

@DavidVollmers
Copy link

DavidVollmers commented May 30, 2024

@janechu What would be really helpful to make the decision which my team will have to do now (stay with FAST or move to something else), is to publish a roadmap or something similar so we can better understand what issues will be addressed when and especially what features are upcoming. In terms of fast-foundation we already maintain our own fork because of some updates we thought make sense. But in general the question is more why not use Lit and rebuild the features from foundation based on it...

@janechu
Copy link
Collaborator Author

janechu commented May 30, 2024

@janechu What would be really helpful to make the decision which my team will have to do now (stay with FAST or move to something else), is to publish a roadmap or something similar so we can better understand what issues will be addressed when and especially what features are upcoming. In terms of fast-foundation we already maintain our own fork because of some updates we thought make sense. But in general the question is more why not use Lit and rebuild the features from foundation based on it...

We are currently in the middle of a big push to get v2 of @microsoft/fast-element out, which includes a significant update to the docs. I think a roadmap is a great idea, one we can certainly add after the launch when we have time to assess and prioritize current open issues and take a holistic look over our current feature set.

janechu added a commit that referenced this issue Jun 26, 2024
…6996)

# Pull Request

## 📖 Description

This change removes:
- `@microsoft/fast-foundation` - the most recent version can be found on branch `archives/fast-foundation-3`
- `@microsoft/fast-web-utilities`

### 🎫 Issues

Closes #6951 and closes #6954

## ✅ Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [ ] I have included a change request file using `$ yarn change`
- [ ] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [x] I have read the [CONTRIBUTING](https://github.com/microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://github.com/microsoft/fast/blob/master/CODE_OF_CONDUCT.md#our-standards) for this project.

## ⏭ Next Steps

- File an issue to remove dependency on `@microsoft/fast-foundation` in `@microsoft/fast-ssr` for testing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants