To me, the most interesting feedback here is that seamless-editable-by-default is a negative for this user, and as a work-around, this organization locks/unlocks every page. This is surprising to me because I find content locks and editing friction very annoying. For example I used Quip for many years, which locks any block currently being edited by someone else, which can be quite frustrating when someone happens to have an idling cursor in a random position. Likewise, wouldn’t you be baffled if you needed to click a “Start Editing” button in Word or Google Docs? But it’s an interesting perspective to consider especially for users coming from Confluence, where editing has much more ceremony, and more generally for read-heavy wiki use case. In any case, it’s really the accidental edits at the root of the problem.
Like many other commenters, my biggest pain point is page load speed.
Likewise, wouldn't you be baffled if you opened up a wikipedia article and found you were automatically editing it, and now you need to worry about making an accident every time you visit the site because you had no intentions of editing content, instead just consuming it.
But that's just because people are using the product in different modalities.
Are you using Notion as more of a live editor, where the documents are often short lived and transactional in nature? Or are you using it as a sort of permanent knowledge base and history?
The reality of the situation is that each modality commands different designs, and Notion generally tries to solve for all of them with single-minded design principles.
I think there's a strange fallacy in our industry of UX design which dictates that your product should resolve to simple design decisions or become convoluted configurable behemoths driven by the unending deluge of ad hoc decisions from customer asks - like there's no middle ground. Some designer is hopping up and down in a fit going, "but the user doesn't understand MY design principles!"
I feel like "tech" has ultimately failed in this regard.
If you think a bit more, notion is more or less a Google drive with smileys. Which is not a critic.
This is what happens when you start designing products for the lowest common denominator and weigh quantitative feedback above qualitative.
You understand what the OP is complaining about is not the same as the scenario you presented, right?
I'm not even sure why you brought it up; is it to imply that _any_ 'friction' is bad? Is having to enter 'insert mode' in vi bad? No, of course not. For those that want it, that 'friction' provides value.
But what do I know? I still think context menus + hotkeys are a pretty great compromise.
Interestingly that’s exactly what Apple Pages does now, on phone/tablet at least. I like the way it forces a moment of consideration of what’s there before I dive in. And iterative edit–review–edit cycles help me to keep making macro progress instead of fiddling with irrelevant details. (I’ve not tried Notion though.)
Once I had a very long list in Notes.app that I'd been maintaining over a few years. One day while scrolling it on mobile, I somehow replaced the entire document with some stray input, and by the time I noticed, undo couldn't restore it. Though I was able to recover it because my laptop (which Notes.app will sync to) hadn't yet connected to the internet.
Same in google docs mobile app. Edit button in the bottom right corner.
In an organization where one team is using notion and is using it to share docs to others that haven't gotten used to it yet, or where you constantly have new team members encountering it for the first time, locking widely shared pages is pretty important and easy to forget.
> some parts
Some parts of a page? I don't get this. Get that part into a nested page then?
To be fair, when sharing google documents widely, one common practice is to make the shared version comment(/propose suggestion) only, and often to share the /preview link by default, so that you have to explicitly navigate to the editable version of the page.
This helps with performance and with accidental edits, and many popular documents still get weird suggestions that are clearly unintended.
Viewing a document on mobile is painful, since trying to scroll through the document often results in the app thinking I'm trying to edit the page.
I do think docs should default to read only mode on mobile to prevent this from happening.
I find the Google Docs feature to share a document and allow suggestions only to be very useful. It lets me, as the author, keep track of what’s going on.
Not if they were shared collaborative documents...
In those I would be baffled by the opposite...
Word (and friends) kinda has that. I'm not sure what the heuristic is, but in some circumstances it will put a message in the window title saying you need to save a copy of the current file before you can begin editing. I know it happens for downloaded documents, and that's about it.
I'd like to agree here, but I also find myself liking the fact that Docs has the "Viewing", "Suggesting" and "Editing" personas available for use. These options are intended to mirror Word's review features, but it also fits the idea of a "Start Editing" button, in my opinion.
There's times where I really like editing right away, but also being sure that I won't do any accidental edits. So yeah, I definitely agree that accidental edits are at the root of the problem for this.
Several months ago, I got so fed up with edit-by-default that I started a chat in the feedback thing in the lower-right. What I learned from that chat is that other people weren't using Notion the same way we are. We use it largely as a wiki & knowledge base; it hadn't occurred to me that other people aren't using it as a knowledge base, which is almost by definition read-heavy.
But I also want to point out that editable-by-default is exacerbated because other aspects of the UI have trained me to have behaviors that result in accidental edits.
> I'm sick of making accidental edits.
> 9 times out of 10, when I go to page it's to read it not to edit it. Editing is rare enough that when I want to do it I'm 100% down with having to click an "edit" button or something to explicitly switch to an editing mode.
> This isn't a permissions thing. I should be allowed to edit all of these pages. It's a UI thing that it's too easy to accidentally edit.
> This is an account-scoped problem. It shouldn't be broader; other people in the org shouldn't be affected by my preferences. It shouldn't be narrower; I don't want to have to configure this for each page.
> Many parts of the UI seem to be designed to cause accidental edits. Positioning the cursor at just the right spot can introduce an empty line. It's easy to accidentally drag something when highlighting text to copy. Clicking a link to another Notion page opens in the same tab normally, so I get in the habit of middle-clicking them to open in a new tab. But if it's an external link, then for some moronic reason middle-click doesn't open it (just use damn `<a>` elements! stop breaking the web!), and then I get middle-click paste (because X11) and I end up accidentally pasting some garbage in to the page-- _because of a behavior that other parts of the UI trained me to do_.
> I'm sorry for the rant, but it seems like such a basic thing, and it's been so frustrating.
> Like, my ideal resolution is you point out a setting on a page that I missed and I say "nevermind, cheers".
> (a lengthy reply explaining how to use page locks and database locks)
> Re: Page lock: That's not a solution, for a bunch of reasons that I'd tried to express in the original message:
> - I don't want to manage this for individual pages, that is error-prone and tedious; if there's a page that doesn't have it set, I won't notice that it's not set and risk making accidental edits. I don't want to have to remember to turn it back on after making an edit.
> - I don't want prevent others from editing it, just myself
> - I don't want others turning off the page lock to affect me. I don't want to have to train everyone to always set it after editing a page.
> Re: Database lock: I'm not sure about other parts of the org, but I don't really use database pages, so that's not of interest to me.
> Hello Luke,
> Winnie here, jumping in for Gerard. Thanks for sharing your thoughtful feedback!
> We don't currently have page setting that lets you be on a viewing mode and have some sort of prompt if you want to edit a page. It’s a legit use case, though, and definitely something we want to support in the future.
> This would totally help those that are creating wikis or knowledgebase, so I've passed this to our product team to take to heart for further improvements.
The first rule of UX design: it’s not about you.
Perhaps OP isn’t Notion’s target audience, but dismissing something because you don’t share their perspective is not great.
That's absolutely the default behaviour for Word when opening a Doc sent from somebody else ("enable editing"), and it does make sense like this.
Not at all. In fact I prefer the "viewing" mode in Google docs when I'm just reading a document written by someone else. Why would you want everything to be editable all the time? Usually docs are produced by one or maybe a few people and viewed by many more.
Can you run a report on how often folks lock-unlock-relook pages?
This should be a good proxy for how many people are hacking in a workflow to allow for explicitly entering edit mode.
Typing latency while writing or editing a page is really high (bad). Every keypress you do, must be going through a long chain of "what can we interpret the user to be wanting ?" questions. Guess what!? The user is probably just trying to fucking type! Special features and options should be hotkey activated, not "smart" default deduced.
The afore-mentioned smart typing is 99% wrong or in the way. Typing slash ( / ), for any reason apparently, and in any context, pops up the Basic Blocks selection window. If you type, for example, "10 / 2 = 5", or perhaps "a/b testing", or any other very common valid use of the slash symbol, you are left with that stupid popup on the screen. You have to hit ESC to close it. Pity the fool who has a touchbar Mac. And if for some reason you wanted to end your line with a slash, and you hit return after typing that /, the popup eats the slash and puts you in a new block below.
I could go ON and ON with examples. It actually feels like this app was designed for people who only use one finger to type and the other hand driving a mouse all day.
Oh one last tidbit. You know how people put icons on buttons and other things to help you identify them quickly, hopefully to make it easier for you to click and get what you want? Notion has a clever fuck you to all those users. If you use the navigation tree panel, and you see the item you want - especially because you quickly recognized its icon - and you click it (the icon), do you get the item you wanted? No, of course not! You get a handy Change Icon popup. Now not only do you not know if you found the item you wanted (since you didn't get to see its associated page), but instead you now have to dismiss that popup. Clicking that icon should have done exactly the same thing as clicking the text beside it: open the damned content associated with that thing.
Now, maybe you want to copy a link to that item. How do you do that? That's in the hidden/hover [...] button for the item. That's fair. And that's where the change icon action should be.
There's so much wrong with this app that I sometimes wonder if this isn't an enormous practical joke - like the people who write completely nonsensical research papers just to prove how broken the research publishing system is; this joke is for the VCs and the shiny-toy users.
I think there's a great product somewhere in Notion – the blending of wiki/database/etc is great – but THIS is the biggest issue I have with it. Everything I do just takes that bit longer than software that I choose to use, because everything is designed around the mouse.
Keyboard shortcuts aren't enough to create a good UX for the keyboard, the whole UX needs consideration, and Notion has unfortunately failed on that.
For a while their text editor was very poor, to the point where my colleagues and I all edited text in other software and copied it in. This has improved a lot in the last year or so, but there are still plenty of issues at the block level and upwards, it's just the word-level that got better.
Please, If you could you should, it helps us, the ones building new tools, to avoid making the same mistakes.
I find your comment, and the post like this, very useful, often I look for inspiration in most popular tools, Notion recently, because I want to build something that feels familiar for many many users, yet new, and I'd like incorporate only the good patterns and trying to not make same mistakes.
It really comes down to the oft-used expression, "do one thing, and do it well". People think they want a flying car, but once they try it they discover it's a bad car and a bad airplane.
Notion tries to do everything in one app - and for all users. To be fair, that last part is the fault of the user; if they can tell they are not the target audience, they should not use it. Unfortunately, it is such a "cool" app that the upper management audience falls for it and forces it upon the rest of the company.
So issue #1 is that it tries to replace too many other apps. But if you've used any of the apps it tries to replace, you will know what I mean.
If you write much, you will find Google Docs or even MS Word to be better.
If you use spreadsheets for more than just columns and rows to put basic text in, then you'll find Google Sheets or Excel to be better.
I haven't even bothered trying to use Notion as a database. I would bet real money that it would be a regretful experience.
If you use kanban boards, you'll most likely be happier with Trello or Jira or Asana or other organizer apps.
Issue #2 is about target audience and use cases.
If the target audience is developers, especially those who type quickly, they will suffer greatly. I don't want to sound condescending about other audiences, but from years of seeing "regular users" use software, I would say that slower actions and more (tedious) mouse clicking is already their way of working - so Notion is fine for them.
I'm not a UX researcher, but I believe part of their work involves measuring how users use software - which features are most used and which ones are least used; which UX behaviors are surprises that get in the way of the user; which features do users spend time looking for but never find; and so on.
Here are two specific examples - a small not awful but still obvious UX misfeature, and perhaps the worst usability behavior I face all the time:
The Change Icon feature when you click the icon of an item in the nav panel should not be initiated by clicking the icon of the item. The purpose of a nav tree is to navigate. It is not a place to edit items, at least not as first-class actions. Also, icons exist to help the user more quickly identify the thing they are looking for. The user is compelled to click on the icon as a means of choosing the nav item they want to open/expand down. But in Notion, clicking that icon pops up a Change Icon window. Other extra actions, like rename, delete, share, etc. are properly buried under an on-hover [...] popup menu, and change icon should be there as well. Incidentally, the icon in the nav item is between the expand > button and the Item Name. So even when trying to expand the tree, it is fairly easy to misclick and open the Change Item popup.
I reported that misfeature many times to them, even directly to one of their onboarding specialists for our company. As a developer, I am certain that moving that action to the [...] menu and making the icon have the same click effect as the Nav Item Text would be a small effort. That it hasn't been fixed yet tells me something bad about their management... because, in this case I know I'm not (just) a weird user. The frequency with which users will want or need to change nav item (usually a short name for the page) will be very low.
But my worst pain comes from the slash / character handling. When writing in a block, hitting the / causes a general action helper popup to open. If you type "In Elixir, we prefer cond or function pattern matching to if/else", you'll get a popup because of the /, and the popup will search for "else" within some list of actions. If you happen to be typing quickly, and if that if/else happened to be at the end of the block you were typing (such that you now hit return), then you'll get whatever action applied to the block or document state that was associated with that action.
In the if/else case, it happens to match on "Create Linked Database", and your return puts you on a new block which conveniently opens another popup to help you select a database from within the user databases in your Notion tree.
Oh also, the /else got eaten and is now gone; you may not notice, because you're now in a new block trying to decide how to undo this select database thing...
There are so many wild possibilities here. You can inadvertently apply H1 style to the block. You can insert an inline equation (with a convenient popup to type your eq into!). You can delete your whole block. To find out what all you could do, just type / and scroll down the list.
By the way, if you're in an inline code section `x = a / b you get that popup, and you can't ignore it by typing the closing `.
Here's the puzzle. Keyboard shortcuts are for power users. Keyboard shortcuts also usually require a modifier, unless you have a multi-mode editor like Vim. If a power user wants to use a keyboard shortcut, they will use it once they learn it. Most people, even casual users, know about CTRL-C/V, or at least CTRL-Z. Really simple users can still use the mouse to do things. It's just poor judgement to make a standard typed keypress to launch an action helper.
Furthermore, it begs the question of "What does Notion expect people to be putting into blocks?" I would have thought people would put mostly content, and then occasionally sprinkle some formatting or other goodies. Again, mouse-menu actions or modifier keyboard shortcuts could meet this need.
Lastly, I didn't really go into detail about why Notion is inferior to specialized apps, but I have zero doubt that I could take any typical Excel user and show them the Notion "spreadsheet" block and they would be frustrated to the point that they would give up. Take any writer and give them a Notion editor that interrupts their typing all the time, and they will give up too.
At my company, at least in my group, we occasionally write first and only in Notion. Notion is our official document store, but often we write first elsewhere and then copy paste (a whole other fail topic) into Notion, or most often we just put a link in the Notion page that leads the user to the real document in Gdocs.
I really tried to like Notion but I found it just slowed me down -- as in actually delayed what I was doing with lag and silly things like trying to be clever as you say, not just the learning curve
I'm now trying out Obsidian(1) with a plain old directory of md files, but YMMV I never needed the table/db stuff so I dunno if Obsidian has that sort of thing or an equivalent. The directory is mounted from my NAS using its Tailscale(2) IP so it's in theory accessible everywhere, but of course I've not been able to test that much this year
e: I should note I use this for bigger notes. I use blank business cards and a pen to catch ideas, so obsidian's current lack of mobile apps wasn't an issue
I've seen several products now including Obsidian that seem to take markdown support quite literally, centering themselves around .md files and markdown presentation (### Heading 3), rather than simply markdown keyboard shortcuts and ability to export as markdown. Markdown has its place but its primarily for easy diffing in text-only content like code editors, or a human readable option for backing up content. Tools like Obsidian are essentially lightly tweaked code editors, not modern project-based editors the whole company can use.
My go to for a team would be good old wiki software of some sort (probably dokuwiki)
You can just keep typing and the menu will close. The vast majority of the time, it doesn't actually interrupt the flow of typing in content. This happens even if what you are typing matches with a menu item. As you said, you have to press enter to actually invoke one of the actions in the menu.
Using a single key to invoke a menu and then having successive keystrokes search through that menu as well as enter the text in the editor at the same time is a UI choice I actually vastly prefer over having say dedicated keyboard shortcuts for each of those menu items, or having to click a button to open the menu. It's similar to having leader-key-driven menu selection in Vim or Spacemacs (but of course different in that the editor is modal). It is a menu discoverability and ease-of-use tradeoff they have to make.
I know of no other app which does what they do. Other apps do things like cmd-space (spotlight, which I use ALL the time), ctrl-space (which I have mapped instead of ctrl-b in tmux), shift-shift, which opens search in JetBrains IDEs, etc. Notion could have made cmd or ctrl-/ open that menu at the current cursor location. Adding that one modifier requirement would eliminate so much badness.
As it is now, if your /-whatever is at the end of a line, you're stuck with that popup (hit ESC or mouseclick elsewhere). They even act on the / key within an inline ` code block! So if you want to type a code sample, and you happen to use / toward the end and then hit return as you naturally would, you will in fact select any match in that popup. Who edits code and manually applies styles to auto-syntax-highlighted code?
You may like the slash feature, but I believe strongly that UX educated people would consider this user-hostile. At minimum it is a visual disruption. You can type right on past it and it may eventually go away, but as a user you have to learn to ignore it. It is also absolutely consuming resources while it is going search filtering on every keypress you make until it gives up and goes away. If all you do is use Notion, then it may not be noticeable. But if you are a dev with multiple projects open, multiple local servers running, and other load, you do not need apps that simply waste resources.
One of the apps you cited, JetBrains IDEs, provide extensive predictive hints and documentation in menus that automatically open after any character is typed. I think the difference between the Notion predictive menus and the JetBrain ones is an issue of performance, rather than concept.
That isn’t to say the slash menu isn’t annoying - we have a lot of work to do!
Just let me turn off the / helper in Notion, even if I need to edit a config file to do it.
For all the small UX bits that aren’t 100%, there are a dozen other apps that can’t even get pictures, text, equations, and hierarchy right. Google Drive, org mode, or Roam are complete paradigm shifts away from an extremely consistent text editor that can embed anything. For every little quirk with icons, I’m reminded that while Notion might not be perfect, it’s still leagues beyond anything else in the space. And it shouldn’t even be hard.
Is it also super sluggish for all you SF Bay area people? I can't tell if it's just network latency on a heavy protocol, or just slow slow.
I do agree with the thrust of the article too, although I don't find any one UX issue (beyond slowness) a deal-breaker, but together they're collectively a pretty frustrating experience.
The mobile situation was much worse a year ago. We made big start time improvements by removing React Native and rebuilding our caching layer, but we still have a long way to go to beat Apple Notes. Using the Notion widget on iOS can really help with quick access for grocery lists.
On Android devices the situation is still not usable.
My biggest "speed frustration" right now is opening a new window in the Desktop app. Searching + navigating to a page within an existing window has gotten to be super speedy, but searching and cmd+enter to open in a new window still has quite some lag to it.
For a mere thousands of dollars you can join the fun.
I imagine by M2 though this golden year will be far gone as everyone increases even more how much resources their apps eat.
I have a 4 year old laptop that cost me $3000. Xcode is so laggy sometimes that if I type, it'll miss keystrokes and words come out garbled beyond recognition. A few weeks ago some source code I downloaded from github wouldn't compile because the swift compiler spent too long doing type inference, and decided to error out.
I'm haunted by a vision of computing. In the vision, us software folks just add bloat to everything until it starts feeling gluggly and slow on our modern expensive computers. Then we optimize our programs just enough to keep them running vaguely ok on whatever hardware is on our desks.
The only way to have a snappy computer running modern software is via the tireless work of hardware engineers. Whenever a big hardware performance improvement comes (like the M1), there's a window of a year or so where if you upgrade, everything will run fast again. And of course, all the devs with the new machines stop optimizing their programs and gradually everything slows down again. Eventually our software goes back to being as slow as it was before, except if you didn't upgrade your computer, now it barely functions.
I want off this ride. My 6 year old FreeBSD server is somehow still snappy and responsive. Maybe the answer is to just not run modern desktop software.
I maintain today you could've gotten %80-%90 of the benefits of swift with a syntax refresh and add a few new cheap to compile features to Objective-C itself, like stronger nullbables and the ADT enums.
I think the 'good enough software' stuff will stop happening when physical limits start limiting improvements in compute, because the only way to have a competitive advantage then is through better software.
I hope that day is far away although, because it means that something like 8k consumer VR is something that will never happen, where the software is written properly to take proper advantage of the hardware.
We're having this conversation in the context of notion. Starting up Notion on my laptop feels like wading through honey. I really want to love notion, but every time I open it and try to do anything I find my motivation tricking away. Notion isn't even doing anything impressive with all that compute - its just slow. The sales pitch I make in my head for notion is that its a place to organize all my notes and workflows, but like Jira, living in notion means accepting that I work at the speed notion does, and that feels antithetical to the feeling of productivity I have in snappier, lighter tools like Bear and iA writer.
But Notion and XCode aren't really the problem. The problem is cultural. It seems to be the worst in the web ecosystem, though its not confined there. My favorite example of all is this issue in web3.js. I can't help but play Benny Hill music in my head while I scroll through this 3 year old, apparently unsolvable issue thread.
Performance is taken into account when it matters for the product, you'll notice this in games where they do a lot of perf improvement work.
Also swift & rust are slow due to their design as a language. They provide very strong guarantees and make a lot of thing static. It's very similar to the reasons why C++ is slow to compile.
Also notion is like 10 engineers last time I checked, and they've decided to go towards speed of dev & features more than nicer, but slower to develop tools.
The business people are still clueless and continue to double down on more features their customers don’t want. While the competitor is gaining market share.
I think most development shops chronically underestimate how much application performance matters for sales. Most people will never file bug reports when software is slow. They just "won't like that program for some reason". (Or worse, misattribute the reason they don't like your product.) Slowness is invisible to the developers because they're almost always using computers which are much faster than the computers their customers are using. And unless you actually take the time to record performance statistics, you won't have any idea this is the case.
Game developers know this. People measure the FPS they get on their gaming computers. But as far as I can tell, the reason isn't an essential quality of video games. The difference is culture. There's a culture in video game development of measuring performance. People have the tools and terminology to talk about it. In comparison, what are notion's performance numbers like? Does notion run at 60fps for the average user? How many ms of typing latency does it usually encounter? Does the team even know?
> Also swift & rust are slow due to their design as a language. They provide very strong guarantees and make a lot of thing static. It's very similar to the reasons why C++ is slow to compile.
Roll to disbelieve. Swift and rust are simpler languages than C++, and yet compile much more slowly. The reason C++ seems to compile slowly isn't templates. Its because of the way C++ header files need to be parsed over and over again, and thats not a problem rust and swift share. (Rob Pike has some great rants about this if anyone's interested.) A well written, from-scratch Swift compiler should be able to get compilation speeds closer to Go. At least, for debug builds.
I suspect if swift and rust were invented 20 years ago, we would still have been able to write compilers that ran at tolerable speeds on the computers of the day. And if thats the case, the reason for slow compilation speed is something other than language design.
> Also notion is like 10 engineers last time I checked, and they've decided to go towards speed of dev & features more than nicer, but slower to develop tools.
Notion can make that choice if they want. But until they fix performance, I won't / can't use their product.
> Also performance work is not fun
Speak for yourself - I love performance work. Its so measurable and the feeling of taking something sluggish and making it scream is delightful.
For games, it's not a 'culture', it's because games become very frustrating to play when non-responsive in anything fast paced, and thus will review badly and become 'not fun' and thus will not sell. It's directly connected to sales metrics, which is why management in game companies give space for it, and why CDPR recently offered refunds for a game because of bad perf on the PS4 tier of consoles, which is fairly unprecedented. You'll notice worse performance in slower paced games typically, such as Civ 6.
Also I've worked on trying to improve swift build perf and have worked on large C++ codebases before. The reason why C++ is slow to compile typically is because templates cause an explosion in code generation, everyone uses boost & the stdlib smart pointers & containers, which all template heavily and result in slow build perf and large binary sizes. Swift & rust do that, often implicitly and in an invisible to the programmer way and type inference are the typical reasons why it is slow and they too, create large binaries. When I started running into swift's build problems, I internally said to myself "oh boy, it's C++ again" and if you go to WWDC and talk to Xcode's engineers or swift compiler engineers, they often call swift 'new c++' and other not as nice names. Swift and rust are also incredibly complicated languages with a lot of edge cases when you start getting into the weeds, on par with C++.
Why are these languages using features such as type inference, stricter and more complicated type systems along with heavy templating? It's because now computers are fast enough to provide these 'developer ergonomics' and 'multithreaded memory safety without locks' that these features become viable in the compilers of today vs. the compilers of yesterday. If they could deliver such abilities in the past without having a compiler that takes too long, they would have. In the past C++ was known as a slow compiling language, like swift is today. You also notice slow build times in other 'statically sophisticated' languages such as scala or haskell.
Golang was specifically designed as a language to provide fast compile times. When they were designing the language, if they had to decide between cool language feature and fast build time, they chose fast build time.
Try to expand your horizons, just because you like something, it doesn't mean most people like it. I wish most people liked performance improvement work.
For all that you've said, I still strongly suspect that a standalone rust / swift compiler designed for speed above all else could achieve many times the performance of the current LLVM based designs. The resulting binaries might need to lean heavily on dynamic dispatch over monomorphization to achieve that - but during development thats a tradeoff I'd take just about every time. The common factor in swift and rust is llvm - both using it for codegen and having the compiler think about the program in terms of llvm constructs. The fastest compilers I know about - V8, LuaJIT, Go, Jai(?) are designed with both performance and the target language in mind, and (I assume) don't translate the code through a series of complex intermediate representations internally. And you're right - none of those languages do complex template specialization.
Also its probably no coincidence that maybe except for V8 all of those compilers were designed by a single expert mind, not a huge team spanning multiple companies. As you point out, large scale refactoring (required for top tier performance) gets increasingly difficult as team & code size increases. The reasons are partially political ("your commit conflicts with how much??"), and partially because it gets super difficult for any one mind to conceive of the whole program at once when it has so much code and so many authors. Let alone do large scale refactoring.
I don't know if its true but I heard the chrome team started with just a dozen or so very senior engineers who all had experience with webkit. Before they brought anyone else onto the team, they spent months iterating together on the internal design of the browser engine until they were happy with it. They did it that way because they figured it would be basically impossible to change the core down the road once they had a larger team hacking on it.
> Why are these languages using features such as type inference, stricter and more complicated type systems along with heavy templating? It's because now ... these features become viable in the compilers of today vs. the compilers of yesterday.
Maybe. I think we also just got better at designing languages. Rust's trait system seems both simpler and better than C++'s classes + templates. Traits would have been just as viable in a compiler decades ago, but OO was trendy and we didn't know any better.
> just because you like something, it doesn't mean most people like it
Oh, I know! I've spent enough time working on teams building websites to know I'm not the average bear. But I don't think its because performance work is fundamentally uninteresting. I think its because most engineers working on websites don't have enough raw CS skill to comfortably step into the performance arena.
I think it's how they cache/request the pages. The slowness is usually in switching pages.
I was therefore pretty surprised to hear that Notion is apparently worse. I suspect a lot of the sluggishness with both programs is at least partially because they don't render much server side. Compare how slowly a .ipynb file loads on GitHub compared to Markdown.
I've tested notion on some old laptops and it did ok. But I only tested it on some empty documents, so maybe that's why it wasn't too slow.
> I am an unfortunate user of Notion. I have to use it in my day to day job because it is the tool of my company choice. I suffer every time I'm doing anything in it.
I put a good bit of time looking at alternatives to paper that allowed for concurrent editing by multiple people, rich support for technical documentation/code snipits, good tables, fast, etc.
Notion isn't perfect, but after going through a dozen offerings it came out far and ahead of all others, especially when you factored in its price. Over the last year they've also really moved ahead with new features, etc. We've moved all our docs and project tracking over to it and now we're fortunately off next-gen Jira.
We're a very technical team, and we share our docs rw to the whole company. Out of all the tools we use, I found this one pretty pleasurable to use to be honest.
I still don’t understand when which versions of half ass Markdown work when as I swap between Jira ticket bodies, Jira comments and Confluence.
Most of the comments seem to be rather small compared to the overall use and productivity gains that something like Notion offers.
Someone with a different background may have no problem with the text editing, because they're not used to anything substantially different, but may have an issue with another part.
It's great if we can take a step back and see the bigger picture, if there's more productivity overall, but perhaps the things you care about happen to line up with Notion well, where the author's didn't.
So slash commands, markdown support, code snippets, dark mode, keyboard shortcuts, rich embeds, etc.
Those are the bare minimum for me, but I don’t think any of their competitors actually have all of these features which is one of the reasons Notion is a good fit for me (and most people that try it).
The conclusion I came to is if you're going to remake and extend the word processor, you must take the lessons of the last 40 years to heart. There are in-built expectations for word processors, including keyboard commands, selection & cursors, speed, permanence & permission, etc, and Notion violates many of them for no good reason. The result is an unpleasurable writing environment. That should have been the easiest thing to get right, the foundation upon which amazing new features are built.
I use Notion for a few things, mostly because existing tools have yet to move from document-centric to project-centric designs, but it is not a tool that I would foist on the average user nor one I especially enjoy using. So much potential is held back by bad UX, which I think a lot of people don't see because Notion does have good graphic design and a few really stellar capabilities.
My impression is the team has probably concluded their rapid growth is a validation of the UX, rather than other positive factors of Notion, namely being the first halfway decent project-centric editor. Hoping they do a UX refactor soon.
We didn’t conclude anything as a validation of our UX - there is nothing in Notion that we consider “ideal” or even “finished”; we are painfully aware of how far we still have to go. There is just a lot of work to do for our small (but growing!) team.
I think the part of Notion that most gives me this impression is the information architecture, which can be an extremely difficult thing to change once a significant number of users get to know a particular layout, and hasn't meaningfully changed since launch. Of all the writing tools I use, Notion's IA has always been the least straightforward.
Between the '...' menu and the Settings & members section, as well as several options like favorite, share, updates, and options on the sidebar, there's a lack of clear hierarchy and separation between account, workspace, page, or presentation options. This lack of clear hierarchy, combined with some product choices that apply at an unexpected level of hierarchy or permission model, means many actions exact capabilities are unclear or violate expectations of where they apply - account v workspace, workspace v page, and all users v me.
Take the top bar for example. From left to right:
1. Breadcrumbs: workspace & page
2. Share: workspace-specific (where can I share just an individual page? why is this separate from Copy Link?)
3. Updates: page-specific
4. Favorite: page-specific that either applies to the workspace or is a personal favorite (unclear, given "favorites" typically = personal, while "pin" = others see it)
5. '...' Menu: contains mostly page options with a few workspace ones (e.g. Import, possibly Export?). I even got confused about whether style options are personal (e.g my reading preference for font) or apply to the page style, given many writing tools allow this kind of style configurability as a user setting.
There's also duplication of options around the UI including Import, Favorite, Move To, New Page and Updates (how is this different than Page History?), which further leads to confusion about where to take what kind of action and clutter the interface.
The sidebar mostly makes sense as its all workspace-related. However, new users are likely to get tripped up on the difference between workspace name/icon and the root page name/icon, but this is a minor point.
Over in the Settings & Members section, you also have a mix of options that don't really meet expectations. The menu itself is launched from the sidebar, where workspace options are, but the menu also contains account settings, which is higher up in the hierarchy.
As far as product choices, one would expect notifications and connected apps to be workspace-based, as they are in other popular collaboration tools that use the same workspace patterns (like Slack/Discord), given that some workspaces I want to be watching closely or use particular accounts and others I don't. But these are instead account-based.
Logging in and out of workspaces is also in an entirely different section (the workspace picker), which is quite different from most apps where you tap your user icon and make account choices. Also in Settings & Members is Dark mode, floating on its own not even under account settings. Are there other personal presentation options? What if I have accessibility needs or want a bigger reading font?
The overall impression I have of Notion's IA is that it minimizes UI footprint to a point of lack of clarity and that its structure is buckling under a heavy feature load. This is a signal of graphic design having priority over UX. Rather than express clear hierarchies in layout, they're bundled together to save a bit of space (e.g. topbar) or to minimize the number of maintained pages (e.g. a dedicated Home / workspace page, account management page, global activity page, etc). These are the types of things that bite back quickly as you scale features and expand audiences.
For an example of a product that really nails information architecture, look at Trello. It's got a really clean UI separation between the hierarchies of cross-Board features (top nav), within-Board (sub nav), List (main canvas), and Card (modal). You always know where to find each action and what each does in their context. Coda is also halfway decent, if a bit feature-rich and ugly. I also wrote about my own experience refactoring OneSignal's IA to manage future feature growth here: https://nickpunt.com/blog/when-to-add-hierarchy/
I have been using Bear daily for over 3 years and the features and Markdown support are great.
Not affiliated, just a fan/customer.
So, I'm stuck using Bear for personal use only because I don't want to contaminate my personal time.
I use Joplin (with Syncthing) which fits the bill. But I could literally use vim and a folder on my drive. I'm baffled by the productivity "maximizers" on HN. Is this never-ending search for the right tool just an elaborate excuse for procrastination?
I personally use Keep for most "notes" and notion for "documents". Some of the documents are notes but they're long-form research / project documents.
For example notion pages can include full markdown in addition to subdocuments, databases, templates, relationships, reminders, galleries, kanban boards, formulas, lists, calendars, timelines, images, videos, web embeds, code snippets, files, maps, tweets, figma views, etc.
Where other apps do have some overlap, they typically don't have similar sharing functionality. Notion pages can be private, shared, team-visible, or public on the internet.
To more directly compare to your examples:
* Vim - No rich document features, no mobile access, no markdown rendering, no sharing.
* Joplin - I haven't used this myself but a quick look seems like it has no sharing or team features.
* Obsidian - No sharing features.
* Google docs - No rich document features.
Keep is just a notes app. No argument that alternatives exist there. I like Keep because it works well on android and the web and keeps it simple, but there's definitely other options.
FWIW I agree there is alternatives to Notion, in the strictest sense of "alternative". Quip is really close for example. For some use cases (like the article here) you could call Confluence an alternative. But they're just not as flexible or full featured as notion for such a massive variety of use cases across a team. We use notion as a client CRM, project management tool, internal documentation tool, public user guide, discussion space, note app, research log, etc. and there's not really one tool that covers all of those use cases competitively.
Whenever you find the data that you're entering is more relational than you originally imagined it'd be, just change it into a Table. Easy.
Got more random thoughts to add to a table item? No problemo, just open the item and you have a full-blown page to work with (which you can even nest another table inside of).
Some random item that you should really follow-up on next Tuesday? Just add a reminder.
Somehow that just resonates with the way my non-typical (adhd) brain works, and it's what's keeping me with Notion for my personal stuff despite its frustrating slowness and many other flaws.
This point isn’t Notion’s fault, but subpages are such a trap. I was thrown a product spec drafted with all the Notion bells and whistles, and the details I needed were sprinkled throughout these tiny sub pages. It was a bit ridiculous to navigate as a reader, going back to re-read something was next to impossible. Just put all relevant content in the same place! I somewhat blame Notion for encouraging this, but really it’s up to the author to communicate efficiently.
When I used it, it seemed like a Jack of All/Master of None type of tool. Seemed like it was focused more on those who enjoy and find value in the act of taking notes rather the value of the note itself. I'm probably not the intended user, but for a lot of daily uses (Meeting notes, TODO lists, etc.) I found a barebones GDocs/Word/Pen and Paper to be more efficient and less taxing to pick up.
- The performance. Just awful on my MacBook that this a couple years old (read, nothing extreme at all). It's of course better on my shiny new desktop but fundamentally, it's been slow there too.
- Tables. If performance was tolerable elsewhere, tables are not. Everything is 2x slower. Wouldn't even think of attempting to use them on my phone (which also isn't old)
- Where are my billing setting on the app? Nowhere to be seen. And not on the website either, unless I go into desktop mode. I was thinking it was free for a couple months because I couldn't find the settings.
- Launch time. Don't get me started. When I used it i tried to never close it to avoid the launch times.
In the end I switched over the list-stuff to Todoist which had served me good, but it's of course missing the whole smart doc thing. I really don't understand if the devs all have beast machines or if they just don't care about performance at all. I'm not trying the product again in a while.
Generally speaking, people like their actions to be predictible, reproductive and deterministic. Whenever an app trys to add smart actions in the hopes of making the UI more responsive, it has the opposite reaction.
Notion seems like one of those tools that relies on a lot of background smart actions. Not that I mind too much, I'm a big fan actually.
But it's a traditional wiki.
I'd love for these to be fixed and the performance to be improved, but Notion is a great tool. We ran our whole startup on it, and I recommend it to everyone.
I feel like a good solution here is to let eng teams use a different tool.
Also hate the favicon changing since I have notes about third parties and I set the page icon to the logo of the third party.
I don't really use the rest of it. I think they're trying to be too fancy and it starts to break down when working in larger teams. You'll still go back to a good old fashioned word processor for anything important.
Seeing VSCode (which is a web tool) respond insanely fast for keystrokes and code completion makes me realize (amongst Microsoft products, Vscode is a gem - they’ve done a rare thing which is to make a complex performant web app that does editing really well)
Confluence is just awfully slow to load. Every little thing takes forever. Dropbox Paper feels like someone’s weekend project. It is so subpar and things seem to have bolted on without much thought. There’s still a lot to figure out when making a good intuitive knowledge base.
When sharing to colleagues you get to choose if you allow them to edit/comment/view. That, to be honest, is the first thing I check when I share docs (be it Google Docs, Quip or Notion). I won't rely on the defaults of the software because it's too costly to not get it right.
Second, you don't have to lock the document. As long as you disallow editing, you as the owner of the document still can edit the document. Am I missing something?
Third, notifications shoot as soon as you enter colleague names. I get this might be annoying at first. But don't many great UX stuff need some kind of getting-used-to? When switching from Windows to OSX, I was shocked that you get to rename a folder when you hit ENTER, rather than open it. Guess what? I got used to it. I have my alternative to opening a folder and it's not slower. In this notification case I'd then just see entering the colleague names as the last step. Problem solved.
All the first three bullet points are not inherent bad UX issues "built into the DNA" as claimed by OP. Notion is great. It's more powerful Google Docs and easy to use in general. The article is written in a way as if the author has not had any positive experiences from using Notion. That's unfortunate.
> First thing you learn when getting used to Notion is that every page you share should be locked from editing!
> The next problem with edit lock is that you can't unlock the page just for you. So you are a good user of Notion and keep all pages locked from editing. But every time you want to modify a page, you unlock it and everyone can (unintentionally) modify it while you're editing.
> Adding or editing content isn't the only case when you need your page to be unlocked. It is impossible to add comments on locked page.
These quotes are all wrong. You don't lock your document. When you share a doc, configure the access rights (edit/comment/view only, similar to what you do when sharing a Google doc).
SPA apps made by English speaker tend to have broken input field (Even twitter's tweet field) but Notion isn't even though it has complex features.
There's a lot of overlap on what some companies might use each for, I use both for different things at work. I've found that Notion's strengths for us are when we have a collection of documents that all need to follow roughly the same structure, and we can build a mini database for them - things like blog post drafts for the company blog, RFCs, incident post-mortems, etc. On Google Drive this would be a folder of docs and a template maybe? Not searchable/sortable in the same way. Or it might be a spreadsheet with links in? But that might not be great.
I could also imagine it working well for task management in small companies/teams. I don't think Drive has a good equivalent for this.
Some of the things people are saying here that they can’t stand about Notion are some of the things that I like the most about it, and some of the improvements people are suggesting here are things that would make me abandon Notion if they changed it to be in line with what they suggest, and I think a lot of that is from difference in expected use case (I use it as a personal knowledge base)
It is definitely a weakness of their product.
So? That's probably used by less than 5% of people anyway. Seeing regular users most would just use the mouse...
You assume here that they've actively worked to change default behavior, but it is probably a zero-work-required by product of the widget they used (that gives them other capabilities thet do want) and to (a) revert to plain HTML textareas would remove this, (b) to add the default behavior to their widget would take extra effort.
(clearly Notion is too cool for people like us to use...)