Concurrency, JVM, and Debugging expert. Teaching concurrency.

Joined April 2017
At @jetbrains, we not only provide top-notch programming tools but also conduct cutting-edge pragmatic research. Recently, we presented a new channel algorithm in @kotlin coroutines and the fastest concurrent queue at @PPoPPConf — a top-tier conference on parallel programming. /1
4
65
3
413
50,554
Giving a short talk at the JetBrains booth today at Devoxx — join it at 14:40 if you are also there!
At @DevoxxBelgium today? Join our live demos at @JetBrains booth: 11:30-11:50 am – Hibernate Debugger Internals 2:40-3:00 pm – Debugging Production With AI and IntelliJ IDEA 3:50-4:20 pm – What’s New in @Kotlin Drop by to chat about Java, Kotlin, coding agents, and what’s new at JetBrains.
3
420
I’m opening my workshop “Concurrent Programming Fundamentals for the AI Era” to external teams for the first time. Concurrency isn’t really about algorithms or APIs. It’s about being able to look at code and see what can happen between threads or coroutines, and how to prevent possible races and bad interleavings. This intuition is the hardest thing to teach. Over the past 8+ years, I’ve taught concurrency at universities and later turned that experience into internal workshops at JetBrains. I ran the workshop several times for 250+ colleagues and received overwhelmingly positive feedback, with many participants saying it changed the way they reason about concurrent code. In the AI era, this skill matters even more. AI can generate code quickly and confidently, but subtle concurrency bugs still need human understanding, careful testing, and debugging intuition. It’s a 4-day, hands-on workshop for JVM developers. Participants implement classic and modern concurrent data structures, dissect tricky bugs, and learn practical testing and debugging techniques in Java or Kotlin. I’m now looking for the first external teams who’d like to try it. If your team works with backend systems, infrastructure, databases, developer tools, coroutines, virtual threads, or other concurrency-heavy software, I’d be happy to talk. 👉 Details: nikitakoval.org/workshop
1
8
1
12
727
We have a dedicated AppGlass booth at J-Spring today, come by if you are here! It’s my first time setting up and leading a booth today, and I love it! It is great to see so many people stop by, ask questions, and get excited about what we’re building.
1
4
200
Programming is no longer the bottleneck in development, at least in our team. Writing specs, planning, and code review are. These are hard-thinking tasks, with almost no routine work left in between, thanks to AI. People are getting tired faster than before. Should we now work less and rest more to recover?
1
1
235
Haven’t cooked syrniki in a while, and this is my first time making them without flour, even though I’d known about that trick. It makes them taste so much better!
3
12
1,205
It’s so funny and lovely to realize that I started working on concurrency, program analysis, and other non-trivial SE topics at @devexperts, thanks to great mentorship from @tsitelov and @relizarov, and that I’m still in this niche and still enjoy it a lot!
4
459
I’m actively interviewing senior+ engineers right now and keep seeing the same pattern in CVs. Many of them are clearly AI-generated, long and meaningless. I find it a very nice filter! If you cannot describe your experience in a clear and concise way, without AI bullshit, you likely won’t be able to do the same at work.
2
211
I'm now driving a new product at JetBrains, a safe debugger for production systems. Still, I believe it might also be useful for local programs, as a tracing debugger. Just take a look at the demo on how we collect breakpoint hits and capture the context without pausing the program! Please react if you are interested in using AppGlass locally for debugging, whether manually or with AI. If we see demand, I would happily add this feature 🙌 youtu.be/BK-2ZHi9XPo?si=_dDC…
1
3
372
I recently moved to an internal startup incubator at JetBrains to build a safe debugger for production systems: appglass.org The project often requires a complex setup, so I started using AI not only for development, but also for reviewing, asking it to record demos.
3
8
476
For many PRs, review means: launch the IDE plugin, connect to Spring PetClinic, add breakpoints, trigger requests, open breakpoint hits, and inspect objects. That’s boring but important. So I asked AI to do it on a virtual display, from a plain-English prompt. Demo below 👇
1
3
285
Since then, I often don’t need to launch the whole project locally just to make a review. Instead, I get evidence of how the solution behaves with a simple prompt. For me, this already saves time and reduces context switching. Maybe useful for your projects too.
1
109
Happy to make my small contribution with a custom read-write mutex for coroutines here 🙌
Many developers care deeply about IDE performance, so we turned an internal post by @knischt into a public one. It covers the architecture behind UI freezes in IntelliJ-based IDEs, what it took to move more work off the UI thread, and the results so far. blog.jetbrains.com/platform/…
9
459
On my way to ICFP/SPLASH! Our team is giving two tutorials this Sunday — one on Lincheck and another on algorithms in Kotlin Coroutines. Check the schedule and join us in person or online 🤗 2025.splashcon.org/track/icf…
3
296
Reviewing PPoPP papers today — happy to see many strong submissions on concurrency. Remember PPoPP two years ago, the focus was on parallel systems. It’s great to see the shift! PPoPP has a rich history of concurrent algorithms, and I hope it remains a key venue for them.
3
379
Last week, there was an internal hackathon at JetBrains. Look at what our team has prototyped in just 48 hours: a Time-Traveling Debugger for IntelliJ IDEA! 🚀 Hope it will become a bigger project🤞
8
12
1
186
9,853
ConcurrentLinkedDeque in Java is non-linearizable. Here is the Lincheck test that reveals the issue and explains the root cause of the problem. I've also put this code on GitHub: github.com/ndkoval/concurren… (Thread)
3
31
126
19,270
Finally, the algorithm tries to unlink the extracted node from the linked list, but this part does not affect correctness.
1
2
1,386
With Lincheck, we easily investigated why ConcurrentLinkedDeque is incorrect without diving into the source code. Check the GitHub repo with this test to reproduce the bug and play with Lincheck! github.com/ndkoval/concurren…
1
21
1,386