@@Entropy67 I’m working solo on my projects, and I prefer it that way. I don’t want to panic over finding a co-founder-I just want to focus on building and executing my idea
@@Entropy67, that's great about you, but please leave them be, they're there to pay bills and probably burnt out already, no need to add them additional stress just build your own company and projects on the side
While nobody can dispute his skills, the lack of "bloat" recently caused an 11 hour outage due to OVH being OVH (trash). There's a reason why most companies do not deploy their crap on OVH, and there's a reason why "bloated tech stacks" like Kubernetes exist. Proper cloud architecture would have reduces or nullified that 11 hour outage.
@@tom-delalande you can see how he works live on twitch. He streams from time to time ( his channel name is "ornicar2"). He does indeed use NixOs, I have asked him in one of his streams.
@@NigerianWeeban yes, another person pointing out the obvious “it depends”. If everything you could possibly say about programming is super situational, then what do we gain from you pointing it out? We already know brother.
This is a prime example of how incomprehensible a gap between a productive developer and an average middle/senior developer is. Many sites are much simpler than Lichess and they still need dozens of developers to survive, not talking about other personnel. Deployment part is especially impressive, considering all aggressive kubernetes propaganda that you somehow need a cluster for each and every app, even if it has no more 10000 average users per month in a hope that someday it will gain millions of users. This OG just uses one bare metal server that manages 5kk games per day. It reminds me of Telegram that while being one of the most popular social networks in the world is maintained by 30 engineers and one PM that is Pavel Durov himself. But Lichess example is even more extreme. We live in a world of lies, of lies and incompetence. But on the bright side it's still impressive.
organizations usually downgrade to a lowest common denominator of competency once big enough to have a decent amount of politics. No wonder DHH keeps his company small
Dude, a 2D chess game is not a massively complicated application. This is the problem I have with developers. They find some niche application, see it was developed by one person, and then compare it to all other, completely unrelated applications that require accuracy on many levels to align with not only scalability, but business logic, and revenue generation. And just because somebody makes contributions, doesnt mean he's sitting there "writing all the code". You can set merge requests to make you as the contributor of the merge commit. 5 million users is nothing compared to even your standard news site that gets 10's of millions of hits per day. And I'm not trying to dock this man, he's obviously really skilled, but I think people just get lost in the idealization of it all.
I have been working in a Scala codebase now for 6 months. I can see where Kotlin gets many of its traits from. This codebase was written by inexperienced devs, the code is a nightmare to work with. Projects with good languages can be brought to its knees by junior devs.
Currently working in a large Python codebase and never before have I considered quiting programming as many times as I have now. I think it was mainly juniors and overengineering "seniors" that made it terrible (plus Python's horrendous type system). Makes me miss Scala 😢
@@DisFunctor , lol, we are actually migrating this code base to Python. I worked over the weekend just to get the initial architecture down to ensure that we don't follow the same path.
As someone who's just learning how to program can you masters tell me what it means to have a bad codebase or what does bad programming look like? What are things that I should learn to not end up being hated by one of you experienced programmers. Please take the time and reply as I really would like to know the foundations.
@@NightXof Unfortunately, that's not something you can learn from a youtube comment :) Just you writing code unsupervised as a junior developer will lead to bad code. You just need to write a lot of code and get it reviewed by competent people. Learn about patterns, best practices and structure before you stop writing shit code. Just keep doing it, and don't worry about it for now, it's literally unexplainable to you at the moment because you don't have the experience and you don't know what it looks like.
A super interesting, in-depth discussion of this open source project, the most inspiring programming related video I have seen recently! I am not a chess player, so I was not too aware of lichess, but now I am very impressed. It is always nice to see what a focus on simplicity and quality and the absence of managers and investors can bring about. Lichess is a project that really deserves financial support.
I feel like I learned something technical while watching someone finally tributing LiChess for what it is, both technically and ethically. Thanks for your video.
Thanks. Never knew lichess was open source too being managed by one person. This is a focused and passionate achievement we all should be acknowledging
Honestly, this guy, one man army, deserves a lot more salary. Obviously, money isn't leading driver for him, but I hope he'll still gonna get a lot more, he truly deserves it. What a guy!
@@georgerogers1166 nah, it would ruin everything. Maybe some ads? The most non-intrusive and less obnoxious and yet very respectable. I guess it could change the game, really.
@@simpleman7203I might be broke, but I still donate 1 euro a month. It grants me a cool badge, makes me feel good about supporting the project ^^ 1 euro might not be much, but it's already way more than they'd make from me seeing ads. For another perspective: I'm covering the costs for other users ^^
love this video, shows large scale real-world application architecture done by one person at scale is not only possible but enjoyable, a man after my own heart
PostgreSQL can be used as a document-store with its excellent json/bson storage an query capabilities and it features a rich and extensible type system which helps modeling the problem domain and keep it consistent. You can also use languages like js, Python etc. Inside the db (but I find this not so useful) and it's pub/sub capabilities can enable realtime apps without need for constant polling. With Patroni replication and HA is easy. So postgres would be a very good choice in the long term.
Better watch out for the creeping Eveything table with a UUID PK "id" and a single jsonb column "value". I've seen a lot of javascript-oriented json data get dumped into Postgres this way. It's not a good time, especially when collections contain arrays of random elements that must be searched (of course this inevitably happens on the frontend, and becomes a gigantic source of tech debt). It's better to store data in a way that lends itself to *almost* server side rendering, making the frontend's job as simple as possible. Displaying data with a good UX is hard enough as is.
@@yurisich This is a datastore agnostic problem and will be the same with every other datastore. A single Mongodb collection, one big jsonl file. Or unnormalized data inside an relational db... Often a combination of approaches and careful data modeling is key to long term success. I used it for web-scraping and data extraction where I can dump results from the scrappers as json into specific tables and then query the data from sql and build materialized views from this data for easy and performant queries. Also I found it quite pleasant to use as an event store for event-sourcing.
@@vincent_sz " event store for event-sourcing." "pub/sub capabilities can enable realtime apps without need for constant polling" never heard of these 2 points regarding DB could you elaborate on these?
@@b-u-n Only because something is build for sth. doent mean it is the only solution. I do not see much difference in using either to store json documents. Tech is only as good as its (ab-)user. If 80% of my use-cases are perfect fit for relational and the other 20% are easier with an document store, then it is stupid to add another complex gear to my stack. This would be is growing tech debt and add long term operational cost. Also one the greatest tech debts I had to deal with were mongodb databases. E.g. Unifi Controller was/is using mongodb for a long time and this was a huge fail (it didnt even fit their usecase). I dont know how they managed, but they never were compatible with newer mongodb versions. Now they are migrating to postgresql. I agree with you that using postgreql exclusively as an document store when an specialized document store would be more suitable is questionable. But I found this is a very rare case. The best solution is to use the repository pattern and make the data stores interchangeable
Scala is not the most important factor here. He could have same results in any modern typed language. It's much more about what was said at the end. Don't accumulate technical depth, remove instead of add, chose a right tech and change it when something else does the job better. In terms of languages. He could have similar productivity in go, dart, c#, rust and bunch more. Scala is only one option.
Programming languages in general, are just tools, like hammers, you don't blame the hammer if you're not productive, don't you? :P over my experience, I figured that they don't really matter that much, it's almost all the same, just different syntax and better for various use cases, so basically like specialized tools, but only tools
As shown in the video (not sure if mentioned), the analysis is done on a distributed network of people offering up their CPU % in something called fishnet. It was cool to feel like a part of lichess when doing this myself, and it's also really nice to be able to see source code!
Why would this be running on 1 core? This is 60 concurrent games per second. Computers are insanely fast. If you play Fortnite with 100 players then your computer is doing a 100000 more stuff in a second than this server. Chess game = 8x8 2D grid. Fortnite = a huge 3D world with dudes jumping around, bullets, audio, lots of network stuff, physics, etc
@@KikkerFish True, if you ever write a chess engine as a project you'll see you can fit entire chess moves into just 2 bytes (maybe even less for this since you don't need some of the details). The headers probably take up more space haha.
It's powered by Play, an MVC framework, which is implemented with Akka an actor system framework (think BEAM as in Erlang or Elixir), and the compiled to graavm. And this is before green threads in Java 23. So I would say the tech stack is what is cracked, but of course to get it to that performance you have to do a lot of fine tuning, and the architecture, and lot of additional factors that make him super cracked. No, it's not singlecore, his server's tech specs are somewhere in the repo if you're interested.
Great video as always! When I was in university, we had a class called Comparative Languages and we studied Scala as a way to learn functional programming.
Awesome, I'm currently taking a similar class. Most of the program is Java, but in this class we're learning C and Erlang, as well as touching on some python near the end (which much of the class has prior experience with)
As far as I know, the chessboard implementation on Lichess is not built using Snabbdom. Instead, it is written using TypeScript along with SASS for styling. The allowed moves for each piece are communicated through a “dest” object, which is transmitted via WebSocket connections. This process is triggered by an event called “move”
not single-core as in dual-core or quad-core. Instead what he meant was the number of core developers is single(one)./whoosh, kiddin, I have the goal of becoming a dual-core dev myself.
beautiful video man , you should keep doing this longform thing , this goes on to show that how simple software engineering still is , and we ourselves make it complicated by using every other fad in existence
For me, the vast majority of time-sinks comes from taking on and being stuck with popular dependencies when they run into edge-cases against other dependencies. There's also a lot of considerations that everyone has to spend time and effort adhering to in order to work together as a team. Combine that with all the random scope creep and back and forth between stakeholders and PMs breathing down your neck for the same update you've given them 3 times on the most trivial of details you end up with a messy app that takes forever to build.
Really great narration and editing style. I'll definitely be subscribing Everything else about the video too, very calm and clear. There's nothing distracting from the content of the video so all of our mental energy is used to understand this content, there is no need to skip back, even when one is tired. Really great video! =]
I feel quite alone in the unbalanced spectrum of developers in the internet where one side refuses to use anything they did not invent, and the other side thinks tools and the debt that comes from using tech aimed for companies serving billions of users are suitable for their little side project. You are the only content creator I know that strikes the perfect balance, engineer mindset that strives to serve the needs of a problem in a rational way. Great video as always!
Such a good video! I have been a fan of Lichess due to its open source philosophy, but this case study has only made me appreciate even more the success that it has achieved. Thank you for doing this research and for sharing some of Thibault's wisdom with regards to development and coding!
Haskell being a whitepaper language is true (it was 100% just for research when it was created), but it's also gotten more and more practical with useful extensions to the language and better developer tools over the years.
Wonderful summary!!! Thanks for covering the smaller but more important projects ran by passionate people. ❤ Lichess is amazing and Thibault is a beast!!
Very interesting video. I like the dev's posts and ideology, especially about lines of code as a weight added to a plane. This video is a good source of advices for developing projects in a very small team (if not by yourself). The only thing, I watched the video on 2x cuz it was kind of slow. But in general, great video, thanks for making it!
He looks like a great man, his mindset and the way the manages lichess is amazing and he is undoubtedly a better software developer than me, but, yet, I doubt that prioritizing tech debt over everything would work so well for all developers. He is a single guy working on a single big project, his worst nightmare is having to deal with bugs on all the modules of his project at the same time. The worst nightmare of a single man working for a big company is delivering several consecutive demands delayed, so, obviously, he is much more prone to do things in a more scalable way, even paying in the short-term by deploying new features later than a common programmer on a company demanding features faster. The skill he has that truly mesmerizes me, is his ability to analyse what he needs and efficiently apply a tool that he thinks that solves his problems, and most importantly, recognise in retrospect whether it really solves the problem and let it or creates more problems and change it for another. That's the heart of modern software development and the message the writers of the Manifesto for Agile Software Development tried to pass.
Been working as a developer for around 8 years but got so tired of the toxic environment it had become so swapped to something else entirely... Seeing someone this down to earth really puts a smile on my face. I wish this was the norm...
Back when I made videogame mods I was more productive in 1 day that I am in an average maybe 3 months at my current corporate job. It has been mind blowing ever since I got this job (my first 'real' job) at how little work is actually done. I may be young and naive but I've seen both sides of the dev productivity spectrum and i feel like most devs don't even know how productive they could actually be.
@@mskiptr Oh for sure, we don't touch JS at my job unless absolutely necessary, but still, nowhere near "strong" when you can do "as unknown as any" and break every typing
I fully expected it to be Elixir/Erland, but Scala + Akka is almost the same :) I also expected something like Elm for frontend - obvious choice for functional folks. great video, great codebase, bravo all around!
Every person you introduce adds a set of opinions, motivations, and an interface boundary. People want to be promoted and in order to be promoted you need to “own” something. The more you break things up for people to own the more complicated each piece must become to justify itself. Scale this over a handful of teams and add executives, marketing, and HR and there you go - you’ve got yourself a proper rat’s nest. Granted it’s a rat’s nest that feeds and clothes a couple hundred people, but it’s definitely not efficient or glamorous.
Using scala for static typing then deciding to go with mongodb that doesn't enforce any data consistency, comes with licensing issues and doesn't really scale that well, really smart choice. This really shows there was no strong reasoining behind the tech choice and more a choice of tools that are most familiar to the developer, which by itself is not a bad thing but at the same time doesn't give a lot of the value for previous arguments.
I'm not even programmer but this video goes hard. Although I'm not to aware about lingo here. Can say that giving a goog really helped me, maybe some of you may help my curiosity? Strongly typed means that it has more strict rules? . So you probably will be notified about a lot more errors in your coding, ''typing'' when you compile, but as the result your end product would be less buggy? As oppose to weak typed. when it may be compiled the way you want, but there would be some weird bugs and code might be unreadable?
In programming types refer to data types. Simple ones are integers(numbers), booleans( 0 or 1 / false or true), and characters (letters/numbers/symbols). Some programming languages have what is called type safety, meaning when programming types need to be explicitly declared. If I want to use a number for math I need to declare an integer and use the operators that integer supports to modify the value. If I declare a character and populate it with a number such as 1, it will not be treated as a number and cannot be modified using math operations. There are more loosely typed languages like python that allow users to quickly move data around and reformat it but the downside as you said is introducing potential bugs in the code. If you do not explicitly know your data type you can attempt an operation on it that is impossible in the context of your code which can crash the program if not handled correctly. Without type safety you also enable more unexpected behaviors and introduce more difficultly into sanitizing user input. Both are useful but generally type safety holds programmers to a better standard which is important on large long term projects. Hope you find some of this information useful. If you are not a programmer but want to learn I recommend python because it is extremely low barrier to entry in terms of learning syntax and being applicable to many problem sets with a large community to support your learning/development.
@@alexleonard5601 man, thanks for taking time explaining this stuff. I tip toe around programming for a whole decade probably, it isn't my thing, Can't imaging myself this locked in in front of code, especially now requirements are high and competition is cut throat. But maybe I will learn some python just for my own sake, it wouldn't hurt I guess :)
@@simpleman7203 programming is a black box of terminology and best practices that seems daunting from the outside looking in but it’s really formulaic once you’ve done it enough. I definitely recommend python for making quick fun programs. These days I also highly recommend you use AI tools like chatgpt or copilot to make sense of what you don’t understand. A good exercise would be to ask chat gpt to make a simple console game, and then take it piece by piece and ask how each component is made and why. You can also do this process with open source projects on the internet to get a better understanding for things like automation that can help you in life. Good luck on your journey and just have fun with it! As with anything new don’t expect to be good or know it all, just show up with a willingness to learn and a curious mind you will go far with it.
@@simpleman7203knowing at least a scripting language can be super useful in terms of productivity - you can automate a lot of simple but tedious tasks, make calculators and other small programs for yourself! Python is great for beginners - if you want to go deeper there are much more in-depth languages (I personally love C, but part of that is a lot of experience with both the language and terminals)
This video is perfect to demonstrate that having the vision of a "technology architect" is important in a programming project. That's a message I'm trying to get through in some workplace. In a "normal" work environment, it can be easy to be swarmed in projects, getting pressured for feature-bloat, and only playing technology-catchup when hitting a wall. I have a feeling we need this cultural shift, but l’m having a hard time to articulate that or demonstrate that. Do you know of any other video that illustrate this ? Or is this lichess "tech vision" case a rare exception that can never be replicated in a work environment or in a team environment ? Please give me some links if you know of any other similar case :)
I did a little bit of Scala way back. Now I do a lot of work in Typescript. I struggle to come up with anything that I really miss from Scala that Typescript doesn't give me. Oh, right. Pattern matching. That's a killer feature I would like everywhere.
Quite interesting, I realized this a long time ago, most devs do not care about their jobs and that makes them incredibly inefficient, once the whole company is like that is something really hard to scape... But the thing is that almost always you get to work on something you just don't care.
Jane Street has a video on how to do safe failover in a Central Limit Order Book which is kind of a monolith. Or at least how it worked years ago. They used UDP for networking.
Sure! In Chess you can lose by running out of time or getting check mated. The shortest time control, which is called bullet chess, is 1+0. This means that you have 1 minute to make all your moves, and you get 0 additional seconds per move. Chess games are commonly 30-60 moves per player, so on average you will have 1 to 2 seconds per move. If I make a move in 2 seconds, but I have 500ms lag (because the server is in France and I'm in Australia), the server will receive that move after 2.5s, but by tracking my ping the server can give me back that extra time I lost while sending the message. This is what I mean by lag compensation. You can also pre-move, which is to say which move you will do next before the opponent has even finished their turn. If you do this the server will take none of your time, for example Chess.com will still take the time it took for your move to reach the server into account. So you can lose on time even when pre-moving. Optimistic client rendering just means that you update the piece's position on the client immediately, even before the server has received the request. If the server disagrees with the move it will be rectified on the client after.
A programmer who actually gives a sh*t is an order of magnitude more productive than one who doesn't.
money is a powerful motivator
@@Entropy67
I’m working solo on my projects, and I prefer it that way. I don’t want to panic over finding a co-founder-I just want to focus on building and executing my idea
Or not… it depends on the developer and the project right?
@@Entropy67, that's great about you, but please leave them be, they're there to pay bills and probably burnt out already, no need to add them additional stress
just build your own company and projects on the side
"more productive" may equal "codes slower" though, and therein lies the rub
No meetings, no jira tickets no PO, PM & SM breathing down your neck. Sounds like a very productive environment to me 😅.
No daily standup that turns into a one hour meeting.
Yeah, imagine not having 4 managers to manage you, how productive you can be.
But there's also like 2 people in the world that have done something of this magnitude solo
@@Sameer.Trivedi Potato Overlord, Potato Minister, and Super Mascot!
Who is the second one? @@nexovec
My respect for Lichess just skyrocketed after watching this. I've always loved Lichess, but never knew it had one core devoloper.
Yeah, the founder maintains the platform himself. He's French, and doesn't even pay himself that much, only around 60k euros a year.
Your typical 138x engineer, every company needs one
The 138x engineer will need to be sole owner of the company 😅
138... the max level in Runescape wasn't it?
The company will slow him down.
@@AdamSchelenbergCom Yes, money does things to people.
Chad open source mantainer vs virgin(s) corporate programmers
Id love there to be a series on this. Finding projects that outpace competition bc of tech stack & caring devs vs bloated companies & tech stacks.
Yup, ACTUALLY giving a shit DO make a huge difference
While nobody can dispute his skills, the lack of "bloat" recently caused an 11 hour outage due to OVH being OVH (trash).
There's a reason why most companies do not deploy their crap on OVH, and there's a reason why "bloated tech stacks" like Kubernetes exist.
Proper cloud architecture would have reduces or nullified that 11 hour outage.
Saw he uses NixOS in his streams. Knew he was absolutely cracked immediately.
I didn't know he uses NixOS, I love that. I couldn't find any VODs but I'd love to see how he works
@@tom-delalande You can follow him on twitch ornicar2, you can really see what peak productivity looks like, its humbling
Nix mentioned. Lets fucking goooooo
@@tom-delalande you can see how he works live on twitch. He streams from time to time ( his channel name is "ornicar2"). He does indeed use NixOs, I have asked him in one of his streams.
Nix has a lot of politics going on internally. They recently forced out the founders. Expect it to become terrible in short order.
A good developer writes code. A great developer removes code.
An overpaid developer prevents code from being written
@@b-u-n depends, some code should not be written or drastically reduced.
Ah yes, another quote about programming, that is like every other one - super situational.
@@NigerianWeeban yes, another person pointing out the obvious “it depends”.
If everything you could possibly say about programming is super situational, then what do we gain from you pointing it out? We already know brother.
@@saent_bass I was being sarcastic. But please, by all means, go on.
This is a prime example of how incomprehensible a gap between a productive developer and an average middle/senior developer is. Many sites are much simpler than Lichess and they still need dozens of developers to survive, not talking about other personnel. Deployment part is especially impressive, considering all aggressive kubernetes propaganda that you somehow need a cluster for each and every app, even if it has no more 10000 average users per month in a hope that someday it will gain millions of users. This OG just uses one bare metal server that manages 5kk games per day. It reminds me of Telegram that while being one of the most popular social networks in the world is maintained by 30 engineers and one PM that is Pavel Durov himself. But Lichess example is even more extreme. We live in a world of lies, of lies and incompetence. But on the bright side it's still impressive.
organizations usually downgrade to a lowest common denominator of competency once big enough to have a decent amount of politics.
No wonder DHH keeps his company small
Why lies? yeah i'm one of the incompetent developers out there, what should I do, go work in construction to not be a liar?
Ideally people go where they're most productive. You should be in construction if that's your best. @@mzg147
Dude, a 2D chess game is not a massively complicated application. This is the problem I have with developers. They find some niche application, see it was developed by one person, and then compare it to all other, completely unrelated applications that require accuracy on many levels to align with not only scalability, but business logic, and revenue generation. And just because somebody makes contributions, doesnt mean he's sitting there "writing all the code". You can set merge requests to make you as the contributor of the merge commit.
5 million users is nothing compared to even your standard news site that gets 10's of millions of hits per day.
And I'm not trying to dock this man, he's obviously really skilled, but I think people just get lost in the idealization of it all.
@@jshowao It applies to things like Telegram and Twitter/X as well. Most tech companies are bloated.
I have been working in a Scala codebase now for 6 months. I can see where Kotlin gets many of its traits from. This codebase was written by inexperienced devs, the code is a nightmare to work with. Projects with good languages can be brought to its knees by junior devs.
Currently working in a large Python codebase and never before have I considered quiting programming as many times as I have now. I think it was mainly juniors and overengineering "seniors" that made it terrible (plus Python's horrendous type system). Makes me miss Scala 😢
@@DisFunctor , lol, we are actually migrating this code base to Python. I worked over the weekend just to get the initial architecture down to ensure that we don't follow the same path.
As someone who's just learning how to program can you masters tell me what it means to have a bad codebase or what does bad programming look like? What are things that I should learn to not end up being hated by one of you experienced programmers. Please take the time and reply as I really would like to know the foundations.
@@NightXofsame here, would be interested to hear
@@NightXof Unfortunately, that's not something you can learn from a youtube comment :)
Just you writing code unsupervised as a junior developer will lead to bad code. You just need to write a lot of code and get it reviewed by competent people. Learn about patterns, best practices and structure before you stop writing shit code.
Just keep doing it, and don't worry about it for now, it's literally unexplainable to you at the moment because you don't have the experience and you don't know what it looks like.
A super interesting, in-depth discussion of this open source project, the most inspiring programming related video I have seen recently! I am not a chess player, so I was not too aware of lichess, but now I am very impressed. It is always nice to see what a focus on simplicity and quality and the absence of managers and investors can bring about. Lichess is a project that really deserves financial support.
Totally agree, it's such an inspiring project.
I feel like I learned something technical while watching someone finally tributing LiChess for what it is, both technically and ethically. Thanks for your video.
Thanks. Never knew lichess was open source too being managed by one person. This is a focused and passionate achievement we all should be acknowledging
Honestly, this guy, one man army, deserves a lot more salary. Obviously, money isn't leading driver for him, but I hope he'll still gonna get a lot more, he truly deserves it. What a guy!
Could charge a bit for certain features.
@@georgerogers1166 nah, it would ruin everything. Maybe some ads? The most non-intrusive and less obnoxious and yet very respectable. I guess it could change the game, really.
@@simpleman7203 The whole point of lichess is being ad-free while offering all the features for free. It was founded on that basis.
@@simpleman7203I might be broke, but I still donate 1 euro a month. It grants me a cool badge, makes me feel good about supporting the project ^^
1 euro might not be much, but it's already way more than they'd make from me seeing ads. For another perspective: I'm covering the costs for other users ^^
As a flutter developer and a chess player, I feel ashamed that I haven't contributed to this amazing project yet!
Time to change that then 😉
This is an impressive case study, super insightful!
Thank you for this video, it is great to see the mindset of such a high level programmer like Thibaut !
So the 100x programmer is not a myth after all, eh? 🙂
There is such a thing as a 0.01x organization
Dunno about 100x but I know 10-20x is perfectly feasible
@@0011101001101 lmao
Wizards exist.
@@FredoCorleone
700 employees vs 1 developer
look more than x100 to me
love this video, shows large scale real-world application architecture done by one person at scale is not only possible but enjoyable, a man after my own heart
the mongodb web scale reference got me
great video! subscribed
Great video. It shows how one man can outperform a whole corporation by just focusing on the product and doing the right things.
PostgreSQL can be used as a document-store with its excellent json/bson storage an query capabilities and it features a rich and extensible type system which helps modeling the problem domain and keep it consistent. You can also use languages like js, Python etc. Inside the db (but I find this not so useful) and it's pub/sub capabilities can enable realtime apps without need for constant polling. With Patroni replication and HA is easy. So postgres would be a very good choice in the long term.
Better watch out for the creeping Eveything table with a UUID PK "id" and a single jsonb column "value". I've seen a lot of javascript-oriented json data get dumped into Postgres this way. It's not a good time, especially when collections contain arrays of random elements that must be searched (of course this inevitably happens on the frontend, and becomes a gigantic source of tech debt). It's better to store data in a way that lends itself to *almost* server side rendering, making the frontend's job as simple as possible. Displaying data with a good UX is hard enough as is.
@@yurisich This is a datastore agnostic problem and will be the same with every other datastore. A single Mongodb collection, one big jsonl file. Or unnormalized data inside an relational db... Often a combination of approaches and careful data modeling is key to long term success. I used it for web-scraping and data extraction where I can dump results from the scrappers as json into specific tables and then query the data from sql and build materialized views from this data for easy and performant queries. Also I found it quite pleasant to use as an event store for event-sourcing.
@@vincent_sz " event store for event-sourcing." "pub/sub capabilities can enable realtime apps without need for constant polling"
never heard of these 2 points regarding DB could you elaborate on these?
Uh no, mongo was made for that. Please don't do this with SQL; you are creating tech debt that requires a data engineering team to deal with.
@@b-u-n Only because something is build for sth. doent mean it is the only solution. I do not see much difference in using either to store json documents. Tech is only as good as its (ab-)user. If 80% of my use-cases are perfect fit for relational and the other 20% are easier with an document store, then it is stupid to add another complex gear to my stack. This would be is growing tech debt and add long term operational cost. Also one the greatest tech debts I had to deal with were mongodb databases. E.g. Unifi Controller was/is using mongodb for a long time and this was a huge fail (it didnt even fit their usecase). I dont know how they managed, but they never were compatible with newer mongodb versions. Now they are migrating to postgresql. I agree with you that using postgreql exclusively as an document store when an specialized document store would be more suitable is questionable. But I found this is a very rare case. The best solution is to use the repository pattern and make the data stores interchangeable
Scala is not the most important factor here. He could have same results in any modern typed language. It's much more about what was said at the end. Don't accumulate technical depth, remove instead of add, chose a right tech and change it when something else does the job better.
In terms of languages. He could have similar productivity in go, dart, c#, rust and bunch more. Scala is only one option.
Programming languages in general, are just tools, like hammers, you don't blame the hammer if you're not productive, don't you? :P
over my experience, I figured that they don't really matter that much, it's almost all the same, just different syntax and better for various use cases, so basically like specialized tools, but only tools
@@dszmaj And it seems that in last few years languages started converging together and becoming more and more similar.
dart is becoming an awesome backend language. just rarely used because its associated with flutter. glad to see it mentioned here
Technically, you can write maintainable code in Java... but have you seen such once?
If you're a solo dev, at the end of the day the programming language that is best is the one you know the best
As shown in the video (not sure if mentioned), the analysis is done on a distributed network of people offering up their CPU % in something called fishnet. It was cool to feel like a part of lichess when doing this myself, and it's also really nice to be able to see source code!
5.2 million chess games on a single core? That single-core developer must be cracked.
Why would this be running on 1 core?
This is 60 concurrent games per second.
Computers are insanely fast. If you play Fortnite with 100 players then your computer is doing a 100000 more stuff in a second than this server.
Chess game = 8x8 2D grid.
Fortnite = a huge 3D world with dudes jumping around, bullets, audio, lots of network stuff, physics, etc
Why only one core?
@@KikkerFish True, if you ever write a chess engine as a project you'll see you can fit entire chess moves into just 2 bytes (maybe even less for this since you don't need some of the details). The headers probably take up more space haha.
It's powered by Play, an MVC framework, which is implemented with Akka an actor system framework (think BEAM as in Erlang or Elixir), and the compiled to graavm. And this is before green threads in Java 23. So I would say the tech stack is what is cracked, but of course to get it to that performance you have to do a lot of fine tuning, and the architecture, and lot of additional factors that make him super cracked. No, it's not singlecore, his server's tech specs are somewhere in the repo if you're interested.
Lichess is like one of those bright stars from the open source communities, its really outstanding!
Great video! I enjoyed your detailed narration.
I love the "javascript is dangerous" 😂
Preach the word 🗣️🗣️🗣️
Great video as always! When I was in university, we had a class called Comparative Languages and we studied Scala as a way to learn functional programming.
That's fantastic. My university was essentially OOP from front to back. I wish I'd discovered Scala earlier
Awesome, I'm currently taking a similar class. Most of the program is Java, but in this class we're learning C and Erlang, as well as touching on some python near the end (which much of the class has prior experience with)
Do more videos like this one. It's so interesting, inspiring, and useful to hear such stories
This was super interesting for me too. There's so many talented people and projects out there, I'd love to dig deep into more of them
Thanks so much for these videos. They are a joy to watch :)
As far as I know, the chessboard implementation on Lichess is not built using Snabbdom. Instead, it is written using TypeScript along with SASS for styling. The allowed moves for each piece are communicated through a “dest” object, which is transmitted via WebSocket connections. This process is triggered by an event called “move”
That was an awesome mind expanding video. Thank you so much
0:10 A single-core developer ? aren't all developers single core ? I mean, they only have 1 core or head. I'm kidding.
I know some people have 3 cores. They can iterate on 3 unrelated lines of thought at once.
Ha...
not single-core as in dual-core or quad-core. Instead what he meant was the number of core developers is single(one)./whoosh, kiddin, I have the goal of becoming a dual-core dev myself.
Single core-developer
@@azeezahm2242 I can do 2 or 3, sometimes it hurts more than it helps as I get old and my short term memory gets funny.
I just realized how much more youtube algo understands me than myself 😮
It's scary that it's also true for me
@@shateqyea i was stressing th other say why till now java doesn't have unions and mixins/traits
The algo is based on your YT history, so you yourself have led yourself to this video 😊
The analysis is so insightful and amazing that it earned you a subscriber. And I got someone to look up to now. Thanks a lot!
beautiful video man , you should keep doing this longform thing , this goes on to show that how simple software engineering still is , and we ourselves make it complicated by using every other fad in existence
For me, the vast majority of time-sinks comes from taking on and being stuck with popular dependencies when they run into edge-cases against other dependencies. There's also a lot of considerations that everyone has to spend time and effort adhering to in order to work together as a team. Combine that with all the random scope creep and back and forth between stakeholders and PMs breathing down your neck for the same update you've given them 3 times on the most trivial of details you end up with a messy app that takes forever to build.
Earned a subscriber, really enjoyed the video!
This is one of the best programming videos I've seen.
Thanks for a great showcase of lichess. Thibault's software approach resonates with me and is a breath of fresh air.
I couldn't agree more. Guy is a humble genius, I can only wish to be more like him
this was a great video! i’d love to see more case studies like this
Really love the metaphysical note you gave about there is more to SW than just FANG, very nice video!
nothing is more satisfying than working on a project and doing big refactors that make things more maintainable
Really great narration and editing style. I'll definitely be subscribing
Everything else about the video too, very calm and clear. There's nothing distracting from the content of the video so all of our mental energy is used to understand this content, there is no need to skip back, even when one is tired.
Really great video! =]
I feel quite alone in the unbalanced spectrum of developers in the internet where one side refuses to use anything they did not invent, and the other side thinks tools and the debt that comes from using tech aimed for companies serving billions of users are suitable for their little side project. You are the only content creator I know that strikes the perfect balance, engineer mindset that strives to serve the needs of a problem in a rational way. Great video as always!
I’m with you 👍
Such a good video! I have been a fan of Lichess due to its open source philosophy, but this case study has only made me appreciate even more the success that it has achieved. Thank you for doing this research and for sharing some of Thibault's wisdom with regards to development and coding!
If he had chosen haskell for lichess, the primeagen could not longer claim that haskell is just a white paper language :D Missed opportunities...
If he had chosen Haskell, we would probably never see Lichess.
Pandoc is written in Haskell.
postgrest is written in haskell too. tsoding has stream tools written in haskell
Also ShellCheck and Github's "semantic" tool.
Haskell being a whitepaper language is true (it was 100% just for research when it was created), but it's also gotten more and more practical with useful extensions to the language and better developer tools over the years.
Excellent analysis. Thank you
Great video, really nice how you analyzed all the tech stack and the philosophy behind the website
So much value, thank you.
3:22 see the problem ? only 2 people, you don't need ANY managers
Story telling and explanation of technologies in video was quite intriguing, thanks a lot for such a useful content
Absolute gem of a video!
Wonderful summary!!! Thanks for covering the smaller but more important projects ran by passionate people. ❤ Lichess is amazing and Thibault is a beast!!
As a developer myself I just want to say: What a chad developer :D
I indeed like the UI of lichess. It's minimalist, clean and display the required info. no BS
Thank you for making this video. I'm glad theres such a good video explaining the work behind the titan that is lichess
a very elegant architecture scala + Rust so gooooodd.....
OVH? A man of culture if you ask me.
And even the experience feels better on Lichess, crazy work from Thibault
Very interesting video. I like the dev's posts and ideology, especially about lines of code as a weight added to a plane. This video is a good source of advices for developing projects in a very small team (if not by yourself). The only thing, I watched the video on 2x cuz it was kind of slow. But in general, great video, thanks for making it!
So this guy has my exact mindset then. No wonder why he can do so well with so little. Respect.
He looks like a great man, his mindset and the way the manages lichess is amazing and he is undoubtedly a better software developer than me, but, yet, I doubt that prioritizing tech debt over everything would work so well for all developers.
He is a single guy working on a single big project, his worst nightmare is having to deal with bugs on all the modules of his project at the same time. The worst nightmare of a single man working for a big company is delivering several consecutive demands delayed, so, obviously, he is much more prone to do things in a more scalable way, even paying in the short-term by deploying new features later than a common programmer on a company demanding features faster.
The skill he has that truly mesmerizes me, is his ability to analyse what he needs and efficiently apply a tool that he thinks that solves his problems, and most importantly, recognise in retrospect whether it really solves the problem and let it or creates more problems and change it for another. That's the heart of modern software development and the message the writers of the Manifesto for Agile Software Development tried to pass.
Been working as a developer for around 8 years but got so tired of the toxic environment it had become so swapped to something else entirely...
Seeing someone this down to earth really puts a smile on my face.
I wish this was the norm...
Great video! I may be in the minority, but I really love how simple the lichess UI is. No fluff, painless ux
Temple OS Mentioned
Back when I made videogame mods I was more productive in 1 day that I am in an average maybe 3 months at my current corporate job. It has been mind blowing ever since I got this job (my first 'real' job) at how little work is actually done. I may be young and naive but I've seen both sides of the dev productivity spectrum and i feel like most devs don't even know how productive they could actually be.
Amazing video, great job!
Thank you!
9:23 TypeScript does not provide a strong type system at all. It's as fragile as it comes (compile time only, and easily overrideable)
still better than JS I guess
@@mskiptr Oh for sure, we don't touch JS at my job unless absolutely necessary, but still, nowhere near "strong" when you can do "as unknown as any" and break every typing
bro vocal fry's in every sentence
I fully expected it to be Elixir/Erland, but Scala + Akka is almost the same :) I also expected something like Elm for frontend - obvious choice for functional folks. great video, great codebase, bravo all around!
Every person you introduce adds a set of opinions, motivations, and an interface boundary.
People want to be promoted and in order to be promoted you need to “own” something. The more you break things up for people to own the more complicated each piece must become to justify itself.
Scale this over a handful of teams and add executives, marketing, and HR and there you go - you’ve got yourself a proper rat’s nest.
Granted it’s a rat’s nest that feeds and clothes a couple hundred people, but it’s definitely not efficient or glamorous.
Amazing video. Thanks for sharing
great walkthrough. learned a lot and excited to learn more by looking at their open source code.
Using scala for static typing then deciding to go with mongodb that doesn't enforce any data consistency, comes with licensing issues and doesn't really scale that well, really smart choice. This really shows there was no strong reasoining behind the tech choice and more a choice of tools that are most familiar to the developer, which by itself is not a bad thing but at the same time doesn't give a lot of the value for previous arguments.
I'm not even programmer but this video goes hard. Although I'm not to aware about lingo here. Can say that giving a goog really helped me, maybe some of you may help my curiosity?
Strongly typed means that it has more strict rules? . So you probably will be notified about a lot more errors in your coding, ''typing'' when you compile, but as the result your end product would be less buggy?
As oppose to weak typed. when it may be compiled the way you want, but there would be some weird bugs and code might be unreadable?
In programming types refer to data types. Simple ones are integers(numbers), booleans( 0 or 1 / false or true), and characters (letters/numbers/symbols).
Some programming languages have what is called type safety, meaning when programming types need to be explicitly declared. If I want to use a number for math I need to declare an integer and use the operators that integer supports to modify the value. If I declare a character and populate it with a number such as 1, it will not be treated as a number and cannot be modified using math operations.
There are more loosely typed languages like python that allow users to quickly move data around and reformat it but the downside as you said is introducing potential bugs in the code. If you do not explicitly know your data type you can attempt an operation on it that is impossible in the context of your code which can crash the program if not handled correctly. Without type safety you also enable more unexpected behaviors and introduce more difficultly into sanitizing user input.
Both are useful but generally type safety holds programmers to a better standard which is important on large long term projects. Hope you find some of this information useful.
If you are not a programmer but want to learn I recommend python because it is extremely low barrier to entry in terms of learning syntax and being applicable to many problem sets with a large community to support your learning/development.
@@alexleonard5601 man, thanks for taking time explaining this stuff.
I tip toe around programming for a whole decade probably, it isn't my thing, Can't imaging myself this locked in in front of code, especially now requirements are high and competition is cut throat. But maybe I will learn some python just for my own sake, it wouldn't hurt I guess :)
@@simpleman7203 programming is a black box of terminology and best practices that seems daunting from the outside looking in but it’s really formulaic once you’ve done it enough. I definitely recommend python for making quick fun programs. These days I also highly recommend you use AI tools like chatgpt or copilot to make sense of what you don’t understand.
A good exercise would be to ask chat gpt to make a simple console game, and then take it piece by piece and ask how each component is made and why. You can also do this process with open source projects on the internet to get a better understanding for things like automation that can help you in life. Good luck on your journey and just have fun with it! As with anything new don’t expect to be good or know it all, just show up with a willingness to learn and a curious mind you will go far with it.
@@simpleman7203knowing at least a scripting language can be super useful in terms of productivity - you can automate a lot of simple but tedious tasks, make calculators and other small programs for yourself! Python is great for beginners - if you want to go deeper there are much more in-depth languages (I personally love C, but part of that is a lot of experience with both the language and terminals)
This video is perfect to demonstrate that having the vision of a "technology architect" is important in a programming project. That's a message I'm trying to get through in some workplace. In a "normal" work environment, it can be easy to be swarmed in projects, getting pressured for feature-bloat, and only playing technology-catchup when hitting a wall. I have a feeling we need this cultural shift, but l’m having a hard time to articulate that or demonstrate that. Do you know of any other video that illustrate this ? Or is this lichess "tech vision" case a rare exception that can never be replicated in a work environment or in a team environment ? Please give me some links if you know of any other similar case :)
"I'm not the brightest star"(He is)
When i saw the UI and used the UX of lichess i was hooked and somehow i knew the development team was small and elite and had the right direction
I did a little bit of Scala way back. Now I do a lot of work in Typescript. I struggle to come up with anything that I really miss from Scala that Typescript doesn't give me.
Oh, right. Pattern matching. That's a killer feature I would like everywhere.
Quite interesting, I realized this a long time ago, most devs do not care about their jobs and that makes them incredibly inefficient, once the whole company is like that is something really hard to scape... But the thing is that almost always you get to work on something you just don't care.
I like Haskell, but he made the right choice. Haskell's tooling is such a pain.
Yes tooling and the effects through Monads are a pain to hanlde for real world projects
Amazing video!
Thank you for putting together this video about a true gigachad.
Jane Street has a video on how to do safe failover in a Central Limit Order Book which is kind of a monolith. Or at least how it worked years ago.
They used UDP for networking.
Nobody knows why you would need so many developers for such a site. There is much more complex software created by vastly smaller teams
Good organized vid. Liked and subscribed 🎉
16:30 one of the most wise sentences I have heard about coding lines.
Can't wait to see what Prime says about him possibly using Haskell for it today
The man should get more money honestly, that's really not enough money for what he accomplished and the number of users
Quality video mate!
This is a great video!
Great video, you've gained a subscriber
Thank you!
small correction at 8:20
mongodb is under the apache 2.0 license which is also opensource
MongoDB is absolutely awesome and it would be my choice too.
Lag compensation + optimistic client side rendering.... for CHESS 🤯🤯
Can someone explain why this is even necessary for chess?
Sure! In Chess you can lose by running out of time or getting check mated. The shortest time control, which is called bullet chess, is 1+0. This means that you have 1 minute to make all your moves, and you get 0 additional seconds per move. Chess games are commonly 30-60 moves per player, so on average you will have 1 to 2 seconds per move. If I make a move in 2 seconds, but I have 500ms lag (because the server is in France and I'm in Australia), the server will receive that move after 2.5s, but by tracking my ping the server can give me back that extra time I lost while sending the message. This is what I mean by lag compensation.
You can also pre-move, which is to say which move you will do next before the opponent has even finished their turn. If you do this the server will take none of your time, for example Chess.com will still take the time it took for your move to reach the server into account. So you can lose on time even when pre-moving.
Optimistic client rendering just means that you update the piece's position on the client immediately, even before the server has received the request. If the server disagrees with the move it will be rectified on the client after.
Scala rules! I can confirm.
Love this video got to check out your other ones
On completely unrelated note:
If watch this video on your phone and slightly wiggle it at the 2:25 mark, it appears as the text is wiggling much more