Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

The most incredible thing about the new iPads is that even with the crazy fast M4 chip MS Teams manages to crawl to a halt. Clearly it takes all the engineering skills of the largest and most valuable software company in the world to make text entry go at about 1 fps on a chip as powerful as the M4.


Every character you type results in some sort of hit to their telemetry server. It will include the actual letter you typed, if you or your org are not configured to be in EU. With their EU configuration option (pulled from server every launch) it will only report the fact that you typed _something_.

Now if that's not fun enough, their telemetry also covers mouse movements. Go ahead and watch your CPU as you spin your mouse in circles around the Teams window.

For extra fun, block their telemetry server and watch Teams bloat in RAM, to as much as your system has, as it keeps every action you take in local memory as it waits for the ability to talk to that telemetry server again.

If you're going to block their telemetry its best to fake an accept via some mitm proxy and send back a 200 code.

I do not know exactly how much this applies to iPad version, compared to their desktop apps. Mobile offers both more and less data possibilities. It's a different context.


So they’re running a keystroke logger and masquerading it as “telemetry”? That should be outlawed. It’s not a drafts feature, it’s not an online word processor, it’s just a straight up keystroke logger.


It is outlawed, in the EU.


Great. It needs to be outlawed in America.


I’m in the EU and should have the EU configuration.

The problem mainly occurs when I mention someone in a reply to a thread. Once I type @<name> the text input just slows down so much I can type much faster than it can render the text.


It's still going through the same telemetry action, it just omits the actual character you typed. And yes, it is character by character. That collection (eg, the timestamp you hit the character, channel/person it was to, etc) is the inefficiency causing your typing to slow.

If it was a straight text box that they polled contents of _occasionally_ or after you hit 'send', it would be a much better user experience.


Haha what exactly does it protect me from? If they see that I typed something to someone, and see the chat history of me having sent a particular message at a particular time, it doesn't take a genius to put things together.


As much as I dislike overbearing telemetry in the context of an M4 or even an N95 the computer should be more than capable of logging a few kb of telemetry about inputs per second without even a notice on the performance statistics. The problem remains that every single thing in the app is just implemented god awful slow and would still be regardless if it's also recording telemetry on the input data or not.


...do you have any source verifying this? Setting aside how insane of an issue it'd be network-wise/privacy-wise/etc, this is like a day one "debounce the call" fix.

I'm not even saying I doubt you, I'm just curious how you ascertained this exact behavior.


Mainly this was just myself getting irritated at MS Teams and trying to figure out what it was doing. It was a couple years ago and my current company doesn't use teams, thankfully, so I can't really see if its still valid.

From what I remember..

There are files on the disk that get updated/overwritten with pulls from the server every time it launches. Somewhere in AppData I think. A few of these are config files (with lots of interesting looking settings, including beta features).

One of the config entries specifies a telemetry endpoint (which, you _could_ figure out with a network tracing tool but there are a ton of MS telemetry endpoints your machine is probably talking to. Best to just grab the one explicitly being used from the config like this). I forget the full name of the setting but the name pretty clearly indicates its for telemetry, and the file is clearly a config file. If you can't find it just by browsing the structure, try a multi-file search tool and look for 'telemetry' or URL/hostnames.

You can't really change the value on disk and make it just take effect from there, since it gets downloaded from the server and overwritten before Teams loads. There might be some tricks you can do locally to persist the change but nothing seemed to work for me. You could override response from server via mitmproxy but that requires finding where it comes across the wire at launch time and then building a script/config to replace it.

Anyway, you can block that telemetry endpoint from a firewall and see your memory bloat. Or you can intercept that endpoint in any mitm proxy. I went with this [mitmproxy](https://mitmproxy.org/). From there you can capture the content it sends to the endpoint, or even change the response the server sends (Teams just seems to expect a 200 code back).

The telemetry data itself is some kind of streaming event format. I think I even found documentation on the structure on some microsoft website, so its likely a reused format.

It's pretty straightforward.

I couldn't spend too much time on it and now it's not something I even use, but some cool things you might want to try if you dive deeper into this:

- Overwrite the config file as it returns from the server, to turn on EU data protection, change various functionality you're not supposed to, or flip some feature flags.

- Figure out if there's a feature flag or even other overwrite to fully disable the metrics so they aren't even collected, from anywhere in the app.

- Intercept telemetry, return an 'OK' response and drop the data from telemetry, or maybe document what they collect more definitively if you think there's interest somewhere. This keeps your privacy but doesn't really do anything for performance.

- Interfere with the data before actually returning it, maybe try playing with event contents and channel/user indicators. Microsoft probably won't like this if they notice, but it's unlikely they'll even notice.


No clue why they're even doing this and not just sampling after the fact. There's no way they are gleaning anything useful that they couldn't more efficiency (and anonymously) capture.


Do u have a source for this?


I really want one too. This is the closest thing I could find, but doesn't claim the keystroke level of detail described above: https://www.zdnet.com/article/i-looked-at-all-the-ways-micro...


It’d be trivial to MITM it with wireshark


For those interested, try Burp Proxy[1] or Charles Proxy[2].

1. https://portswigger.net/burp/documentation/desktop/getting-s...

2. https://www.charlesproxy.com/


What's the easiest way to get the Teams app to accept the MITM on TLS?


I believe it just uses your systems rootstore. So adding the signer cert in there should probably be enough.


Ah, that's right, Chrom* based things look at the system store by default and it's the Firefox based things that don't (without configuration at least). Thanks.

Edit: and that reminds me I should probably run this test on new Teams, where it now uses the built in WebView2


On iOS, Charles Proxy.


Is the telemetry really that big of a load? Having a persistent connection and sending data over it is pretty standard for games going back decades, even AOL instant messenger had this feature for typing.


It is on mobile.


Your description is so absurd that I can't tell if it's real or a satire.

Please tell me this is a satire piece...


Asana used to sometimes have textareas that would take a full three seconds to display each key press. On then-current MacBook pros. You know, something that had nearly zero latency on first-gen single-core Pentium chips. Hell it may still do that, I never saw them fix it, I just finally got to stop using it.

Never underestimate the ability of shitware vendors to make supercomputers feel slower than an 8086. These days it usually involves JavaScript, HTML, and CSS.


I had the exact same feeling. Can't tell if it's real or a joke. It's not only outrageous for privacy, but also very bad engineering.


It is the kind of engineering Teams feels like.

A glorified IRC client should run in under a megabyte of memory.


This is so stupid. They are the sender and receiver of the messages. They can backfill their telemetry using batch processes offline ffs.


Unless someone really complains loudly enough large orgs switch to a competitor, it's tech debt and not a bug they need to fix.


MS Teams is by far the worst piece of software I’ve ever used. It is ungodly slow and it just gets slower the more you use it.

I believe it is actually hitting the server to update the online/away status light for every single message in a conversation. If you turn off all the status update stuff in the settings then the software speeds up dramatically. Another thing you can do is find the folder where it caches everything and just trash the entire thing. Somehow, they’ve managed to make caching slow everything down rather than provide a speed up.


Have you tried ‘New Teams’?

It’s exactly the same but then you can have to open twice and drain your resources much quicker.


And as a bonus, Outlook stops reporting presence!


hmm I use teams daily all day for work and don't have these issues, maybe your org messed something up?


I use it exclusively as a progressive web app on Linux and it's not particularly slow, but it is buggy as all hell. Easily the worst rich text editing experience of any chat client I've ever used. Teams is without a doubt the worst piece of software I'm required to use on a daily basis


It is also possible that you don’t notice the slow downs?

Teams installed directly from the App Store or Microsoft on any device I own (high end windows/mac/ipad) devices are all terribly slow


I have used it at two different orgs (a university and a company) and it had the same issue on both. Perhaps your org has the settings figured out!


Why is that not at least done asynchronously? I thought part of the whole narrative of shipping these new terrible pieces of software as standalone Google Chrome instances was that it makes it easier to spawn async JS workers for background tasks and whatnot?


async is still difficult. There is no getting around data synchronization issues. either you need to spend a lot of time in design or will get constant problems with things like not having a mutex when you should, mutex deadlock, holding a mutex too long, locking/unlocking too often.

I haven't done async JS, but I've done enough async elsewhere to know that language cannot work around bad design.


I thought this was mostly/fully solved with CRDTs?


You still need to design a CRDT that solves your particular problem, you don't just say the magic word "CRDT" and the problem is gone. And the performance will depend on how good the design is.


I think that’s what it’s doing. If you have a conversation with a person spanning hundreds of messages (over many weeks) it’ll be updating the status light next to their name on every single message in the history. The more messages in the history, the more workers you get!



If you think Teams is bad, then you haven't had to endure Google Chat.


Can't have technical debt if you throw it all away every couple years and start over.

Work started off using Google talk. I am expecting something to replace google chat like they did talk and hangouts.


LOL, you wanna try it on my ~2 generations old Core i5 corporate laptop. Sometimes, the first steps of drawing the calendar view are roughly the same speed as me drawing it in Paint.

Maybe someone should normalise giving developers crappy laptops to develop on.

(Has anyone done a deep dive into Teams to explain what on earth is going on? I mean, if VSCode can be fast despite its underlying architecture, surely something could be done about Teams?)


>> Maybe someone should normalise giving developers crappy laptops to develop on.

Then the developers will complain the hardware is unusable to do their job even though that this was a supercomputer back in the day. Then you say "No, it's the software please fix it."


The problem is, it's not their software. No control over Slack, Outlook etc


Yup, my work machine has an older i7 (2021-era maybe?) with 32GB RAM and between Teams, Slack, "new" Outlook, Jira, WSL, driving a 4K display off the piddly integrated GPU, and a VPN that involves every packet doing a transatlantic roundtrip whenever I want to connect to an internal service, everything is just dog slow. And the fan noise—my god the fan noise.

Some days it makes me extra motivated to make the code I write fast and efficient; other days I want to give up entirely.


This actually I don’t get and don’t stand behind.

Would you give a professional smith a low quality hammer? Would you give a chef a blunt knife?

Why do corporations give out garbage hardware to their smiths and chefs (+ enforce their use via policy) ?


Do companies using Teams have a choice of using something else or are their C*Os and IT departments married with Microsoft? If the latter, they'll use whatever Microsoft throws at them, even if it doesn't work.


Teams' USP is that it's part of the suite corporations are almost universally already paying for.


Weird, a statically built ELF that supports TLS1.3 + HTTP1.1 is like ~30kb, all you need is Emacs as a UI and you have Teams 2 at 1.0e-5% resource usage.


Try Pidgin with the excellent ms teams plugin: https://github.com/EionRobb/purple-teams - less than 100mb ram usage and notifications that still work after an hour. Only for (video) calls you need to open teams..


What’s the modern form of “what Andy giveth, Bill taketh away”? “What Tim giveth, Satya taketh away”?

https://en.m.wikipedia.org/wiki/Andy_and_Bill%27s_law


Teams on the desktop has improved with their "v2" client. It's not the world's fastest piece of software, but I find it to not be embarrassingly slow now (on a reasonably specced machine).

One as to hope that the same perfomance lens will now be turned on the mobile apps.


That's usually what cross platform at an enterprise company at scale gets you


That's the power of Javascript!


The wonders of web development.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: