The Future of Visual Studio: Interactive Expert Panel | When Does Visual Studio Deprecate a Feature?
Watch on YouTubeVideo summary
The discussion centers on the delicate balance between modernizing Visual Studio by removing deprecated features and maintaining long-term compatibility for existing codebases. The panelists emphasize that while deprecation can be a painful process, it is driven by a primary motivation to ensure customer success rather than simply cutting legacy code. A key argument presented is that Visual Studio, much like the Windows operating system, has successfully maintained backward compatibility for decades, allowing applications written years ago to still run today. However, this commitment to supporting old technologies creates challenges, as maintaining a vast public API surface area and supporting outdated frameworks like COM or MFC can slow down progress on new workflows and increase the product's size.
To address these issues, the team has become more willing to remove features that are no longer leveraged by the majority of users, utilizing telemetry data to identify low-usage components. A common strategy mentioned is the "scream test," where a feature is effectively turned off or hidden to see if any critical users complain; if significant feedback arises, the team engages in conversation to understand the necessity of that feature before making final decisions. This approach acknowledges that while many modern developers may not use legacy tools like MFC or IIS, large enterprises often remain dependent on them, making it difficult for Microsoft to simply declare such features obsolete without considering the specific needs of their diverse customer base.
In terms of implementation, the focus has shifted toward better componentization and customizable installations rather than moving deprecated features into separate products or open-source projects. The panelists note that while they have occasionally released components as open source, they generally prefer to keep features within Visual Studio, perhaps making them optional by default instead of removing them entirely. This allows users to tailor their installation to only include the workloads they actually need, such as avoiding unnecessary C++ components for C# developers, which reduces update payloads and improves performance. Ultimately, the conclusion is that while removing unused features is desirable for a lighter, faster product, the reality of user dependency means that even deprecated items often remain in the ecosystem longer than ideal, requiring careful evaluation of community interest and investment before any removal occurs.
Read the full video transcript
So, the other half of that question was
about deprecation.
Are there any ideas of taking like
something that's old and not used very
much, maybe some larger chunks, and
taking that out of Visual Studio? Maybe
it would speed things up or create a
smaller install or faster install time
or something like that.
>> Yeah, deprecation is fun in a product
like Visual Studio. Uh and by fun, I
mean painful.
Uh really painful. Uh you know, and it's
it's one of those challenges because
it's one of those things where
I mean, we're primarily motivated by
making sure that you all are as
successful as you can be, right? And so,
we have to weigh this like, well,
I I personally believe strongly that one
of the reasons that Windows was so
successful and continues to be
successful is that you can like, I can
still run applications I wrote in high
school, right? On Windows today, and
that is
staggering, right? Um
both because my code actually works,
which is staggering in and of itself,
and that the compatibility has been
maintained for so long. And that is an
incredibly
difficult thing for Windows. Um
Visual Studio is similar. You can run
extensions that were written,
you know, decades ago, right? And and
they still work.
And in some ways that sucks for the
team, right? Because maintaining that
public surface area,
uh
you know, you you get uh shoot you know,
like
blocked in a corner, right? You're like,
well, you know, when we started, COM was
like the primary thing, and like that is
great, right? Except that, you know,
a lot of people don't think about COM
very much anymore, right?
Uh and async wasn't really a thing,
right? Uh
I mean, there's just like the CPUs and
the memory and all the things, right?
Um
So, So, I've explained why it's hard.
Uh that said, I think that
we are more open to removing things that
are slowing down the progress for adding
features that adapt better to the new
workflows, right? And so, if there
things that people basically aren't
leveraging
needing anymore,
then we're we're much more willing to
remove those than we previously were.
Um
Now, it just becomes a question of
identifying those things. So, one of the
ways that we identify them is primarily
through telemetry, like usage, right?
Like, we'll see people are using One of
the tricks with that is that, you know,
for large some large enterprises,
they'll turn off telemetry, right? And
so, then we end up in this position
where we're like, well, we we know like
we've even like see there's only like 11
people that are using this feature.
Let's take it out, right? And then we'll
remove it, and then, you know,
well, some large enterprise will be
like, "Hey, that is a critical feature
for us." So, um so, anyway, it's kind of
a We usually do what we call a scream
test, which I'm sure you all have done
before, where we'll like turn it off and
we'll listen
to see if anybody screams, right? And if
they do,
then, you know, then then we'll have a
conversation with them.
Um
Yeah.
>> I just double down on that. Like, turns
out we really are motivated by like your
success. And while lots of VS might feel
like, "Hey, this is legacy or this is
something I'd never do." Like, "I've
never used MFC, etc." So many customers
are still dependent upon that. Like, you
know, you were just talking about how
hard it is to update Visual Studio. Part
of that's because we interact with the
OS. I did Soul and update IIS. So, if
you're a modern developer, you're not
using IIS, you're using Kestrel or
something like that. But, we have so
many customers that do. And so, it's
very difficult for us to make those, you
know, say, "No, you can't use this part
anymore." because realistically that is
the product they need and the product
they're using.
But, there are things you can do. Like,
things we've been doing more recently is
trying to better split out some of the
componentization. So, for example, one
of the classic problems is we have a lot
of customers who will install both C#
and the C++ workloads and never use a
C++ workload, but they've installed it.
So, every time C++ needed to push down a
restart, which we really worked hard on
to
mitigate, but you'd get those updates,
you'd get that payload, and things like
that, and send us a telemetry signal
that you were using it. Um so, like
definitely, like especially in
enterprises where perhaps you have
offline layouts and the enterprise admin
has just done slash all and literally
getting every single component, the more
you can you customize your own
installation to match your repo and
deterministically through VS config and
other ways specify what you need, that
also helps in the longer term because
your components you have that you depend
upon can be known and perhaps then we
don't need to install the other things,
or you don't need to install them, and
so they won't be loaded.
>> I will say one more thing, which is that
you you know, you you mentioned like oh,
would would we potentially pull those
out into, you know, some other, you
know, product or shell or something, and
then that thing people could still use,
right? But it would no longer, you know,
be
you know, potentially slowing down
Visual Studio or whatever, right?
Um
we haven't done that very much. Um the
way or rather the mechanisms that we've
used to do that kind of thing has
traditionally been more like we'll put
that thing up as an open source, but we
don't like ship a product or it is like
well, okay, the community will do it. I
don't know that we'll change that. Um it
would sup-
it would surprise me.
It's probably either going to be the
case that we keep it in Visual Studio.
Maybe maybe it'll become off by default,
right? Um
or
if we thought that there was still some
usage, but we knew we weren't investing
when we knew the community cared and
wanted to take it forward, we would look
more at something like oh, would that be
something that makes more sense as an
OSS project?
>> And just just to add to the whole
deprecation, um
it was not more than like I think May or
June
someone was asking me about like what
happened to VB6 support. So, I think
they had to they left Visual Studio for
some while some time and they came back
to Visual Studio a newer version
and had to maintain an old VB6 internal
app.
And yeah, we we ripped that out like 12
years ago or something. And they had to
go find like a Visual Studio 2015 or
when maybe even earlier.
Um but so, even if you deprecate
something that isn't used, someone still
uses it. So, it is hard.