<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Иван Кравченко</title>
    <description>The latest articles on DEV Community by Иван Кравченко (@ivankravchenko).</description>
    <link>https://dev.to/ivankravchenko</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4013192%2Fb7c312ab-e555-43f4-8812-1b981c385544.jpg</url>
      <title>DEV Community: Иван Кравченко</title>
      <link>https://dev.to/ivankravchenko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ivankravchenko"/>
    <language>en</language>
    <item>
      <title>How I Built an Open Format and a Free Web Tool for Live Hierarchy Modelling</title>
      <dc:creator>Иван Кравченко</dc:creator>
      <pubDate>Fri, 03 Jul 2026 10:04:24 +0000</pubDate>
      <link>https://dev.to/ivankravchenko/how-i-built-an-open-format-and-a-free-web-tool-for-live-hierarchy-modelling-2616</link>
      <guid>https://dev.to/ivankravchenko/how-i-built-an-open-format-and-a-free-web-tool-for-live-hierarchy-modelling-2616</guid>
      <description>&lt;p&gt;I often take part in strategy sessions where a company’s organisational, functional, or product structure has to be built right in the middle of the conversation.&lt;/p&gt;

&lt;p&gt;The first diagram appears on screen. Someone says, “No, this function should not be here.” Another person adds a new role. A third asks to temporarily hide half the branch so they can explain the idea to the CEO. Twenty minutes later, the structure no longer looks like the one we started with.&lt;/p&gt;

&lt;p&gt;And that is the point where almost any ordinary diagram starts getting in the way.&lt;/p&gt;

&lt;p&gt;The people in those sessions are usually not analysts, process architects, or technical specialists. They are commercial, operational, or administrative leaders. They should not have to learn how to draw a box correctly, connect it with an arrow, or choose the right relationship type. They need to discuss the business itself.&lt;/p&gt;

&lt;p&gt;Almost like children. And that is not criticism: when adults are solving a difficult problem together, the interface should disappear from their attention too.&lt;/p&gt;

&lt;p&gt;That experience gave me a list of requirements for the tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What needs to happen during a live session
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The tool should run almost anywhere and on almost any device, without installing heavy third-party or licensed software.&lt;/li&gt;
&lt;li&gt;The model should look presentable enough for a large screen, an executive, or a decision review, without being overloaded with professional notation.&lt;/li&gt;
&lt;li&gt;The structure should be built as a model, not manually drawn from boxes and arrows.&lt;/li&gt;
&lt;li&gt;Participants should be able to change it during the discussion: drag blocks, change reporting lines, group them, hide unnecessary parts, adjust formatting, and quickly bring attention back to the relevant branch.&lt;/li&gt;
&lt;li&gt;The same model should be readable in different ways: as a classic vertical hierarchy and as a horizontal flow, closer to a responsibility chain, functional flow, or mind map.&lt;/li&gt;
&lt;li&gt;The model should have a single numeric dimension: budget, timeline, headcount, effort, workload, or another measure. That value should aggregate across an entire branch instead of living as a separate label on each block.&lt;/li&gt;
&lt;li&gt;The result should not be locked inside one application. It should be possible to transfer it as graphics, tables, interactive HTML, and machine-readable code.&lt;/li&gt;
&lt;li&gt;The model’s content should be easy to analyse and improve with the user’s own AI tool, rather than requiring it to be sent to a built-in corporate API.&lt;/li&gt;
&lt;li&gt;Finally, these models almost always contain sensitive data: names, salary ranges, budgets, commercial assumptions. They should not have to be uploaded to yet another cloud service unless necessary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I could not find a ready-made tool that brought all of this together, so I decided to make my own.&lt;/p&gt;

&lt;p&gt;But I quickly realised that one application was not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  I had to build two things
&lt;/h2&gt;

&lt;p&gt;The first is &lt;strong&gt;&lt;a href="https://www.orgformat.com/orgf.html" rel="noopener noreferrer"&gt;ORGF&lt;/a&gt;&lt;/strong&gt;, an open format for hierarchical models.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;&lt;a href="https://www.orgformat.com/studio.html" rel="noopener noreferrer"&gt;ORGFORMAT Studio&lt;/a&gt;&lt;/strong&gt;, a free browser application that can open, display, and edit those models visually.&lt;/p&gt;

&lt;p&gt;The idea behind ORGF is simple: a model should not exist only as an image, a screenshot, or a file owned by one vendor. It should be ordinary readable text that can be shared with another person, opened in another tool, validated, used as input for AI, or transformed into another representation.&lt;/p&gt;

&lt;p&gt;I chose YAML because it is simple enough to read with your eyes while still being understandable to software and AI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reference:
  format: "ORGF 1.0.0"
  syntax: "YAML|UTF-8 without BOM"

  sections_fixed:
    orgformat: "string|required"
    reference: "section|optional"
    meta: "section|required"
    model: "section|optional"
    root: "block|required"
    hierarchy: "root.children[*].children[*]..."

  meta:
    title: "string|max250|optional"
    author: "string|max250|optional"
    rights_holder: "string|max250|optional"
    copyright: "string|max500|optional"
    license: "string|max120|optional"
    created: "string|optional|YYYY-MM-DD/ISO 8601"
    updated: "string|optional|YYYY-MM-DD/ISO 8601"
    status: "draft/final/archived|optional"

  model:
    name: "string|max250|optional"
    desc: "string|max1000|optional"
    value_label: "string|max80|optional|one_value_type_per_model"
    value_unit: "string|max40|optional|one_value_unit_per_model"

  block:
    name: "string|max250|optional|empty_allowed"
    desc: "string|max500|optional"
    value: "number|optional|own_value_only"
    pic: "section|optional"
    pic.set: "emoji/lucide/feather/simple-icons/iconify|required_if_pic"
    pic.name: "string|required_if_pic"
    tags: "array[string|max80]|optional|default:[]"
    hidden: "boolean|optional|default:false"
    branch_orientation: "auto/horizontal/vertical|optional|default:auto"
    style:
      fill: "default/#HEX|optional|default:default"
      contour: "default/solid/dashed/dotted/double|optional|default:default"
      contour_width: "default/regular/bold|optional|default:default"
    relation:
      line: "default/solid/dashed/dotted|optional|default:default"
      line_width: "default/regular/bold|optional|default:default"
      color: "default/#HEX|optional|default:default"
    children: "array[block]|optional|default:[]"

  authoring_rules:
    - "one_file=one_model"
    - "hierarchy=children"
    - "no_id_parent_order"
    - "empty_blocks_allowed"
    - "tags=plain_classifiers_not_key_value"
    - "desc=short_human_note_not_data_dump"
    - "style_relation=custom_overrides_only"
    - "tag_colors_not_stored_in_orgf"
    - "value_one_type_per_model"
    - "value_one_unit_per_model"
    - "value_on_block_is_own_value_only"
    - "value_totals_are_computed_not_stored"
    - "reference_if_present=complete_unmodified_canonical_copy_published_for_declared_orgformat_version_at_https://github.com/orgformat/orgf/releases"
    - "hidden=true_on_a_block_requires_hidden=true_on_every_descendant"

  normalization:
    unknown_fields: remark
    invalid_values: default
    over_limit: truncate
    invalid_yaml: reject
    invalid_structure: reject

  normalization_rules:
    - "missing_optional=default"
    - "unknown_fields=remark"
    - "invalid_values=default"
    - "over_limit=truncate"
    - "normalization=view_only_not_source_mutation"
    - "hidden_branch_inconsistency=remark_not_reject"
    - "normalization_propagates_hidden=true_to_all_descendants"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://github.com/orgformat/orgf" rel="noopener noreferrer"&gt;ORGF format itself&lt;/a&gt;, the reference, and the validator are published under the MIT licence. It is not just a file for Studio: it can be used independently from Studio too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is more than just a diagram
&lt;/h2&gt;

&lt;p&gt;ORGF has three simple mechanisms that, for me, turn a hierarchy from a picture into a working model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Value: a structure with an economic dimension
&lt;/h3&gt;

&lt;p&gt;Each block can have a numeric value, and the model aggregates it across the entire branch.&lt;/p&gt;

&lt;p&gt;That value can represent budget, headcount, effort, timeline, workload, or any other single measure. So when discussing a new structure, you can see not only how reporting lines or functional decomposition change, but also how its numeric scale changes.&lt;/p&gt;

&lt;p&gt;ORGF does not claim that it can automatically measure a company’s effectiveness on its own. But it creates a simple bridge between a structural decision and its economic evaluation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tags: some systematisation without a heavy database
&lt;/h3&gt;

&lt;p&gt;Blocks can be marked with tags such as &lt;code&gt;sales&lt;/code&gt;, &lt;code&gt;critical&lt;/code&gt;, &lt;code&gt;remote&lt;/code&gt;, &lt;code&gt;contractor&lt;/code&gt;, &lt;code&gt;region-eu&lt;/code&gt;, &lt;code&gt;planned&lt;/code&gt;, or any other custom attribute.&lt;/p&gt;

&lt;p&gt;This gives the hierarchy a lightweight systemic layer. You can describe function types, statuses, roles, regions, skills, or other characteristics without building a separate database or burdening the model with a technical schema.&lt;/p&gt;

&lt;p&gt;In practice, it becomes a small domain database — but in a form that can still be opened, understood, and discussed during a normal working meeting.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-ready: not an embedded agent, but work with your own AI
&lt;/h3&gt;

&lt;p&gt;I deliberately chose not to build an intrusive AI agent into Studio through an API.&lt;/p&gt;

&lt;p&gt;First, that usually means extra costs, keys, limits, and dependency on a specific provider. More importantly, users often already have their own AI tool where they have discussed the task, collected source information, and built up context.&lt;/p&gt;

&lt;p&gt;It is more logical to send the machine-readable ORGF model to that AI: ask it to add branches, restructure roles, extend tags, recalculate values, or create a new version of the structure based on the inputs already discussed.&lt;/p&gt;

&lt;p&gt;The updated file can then be opened in Studio and checked visually. AI does not replace a human decision, but it removes the manual work of transferring content into the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why local-first instead of “just another cloud service”
&lt;/h2&gt;

&lt;p&gt;Studio runs in the browser, but ordinary work with a model remains local: the data is stored in the browser’s local storage.&lt;/p&gt;

&lt;p&gt;This is not a religious war against the cloud. Cloud solutions can be useful for collaboration and more complex scenarios. But for the first version, it was important to me not to force someone to upload a sensitive company model to another server just to quickly build or discuss a structure.&lt;/p&gt;

&lt;p&gt;Open the browser, build a model, save the file, send it to a client or colleague — without mandatory accounts, subscriptions, or “your data will be processed in accordance with...”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxafp2hgw3c8l238pmoik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxafp2hgw3c8l238pmoik.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One model, several ways to read it
&lt;/h2&gt;

&lt;p&gt;I am not trying to build another ARIS, Visio, HRIS, or universal BPM platform.&lt;/p&gt;

&lt;p&gt;ORGF is intentionally limited to strict hierarchies without cross-links. This is not “something missing that needs to be fixed urgently.” It is a deliberate boundary based on the hierarchy of objects and direct responsibility for data.&lt;/p&gt;

&lt;p&gt;When the main task is to quickly agree on a structure of responsibilities, functions, roles, WBS, classifications, or catalogues, a tree is often more useful than a universal graph. It preserves clarity: every block has its place, its parent, and an understandable responsibility branch.&lt;/p&gt;

&lt;p&gt;But the same model does not have to be read only from top to bottom.&lt;/p&gt;

&lt;p&gt;I recently added a horizontal flow view to Studio. The data does not change. It is still the same hierarchy, but it becomes easier to read from left to right: as functional decomposition, a responsibility chain, or a sequence of levels.&lt;/p&gt;

&lt;p&gt;In both views, card details, search, Highlight, dark mode, Drag-and-Drop, and export to SVG or standalone interactive HTML are available.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm22dd1ggykdeivfgwwif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm22dd1ggykdeivfgwwif.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hierarchies are not only org charts
&lt;/h2&gt;

&lt;p&gt;After building the first business model, I quickly realised that the format did not have to stay limited to HR or consulting.&lt;/p&gt;

&lt;p&gt;Hierarchies appear in history, education, project management, catalogues, classifications, and even children’s materials. That is why the demos include &lt;a href="https://www.orgformat.com/learning/cases/dynasty.html" rel="noopener noreferrer"&gt;ruling dynasties&lt;/a&gt;, an &lt;a href="https://www.orgformat.com/learning/cases/animal-atlas-pet-routes.html" rel="noopener noreferrer"&gt;animal atlas&lt;/a&gt;, and other cases.&lt;/p&gt;

&lt;p&gt;In one case, &lt;code&gt;value&lt;/code&gt; can mean budget. In another, person-hours. In a third, years of a dynasty’s rule. Formally, it is the same mechanism: the model aggregates one indicator across a branch, while the user decides what that indicator represents.&lt;/p&gt;

&lt;p&gt;The project took one very intense month. It is not yet an “ideal platform for everyone.” It is a working attempt to make models easier to create, clearer to discuss, and freer to transfer between people and tools.&lt;/p&gt;

&lt;p&gt;I would be especially interested in criticism on three questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where would a format or tool like this be most useful outside organisational structures?&lt;/li&gt;
&lt;li&gt;What would you want to change — or try to break — first?&lt;/li&gt;
&lt;li&gt;Should an open hierarchy format remain narrow and simple, or will it inevitably need to grow towards graphs, processes, and more complex semantics?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>typescript</category>
      <category>startup</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
