Guide / for builders
VB.NET inventory systems — the honest assessment
VB.NET can absolutely run an inventory record — the language was never the risk. The risks are the schema you choose, the concurrency you skip, and the tail you inherit.
The key facts
- The language is the least important decision — VB.NET on .NET with a relational database is a perfectly capable stack for an inventory record.
- The architecture that matters: append-only movements, derived quantities, transactional writes, an audit row per change — identical in every language (the class model).
- The real risks: the maintenance tail, the bus factor of a one-developer system, and the retrofit of the parts tutorials omit.
- BSimple is commercial and not VB.NET-based open source — stated plainly; this page maps the build route honestly.
- Where it fits: this page is one branch of the inventory management guide.
- 01The key facts
- 02The stack, honestly assessed
- 03The architecture that decides success
- 04Build vs buy, with our stake visible
The stack, honestly assessed
VB.NET in 2026 is a supported, first-class .NET language — the stereotype of it as a dead end is dated. For an internal inventory system it is a reasonable choice: Visual Studio's tooling is excellent, WinForms/WPF builds screens fast, and any relational database (SQL Server, PostgreSQL) under ADO.NET or an ORM handles the transactional work. The honest caveats are organisational, not technical: VB.NET talent is thinner than C# (consider C# for the same design — the syntax differs, the architecture does not), and desktop-first thinking tends to reappear as reach problems — the browser-vs-desktop question is where that bites.
If the choice is driven by an existing VB.NET codebase or developer, build with confidence on the architecture below; if it is greenfield, weigh the talent pool before the syntax.
The architecture that decides success
Movements, not mutable quantities. An append-only StockMovement table (direction, quantity, product, location, actor, reason); on-hand derived by query. This buys the audit trail, concurrency safety and traceability that every later requirement assumes — the VBA comparison shows the same lesson at smaller scale.
Transactional writes. Two users selling the last unit must not both succeed — wrap the check-and-insert in a transaction and fail loudly. In .NET terms: a serializable transaction or optimistic concurrency on the movement insert.
Deliberate accounting boundary. Invoices are produced from checked orders and handed to the accounting system once, reviewed — never a second ledger growing quietly beside the first.
The tail. Authentication and roles, backup and restore, import from the spreadsheet the business runs today, reconciliation reports, and a deployment story that survives the developer's holidays. Tutorials end where this list begins; the list is the project.
Build vs buy, with our stake visible
We build BSimple, so weigh that: it is commercial software, not VB.NET and not open source — this page maps the build route because it is a legitimate one. Build when the requirement is genuinely internal, learning counts, and someone will own the tail for years. Buy when the requirement is a dependable multi-user record maintained by someone else: BSimple runs the sound architecture as a product — live multi-location stock, batches, purchasing, portals, invoices to Xero or MYOB (US integrations rolling out) — from $180/$250/$399 per month AUD, with the trial pricing the buy side in an afternoon. The project-on-GitHub route is the third path: existing code you maintain.
Frequently Asked Questions
Is VB.NET a good choice for an inventory system?
Technically yes — supported .NET, fast screen development, solid database access. Choose it for the team you have; choose C# for the talent pool you might need. The architecture matters more than either.
How do we stop two users overselling the same stock?
Transactions around the check-and-record: the movement insert either happens against verified availability or fails loudly. Stored editable quantities cannot give you this — the schema is the concurrency strategy.
What does the maintenance tail include?
Authentication and roles, backups that get tested, spreadsheet import, reconciliation and audit reports, deployment and updates — everything tutorials skip. Estimate the tail honestly; it is usually the majority of the project.
Can we migrate a VB.NET system to something else later?
Yes, and the effort tracks the schema: a movements-based design exports cleanly to any system; a mutable-quantity design needs a reconciliation first. Build for the migration you may want.
What would BSimple replace in this plan?
The entire tail plus the core: live multi-location stock, batches, purchasing, portals, accounting handoff — maintained by the vendor. The trial is how you price that against your VB.NET estimate on real products.
BSimple

