shipping/JOG — 03:41 GMT+7/48.3 °C CPU/v 07.0 · build 2026.05.12
lat −7.7956 · lon 110.3695/ntwk · online/open for projects
back to notesnotes2026devextreme-survival-guide-2026
[ essay no. 27 ]toolsjuly 8, 20265 min1,071 wordsrevision 1live

DevExtreme · 2026 survival guide

Six months building internal platforms on DevExtreme + ASP.NET MVC taught me what the official docs don't say about virtualization, custom editors, and the queries that quietly stall at 100k rows.

d
devrangga hazza mahiswaracreative engineer · jogja, id
share on 𝕏

DevExtreme · 2026 survival guide

1,500+users on the grid
~100krows · the cliff
ASP.NET MVCthe wire format
SQL Serverthe source of truth

There is almost no good public content about DevExtreme + ASP.NET MVC at production scale. The official DevExpress docs are reference material, not field reports. The community content is mostly tutorials for projects under 10,000 rows. The actual problems start at 100k rows, when grids that worked fine in dev start stalling, and the conventional advice stops applying.

This is a six-month field report from shipping internal platforms on this stack to 1,500-plus users. What broke at scale, what survived, what I'd reach for again if the brief came in.

01

when devextreme is the right call

The brief at Hino was: replace a decade of internal-tool friction with a modern web platform, stay inside the Microsoft stack (SQL Server, internal Active Directory, ASP.NET MVC tradition), ship fast enough to change behavior in three months.

DevExtreme is the right call when:

  • The stack is firmly Microsoft and the team will continue maintaining it
  • The grids need to handle moderate scale (10k-100k rows) without custom optimization work
  • The forms need rich behavior (cascading dropdowns, custom editors, validation chains) that would take weeks to build from scratch
  • The visual style matches the audience's expectations (corporate, dense, function-first)

DevExtreme is the wrong call when:

  • The team prefers React or Vue and is willing to invest in a different component set (ag-grid, MUI X DataGrid, etc.)
  • The grids need to handle 1M-plus rows with sub-second filtering — DevExtreme can do this, but the optimization work approaches the cost of using a custom solution
  • The visual style needs to be modern, consumer-facing, or design-system-led — DevExtreme is heavy and corporate-coded out of the box

I'd choose DevExtreme again at Hino's scale. I wouldn't choose it for a public-facing product.

02

the virtualization wall

The single most consistent failure mode I saw: grids that performed well at 10k rows started dropping frames at 100k. The math is roughly: every row not virtualized costs DOM weight and JS overhead. Below 10k it's free. Around 100k it bends. Past 250k it breaks.

The fix that holds: server-side data source, not client-side. The default dataSource configuration loads everything into the client. Switch to server-side and the grid only requests the rows currently visible plus a small lookahead.

App_Start/GridConfig.cscsharp
@(Html.DevExtreme().DataGrid<Order>() .DataSource(d => d.Mvc() .Controller("Orders") .LoadAction("Get") .UpdateAction("Update") .Key("Id")) .RemoteOperations(operations => operations .Paging(true) .Filtering(true) .Sorting(true) .Grouping(false)) // grouping at server-side gets expensive .Scrolling(s => s.Mode(GridScrollingMode.Virtual)) .Paging(p => p.PageSize(50)) )

The RemoteOperations settings are the load-bearing ones. Push paging, filtering, and sorting to the server. Keep grouping client-side unless you really need it server-side (the SQL gets ugly fast).

03

custom editors that don't fight the model binder

The second most common failure mode: custom editors (combo boxes, date ranges, cascading dropdowns) that render correctly but postback with the wrong values. The ASP.NET MVC model binder doesn't know about the editor's internal state, so the form submits with the previous value or with nothing.

The fix: ensure the editor's bound value writes back to a <input type="hidden"> that matches the model binding convention.

@Html.DevExtreme().SelectBox()
    .Name("CategoryId")           // matches model property
    .DataSource(Model.Categories)
    .DisplayExpr("Name")
    .ValueExpr("Id")
    .Value(Model.CategoryId)
    .OnValueChanged("function(e) { 
        // Trigger any cascading editors here
    }")

The Name has to match the model property exactly. Underscored names or aliases break the binder. Spend one debugging hour on this once; never spend it again.

04

the queries that quietly stall

Three query shapes that look fine in dev and die on production data.

Joined filters across heavy tables. A grid filter that joins three tables, each with 100k-plus rows, will execute a Cartesian-ish plan unless the indexes are right. Check execution plans. Add covering indexes on the JOIN keys.

OR clauses in WHERE. SQL Server's optimizer is bad at OR in WHERE clauses against large tables. Refactor to UNION ALL of two SELECTs whenever possible. Counter-intuitive but consistently faster on the data shapes I dealt with.

Pagination without ORDER BY. Without an ORDER BY, SQL Server doesn't guarantee row order across pages. Users see the same row twice or miss rows. Always order by a stable key (the primary key as tiebreaker if no other order is specified).

Most of these surfaced not from DevExtreme being slow but from the SQL underneath DevExtreme being inefficient. The grid was the messenger, not the killer.

05

what i'd swap next time

Honest assessment if I started a similar project in 2026:

  • At Hino scale (1,500 users, 100k-row grids, Microsoft-stack team): I'd reach for DevExtreme again. The replacement cost — porting to ag-grid or a custom React solution — would consume the velocity advantage that DevExtreme buys.
  • At 10x scale (15,000 users, 1M-row grids, modernized team): I'd seriously evaluate moving the frontend off DevExtreme. The grid optimization work past 250k rows starts feeling like fighting the framework.
  • At smaller scale (100 users, 10k-row grids): DevExtreme is overkill. A simpler stack — server-rendered tables, occasional client-side enrichment — would ship faster and be cheaper to maintain.

The fit window for DevExtreme is medium-scale enterprise on a Microsoft stack. Outside that window, both directions have better options.

06

the artifact i'd recommend keeping

The single most valuable artifact from six months of DevExtreme work was a grid configuration kit — a set of pre-tuned settings (remote operations, virtualization, default paging, error handling) that I'd drop into every new grid. The kit took two weeks of iteration to converge. After that, every new grid took an hour to configure instead of a day.

This is the agency-style velocity move applied to enterprise tooling. Build the scaffold once; reuse aggressively. The pattern is the same as Laravel scaffolds, Next.js project templates, GSAP animation snippets. Identify the configuration that always-applies, codify it, stop re-deriving it per project.

DevExtreme isn't a glamorous tool. It's a working tool for a working domain. If you're shipping enterprise inside the Microsoft stack and the scale is in the 10k-100k row range, it's worth its line item. Outside that window, other choices are stronger. Knowing which window you're in is the diagnostic the rest of this guide assumes.

— end of essay · published july 8, 2026 · 1,071 words · 5 min
[ if this moved you ]

keep reading.

three essays in the same key · pick one