Vadym Yaroshchuk
62 subscribers
31 photos
2 videos
32 links
Personal channel about programming, my life, and things I find worth sharing.

My profile – @y9vad9
General Info – https://t.me/vadymlog/4
My skills – https://t.me/vadymlog/9
Download Telegram
Vadym Yaroshchuk
The Problem with “Drawer” Packages While developers sometimes use standard terminology and organize “labeled” logic, most of the time they don’t actually understand the real purpose or responsibility of the code they’re putting there. 👇
Terminology isn’t fixed

Even if you name packages consistently at one moment, terminology isn’t static. Teams call the same concept .model, .dto, or .entity. Colors change names — and your packages do too. The rule: packages should communicate responsibility, not type.

👇
4
Vadym Yaroshchuk
Terminology isn’t fixed Even if you name packages consistently at one moment, terminology isn’t static. Teams call the same concept .model, .dto, or .entity. Colors change names — and your packages do too. The rule: packages should communicate responsibility…
What Deserves Its Own Package?

Not every class or object deserves a namespace. Ask yourself:
• Can it exist independently, or is it tightly coupled (like UserProfile inside User)?
• Does it provide a meaningful interface, or is it just an internal detail?
• Does it evolve on its own, or always with its parent?

The answer guides whether you create a subpackage. Micro-level autonomy matters.

👇
4
Vadym Yaroshchuk
What Deserves Its Own Package? Not every class or object deserves a namespace. Ask yourself: • Can it exist independently, or is it tightly coupled (like UserProfile inside User)? • Does it provide a meaningful interface, or is it just an internal detail?…
Macro Level Matters Too

At the macro level, namespaces still help: separating layers like .domain or .infrastructure enforces isolation and clarifies architectural boundaries.

Thus, we can see it as a positive thing rather than a meaningless technical label — these boundaries are, for the most part, self-sufficient.

👇
4
Vadym Yaroshchuk
Macro Level Matters Too At the macro level, namespaces still help: separating layers like .domain or .infrastructure enforces isolation and clarifies architectural boundaries. Thus, we can see it as a positive thing rather than a meaningless technical label…
Isolation Principle

Even small pieces follow the isolation principle. If it’s not independently meaningful, it shouldn’t get a package. Example: UserProfile is tightly coupled to User — it’s not a standalone concept, so it doesn’t deserve its own namespace.

👇
3
Vadym Yaroshchuk
Isolation Principle Even small pieces follow the isolation principle. If it’s not independently meaningful, it shouldn’t get a package. Example: UserProfile is tightly coupled to User — it’s not a standalone concept, so it doesn’t deserve its own namespace.…
Singular vs Plural

Packages represent concepts, not collections. Use singular:
user → all code related to the User concept
users → implies a collection, which can be misleading

👇
3
Vadym Yaroshchuk
Singular vs Plural Packages represent concepts, not collections. Use singular: • user → all code related to the User concept • users → implies a collection, which can be misleading 👇
Focus Matters

Meaningful namespaces are not enough — the focus matters. Compare:

com.example.domain.user → technical-first
com.example.user.domain → concept-first


Concept-first naming keeps the business idea at the center, with layers secondary.

Consider:

domain
├─ user
└─ task
application
├─ auth
├─ user
└─ task


Does auth even have domain logic? With technical-first modules, you can’t immediately tell. Concept-first modules make capabilities clear:


auth
└─ application
user
├─ domain
└─ application
task
├─ domain
└─ application


👇
3
Vadym Yaroshchuk
Focus Matters Meaningful namespaces are not enough — the focus matters. Compare: com.example.domain.user → technical-first com.example.user.domain → concept-first Concept-first naming keeps the business idea at the center, with layers secondary. …
Conclusion
• Say no to .common, .core, .shared, .base
• Say no to .model, .dto, .entity
• Yes to meaningful, concept-first packages
• Avoid dumping unrelated code into generic folders
• Only split code if it’s independently meaningful and exposes a clear API
• Focus on the concept first, layer second

👇
3
Vadym Yaroshchuk
Conclusion • Say no to .common, .core, .shared, .base • Say no to .model, .dto, .entity • Yes to meaningful, concept-first packages • Avoid dumping unrelated code into generic folders • Only split code if it’s independently meaningful and exposes a clear API…
Don’t Fear Many Files!

More files aren’t a problem if each placed correctly in its meaningful place. A well-structured codebase is easier to navigate than one full of generic “drawer” packages.

Check out my full article for deeper insights and examples.
6
This media is not supported in your browser
VIEW IN TELEGRAM
I’ve just updated my website — y9vad9.com.

It looks noticeably better now and supports three languages. Articles are now available in English, German, and Ukrainian. There’s still room for improvement, so feel free to let me know if you spot anything.

I’m also planning to publish at least two new articles before 2026. The topics are quite interesting, so stay tuned.
7❤‍🔥2
Sometimes a function signature doesn't tell you what it wants. You read the implementation, figure it out, and blame the missing docs. But are docs the real problem? Or, maybe, the code says String when it means something much more specific.

New post on semantic typing in Kotlin — when it helps, when it gets in the way, and the reasoning behind design decisions that usually happen without much thought. Roughly, going from "this is a string" to "this is a concept".

Enjoy! https://dev.to/y9vad9/semantic-typing-we-ignore-i0d
6
Vadym Yaroshchuk
Thanks for your feedback on the recent poll about being more active here! I’m back and enthusiastic sharing a new article about DDD, Clean and Hexagonal Architectures. The main motivation of this article is my friends that ask me a lot about my architecture…
I also updated my article on DDD, Hexagonal Architecture, and Clean Architecture, so if anyone missed it or wants to refresh their memory, you’re welcome to check it out again. 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
And not to forget — wishing y’all great holidays! Merry Christmas 🎄
5
Hey again, fellas!

As promised, I've published a new article — about contracts, contract violations, and how to think about failures in code.

When exceptions are the right signal, when they’re harmful, and why "safe" abstractions can sometimes be more dangerous than throwing. We'll also look at patterns established in the libraries we use every day — when they actually work, and when they quietly don't.

Hope you will find it useful — https://dev.to/y9vad9/failures-we-dont-model-correctly-2hbo.
4👍1
Vadym Yaroshchuk
I’ve just updated my website — y9vad9.com. It looks noticeably better now and supports three languages. Articles are now available in English, German, and Ukrainian. There’s still room for improvement, so feel free to let me know if you spot anything. I’m…
This media is not supported in your browser
VIEW IN TELEGRAM
Say goodbye to your mouse 👋

I’ve just shipped a new command palette to the website. It’s fully keyboard-driven and works everywhere — from the Home page to any note — making navigation fast and frictionless. Just press '/' on any page!

The palette surfaces:
• Mentions and links referenced inside a note, so you can jump around without touching the mouse
• A clearer view of cross-references between notes
• Tags — a newly introduced part of notes. Type tag:something to instantly find notes from a specific category

More details here on palette you can find here: https://y9vad9.com/en/notes/site-features


On top of that, I’ve refreshed the notes pages:
every article now has a preview image, visible both in the list and on its dedicated page.
🔥72
Vadym Yaroshchuk
Say goodbye to your mouse 👋 I’ve just shipped a new command palette to the website. It’s fully keyboard-driven and works everywhere — from the Home page to any note — making navigation fast and frictionless. Just press '/' on any page! The palette surfaces:…
That sounded unreasonably epic for something you'll probably visit once in a lifetime, but I still love it.

Hopefully soon I'll finally get my hands on publishing some of my notes (not quite articles, so the only real place for them is my website). Then this change might actually make sense. 😁
1
New note:
Dresden, Somehow (2025)

No buzzing, no fuzzing — just casual and short. Totally unserious. Enjoy! 🙂


P.S. Since the last update, the site got a significant upgrade — comments section with reactions is live (your watercooling expertise is welcome :P), plus better design and smoother overall flow.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
New small note:
UI shouldn't think about validation

P.S. The website underwent significant changes to adopt a 'digital garden' mental model. So, don’t be surprised — I will post an update about it once it's fully transformed.
🔥4