{"ref":"topic:building-onedevatlas","page":"/topics/building-onedevatlas","json":"/topics/building-onedevatlas.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"building-onedevatlas","title":"Building onedevatlas","summary":"Building onedevatlas: the idea, the back-and-forth with AI, the wrong turns, and an orb who lost his permanent spot in the atlas.","scope":{"kind":"source","title":"onedevatlas project decisions and development history","url":"https://github.com/mikezaschka/onedevatlas/blob/main/docs/README.md"},"ecosystems":["cap","abap","ui5","btp"],"drafted_with_ai":true},"edition":{"id":"building-onedevatlas-1","topic":"building-onedevatlas","edition":1,"status":"published","date":"2026-10-25","authors":["actor:mike-zaschka"],"intro":"> [!Info]  The rest of the atlas keeps my opinion out of it. This one article is the exception: here I want to be personal and tell you what building this platform was like. What was my motivation? How did I do it? Is this the vision I had in mind when I started? And, as someone who has developed and built software for 20 years, how did it feel to build something like this in the age of AI?\n\nIt is a long article, it's personal, yet I still think it is worth following along and learning with me, or putting your own learning journey next to mine and comparing the two. I really think many of us are  on this journey. Actually, in his Devtoberfest 2026 session [An AI Skeptic’s Conversion: How I Learned to Stop Worrying and Love AI](https://www.youtube.com/watch?v=Rm2OKpJl7jA), [Rich Heilman](actor:rich-heilman), at SAP for 27 years, tells how he went from skeptic to building with AI. A lot of what he describes I went through myself while building the atlas.","show_intro_details":false,"show_section_eyebrows":false,"show_author_interests":false,"show_overview":false,"collect_named":true,"sections":[{"key":"starting","label":"Before there was an atlas","short":"Before there was an atlas","sap":[],"around":["artifact:cds-caching","artifact:mikezaschka-cds-data-federation"],"body":["An honest take: The real reason this atlas exists is that I wanted to go to TechEd. On a long drive home I thought about a topic for a community talk. I had spoken at [reCAP 2026](https://recap-conf.dev/) about my CAP plugins [cds-caching](artifact:cds-caching) and [cds-data-federation](artifact:mikezaschka-cds-data-federation), so presenting those plugins again would have been self-publicity and of limited value. I wanted to share something interesting for everyone instead. So I thought about the bigger picture on a meta level: why did I talk about my plugins at those conferences at all and why did others also do it with theirs?\nThose were the reasons I came up with:","- Because those plugins might solve problems other people have, yet they don't know a solution exists.\n- Because it's hard to be seen outside the official SAP documentation, so you have to be loud at some place.\n- Because that matters more now that people build with AI: the SAP docs and MCP servers and skills only tell the SAP side of the story.","So I extended the idea from mine to all plugins and tried to sketch out what exists: what SAP provides, where it stops, what the community options are. I did not plan to build a platform at that time, only to present the status quo. [My talk](https://www.sap.com/events/teched/berlin/flow/sap/te26/catalog/page/catalog/session/1785706056121001jFgN) was accepted, and that became the starting point for onedevatlas. Little did I know where it would lead me back at the end of August...","> [!ORB skeptical]\n> So a map of the entire ecosystem, built so that two plugins would not look lonely on a slide. Very selfless."]},{"key":"map-to-graph","label":"From a CAP map to an ecosystem graph","short":"From a CAP map to an ecosystem graph","sap":[],"around":[],"body":["Once the talk was accepted, I quickly realised that I didn't need another presentation, but a platform that people and AI agents could both read. Other tools and lists already exist, like [bestofcapjs](https://bestofcapjs.org), which did a great job in the past, but from my perspective they don't work the way I think they need to in the age of AI:","- Just lists: every entry is an item weighted by downloads alone\n- Little context: what is this artifact, and how does it relate to the others?\n- SAP's own work and the community's don't sit side by side, each is its own island\n- Related blog posts and other content next to a project are missing completely\n- AI capabilities like a dedicated MCP server don't exist\n- Information is spread across different places","> [!ORB curious]\n> Look closely: this is exactly the missing semantic metadata layer SAP keeps talking about for [SAP Business Data Cloud](artifact:btp-business-data-cloud). Only for the people who build, not for the data.","So I started sketching. Since I had talked about a map, I wanted one view of CAP where you could see the related things grouped by the concern they address. I drew a first map of everything I could find around domains and capabilities. And I chose a colour coding to signal whether something is SAP or community territory only, or whether both are present. As you can see for the domain of [Data modelling](capability:data-modelling), there are some capabilities, and behind them the artifacts and the content describing them.","But when I looked closely, I actually did not just create a plain map, but a full graph, that connects many things:\n- Artifacts: The tools, plugins, samples that exists\n- Capabilities: The context that group everything\n- People: The ones who build this\n- Content: The stuff that explains things","While the graph grew, I noticed that I had to keep the map around for easier human navigation, But I also wanted to have other views on the graph: A 2D and 3D version, that people could look at and following along the edges to find something interesting.","The following graph is just an example evolving around my work [cds-caching](artifact:cds-caching) and you can actually see how interconnected things really are."],"capability_map":{"ecosystem":"cap","capabilities":["capability:analytical-queries","capability:attachments","capability:caching","capability:concurrency-control","capability:data-import-export","capability:data-modelling","capability:database-connectors","capability:hana-native-artifacts","capability:location-services","capability:query-profiling","capability:replication","capability:schema-evolution","capability:search","capability:soft-delete","capability:temporal-data","capability:transaction-management","capability:value-normalisation"],"after":4,"columns":6},"neighbourhood_3d":{"focus":"artifact:cds-caching"}},{"key":"beyond-cap","label":"Beyond CAP","short":"Beyond CAP","sap":[],"around":[],"body":["It also became clear that I needed to extend the idea beyond CAP to the whole SAP ecosystem. CAP, UI5 and BTP/BAIP are closely related. A CAP plugin like [@cap-js/attachments](artifact:cap-js-attachments) that connects to a cloud service like [Object Store on SAP BTP](artifact:btp-object-store) cannot be described in isolation. While I focused on CAP at first, a lot from other ecosystems is now present as well.","This was also driven by almost daily encounters on LinkedIn, where people promoted what they built: ABAP [MCP servers](capability:mcp-servers) based on ADT, or skills and MCP servers for [SAP architecture diagrams](capability:architecture-diagrams), often without knowing what already existed. They were proud of their work, and rightfully so. But it also became clearer that in the age of AI, relevance matters more. If five solutions do the same thing, yours probably does not stand out. Instead, people should look at what is already there, build on it, and only start from scratch if they have a different idea. At least when they want to share their work and have other people use it.","That makes the atlas a missing piece next to GitHub and the curated lists, because it connects those things. It adds value through summaries, categorisation and links, but the work itself lives elsewhere.","Today the atlas also contains many libraries and tools from the days before AI. As coding agents do more and more of the work, those might lose value over time. But I think the idea of the atlas will stay relevant in the future. When people build things with the help of AI, the content itself may change, but the idea of a connected metadata graph does not.","This view is confirmed by [SAP Developers](https://developers.sap.com), which was rebuilt this year, also as a graph. I took some inspiration from it, yet I also saw the challenges of connecting a huge amount of data so that both AI and humans can traverse it. I already had an exchange about it with [Thomas Jung](actor:jung-thomas), and I am really interested in his opinion on the current state of this platform.","> [!ORB skeptical]\n> One map became a multi-graph universe. Somebody check whether this is still an SAP story or already a Marvel one."]},{"key":"age-of-ai","label":"Building in the age of AI","short":"Building in the age of AI","sap":[],"around":[],"body":["AI is here to change things. Before AI, I would not have built a platform like this. The sheer amount of work would have stopped me before I even started thinking about it. But AI is here, so I have been bold enough to create not just a small tool, but a whole platform as a side project next to my daily job. It worked... but I learned things along the way. Especially things that did not work... and things that stay the same even when you work with AI in software development.","### The role of AI\n\nI built with AI, and it took over many parts while I distributed the work and orchestrated it around the requirements I had. Agents (Claude and Codex) did the coding. I mostly used frontier models like Opus and Sol. For the design, I also mainly used Claude... or at least I tried to. Claude Design was a helping hand in many scenarios, and the workflow from design to code and back kind of worked, but not well around this project without heavy steering from me.","My role? I explored ideas, verified the results, tested, fine-tuned and gave feedback. The overall platform concept was not clear from the beginning, as in many enterprise projects. So instead of sticking to an engineering framework like [OpenSpec](https://github.com/Fission-AI/OpenSpec) or [SpecKit](https://github.com/github/spec-kit), I built around my own workflow.","### Intake\n\nThe graph is built by an agentic pipeline. I evaluated different levels of AI involvement to reduce time and costs. But some things like summaries need an LLM, and things like vector search only work when the data is actually present. For the intake process, I therefore developed specialised agents and skills, plus an admin interface that makes the orchestration accessible to me. Some of the intake steps are plain programs that read data from GitHub, NPM and other sources. Others, such as analysing how things connect, stay LLM-based (Opus, Sonnet).","While agents are heavily involved in the intake process, nothing enters the graph without a person. Drafts land in an inbox, and only I can accept or deny an entry. Honestly, with the amount of data integrated, I did not verify everything as thoroughly as I wanted to. But now that the foundations of the platform exist, I might go over this again and reduce the *AI slopped* descriptions that are still around in many places.","The architecture of the whole platform is deliberately simple. The graph is JSON files in Git, one file per entry, validated against JSON Schema. The site is a [Next.js](https://nextjs.org) application whose pages are prebuilt and served from [Vercel](https://vercel.com), the admin is a separate application that runs locally, and the same data ships as an MCP server. As the platform itself does not ship any AI functionality, the focus is mostly on the intake processes and the platform as a framework.","On 25 October 2026 the working tree held about 129,500 lines of code in 1,160 source files: about 64,600 in the site, 13,200 in the admin, 12,400 in shared packages, 37,600 in scripts for crawling, validation and the nightly run, and 1,500 in the MCP server. The graph held 1,280 artifacts, 161 capabilities, 1,025 pieces of content and 2,496 people and organisations. Along the way I wrote down 111 decisions and 80 concepts.","That's quite a lot of code. But there is more to this platform, and that's where a huge amount of that code went. It has to do with orbs and spaceships, and while it is pretty cool to have built something like this, it is also apparent that I built things that did not really focus on the core ideas of the atlas. But since building them was possible and exciting, I did it with AI. More on this below.","First, let's look at the intake process itself.","At the median, one intake costs about $4.55. Since this is a personal project, my interest in keeping costs low might be understandable. I actually spent a good amount of time finding smarter deterministic processes and while this reduced the costs to around $0.50 to $0.80 per artifact, this only achieved 80% of the requirements. So, for alignment with the graph and the prose texts, I needed to stick with agents.","### The platform and UI/UX\n\nThe platform itself went through many rounds of iteration, exploration and correction, as I needed to find a good way to make the data accessible to people and machines. The same data can be read in different views: the capability map, the 2D and 3D graph, domain and capability pages, articles like this one, search and browse, and for agents the MCP server, `llms.txt` and a JSON file beside every page.","I put a special focus on UI/UX. We are learning to use chat interfaces and to delegate exploration to agents, but I want to motivate the people who come to the platform to explore for themselves, and that requires a good experience. I do think the UI/UX layer is not bad, and it does not look like a typical AI interface. But I am still not happy with how navigation inside the graph works, and I will try to improve it in the future.","With TechEd approaching, and while experimenting with the graph in 3D, I also started playing around with another, more playful experience."],"flow":{"title":"One intake, step by step","as_of":"2026-10-25","runs":196,"after":9,"steps":[{"label":"An agent researches and drafts","kind":"model","seconds":500,"cost_usd":4.21,"does":"Code reads the repository, package and documentation and looks up related entries. One agent session researches the rest and writes the entry as JSON drafts."},{"label":"Check the manifest","kind":"script","seconds":0.3,"does":"Code checks the agent's list of drafts: every file in its scratch space, every entry with sources, nothing beyond the request. It adds the author entries the drafts need."},{"label":"Validate and stage","kind":"script","seconds":4.8,"does":"Every cited page is fetched and kept. The drafts go to staging, the validator checks the whole graph with them, and a refused draft takes the batch back out."},{"label":"A second reader checks","kind":"model","seconds":120,"cost_usd":0.34,"does":"Code first checks that every quote occurs in its page and every reference resolves. Then a second agent reads the draft against the sources and gives a verdict."},{"label":"Look up people and affected evidence","kind":"script","seconds":1.4,"does":"Code finds people the drafts name that the atlas does not hold yet, and records which connected entries the change touches. No model call."},{"label":"Waiting in the inbox","kind":"person","does":"The drafts wait with the second reader's verdict. I accept, decline or ask for another round."},{"label":"Accepted","kind":"script","does":"One transaction: the drafts are written to the graph, the validator runs again and the decision is recorded. Any refusal restores everything."}]}},{"key":"what-lasted","label":"What I built and what lasted","short":"Losing focus... by building a game","sap":[],"around":[],"body":["I built a space sim: set in the SAP universe, around the graph, with customisable ships, orbs, missions, planets, games and multiplayer. I used [Blender](https://www.blender.org) to create 3D models that combine into different ships, and I played around with music and sound effects. I thought up missions, with people flying around and finding secrets... until I realised that I had gone completely off the rails.","I probably did it because I was fascinated by what is possible with AI. But after a while, I realised there was no need for any of it. I learned a lot on the technical side, but this is the most valuable lesson:","> I built this platform so that other people do not build unnecessary things. Yet I did exactly that myself, to a large extent. Iteration cycles with AI are short, but they still add up. Flying around in space is a lot of fun, but it took much of my time, time I did not really have. So that is the big lesson: stay focused.","### Things I threw away\n\nAlong the way, I explored many other ideas, and not all of them stayed. There were community voices, where people could say something about their own work, and a place for personal side projects. There was a verdict for every entry, sorted into five rings, which I retired in September: a project can be dead as a dependency and still be worth reading, and one word cannot say both. And there were ideas for things to build, a feed of what was recently shared, and the orb as a companion in the corner of every page. You might have wondered why he keeps turning up in this article: it is the only place outside the Playground where he is still allowed to appear.","> [!ORB offended]\n> \"Allowed to appear.\" I prefer \"retained for editorial purposes\".","One idea I have not let go of is integration into SAP architectures: placing what the atlas knows into SAP's own reference architecture diagrams. It is out of the platform for now, but I will still follow it and it might came back.","### Things that lasted\n\nWhat lasted from the game side is [the Playground](https://onedevatlas.dev/playground). It is another way to look at the atlas: you make an orb as your representative, design a ship and set off on a small space flight through the graph. You look at what it holds, find other readers' published orbs and play rock, paper, scissors against them. During TechEd, from 26 October to 1 November 2026, readers fly together and play for the event boards, and the final standings stay in the Orb Hall of Fame. Solo exploration stays open. It is experimental, and it stays apart from the platform itself."],"ship":{}},{"key":"verdict","label":"The verdict","short":"The verdict","sap":[],"around":[],"body":["I did not plan to build onedevatlas at first. It evolved over time into something I am very proud of. It taught me many valuable lessons, and it also challenged me in different ways. I really hope that people find it useful, that word gets out in the SAP community, and that people who build things see it as a chance to get seen. That was the idea on the long drive home, and it still is. And I hope that people look here first to see what exists, so they do not build something that is already there. That goes in both directions: for community members and for SAP itself.","### On using AI\n\nI have been using AI since ChatGPT came out, but never as completely as in this project. It is a game changer, because it can build things I would not have been able to build, both for the amount of work and for the technologies involved. At the same time, it feels like a wonder, and sometimes like a burden.","Building a platform like this in a very short time, I could not write all the specs first. Still, the first shots were often great. But if you want to make something yours, the last 20 percent are still the hard part. That has not changed in software development. In fact, it feels harder now: you get many things for free, but the hard parts stay hard.","A single-shot prompt may produce something that works, but it is not yours and not precisely what you want, unless you want a 1:1 copy of something that already exists. And that is the other issue: what AI produces depends heavily on your skill to verify it, and on your will to iterate again and again until the result is valuable to you.","Design was also much harder than expected, because it fell back to AI-slop UIs all the time. And consistency is really inconsistent in many places: it needs constant adjustment, and always explicit instructions and context.","AI opens new possibilities, but you also have to stay grounded and precise about what you want. I got sidetracked more than once, and AI does nothing to stop you.","One final thought: my approach worked in this isolated environment, but I do not think it translates 1:1 to business software. You cannot run riot in [S/4HANA](external:sap-s4hana) systems or around complex business processes. And I think it is almost impossible to get your project sponsors to agree to building a space sim on the side...","> [!ORB delighted]\n> Speaking of which: have you tried [the Playground](https://onedevatlas.dev/playground) yet? You definitely should."]}],"source_note":"Working personal essay drafted with AI for Mike’s review; the orb is a fictional comic narrator, and his lines are authored jokes rather than quotations from real sessions. The article-navigation back-and-forth and the older build on port 3000 versus development on port 3001 are drawn from the actual editing conversation. Other unrecorded experiences remain bracketed prompts; first-person framing remains provisional. Bracketed prompts request experiences, feelings and outcomes that cannot be established from the repository. Factual history draws on docs/VISION.md, docs/DATA-STORE.md, docs/concepts/pipeline-intake-and-evals.md and ADRs 0069, 0073, 0075, 0076, 0079, 0080 and 0081. Repository snapshot measured 16 October 2026: 125,412 physical lines in 1,083 Git-tracked or nonignored untracked source files under apps/, packages/, scripts/ and mcp/, including blank lines, comments, tests and configuration. Extensions counted: .ts, .tsx, .js, .jsx, .mjs, .cjs, .css, .py, .sh and .sql. Excluded public assets, dependencies, build directories, declaration files, *.generated.* and generated graph-types.ts. Counts describe the current working tree, including uncommitted work. Data totals count JSON files in their respective record directories; actor records are not registered users. The 81 decision files are numbered Markdown files under docs/decisions. The 66-turn intake example is one recorded call, not a benchmark average. Measurement script and snapshot are retained in work/building-onedevatlas/measure.py and metrics.json. Orb appearance and emotes are authored per aside; the visual treatment is illustrative and does not report the interactive companion’s state. Expanded reflective passages remain proposed first-person framing for Mike’s review.","drafted_with_ai":true,"slides":[{"key":"title","layout":"title","subtitle":"The idea, the work with AI, the wrong turns, and an orb who lost his permanent spot"},{"key":"agenda","layout":"agenda","title":"Agenda"},{"key":"s-starting","layout":"section","section":"starting","title":"Before there was an atlas"},{"key":"why-atlas","layout":"points","section":"starting","title":"Why this atlas exists","points":["I wanted to go to TechEd, and needed a talk that was not about my own plugins","Community plugins solve real problems, but people do not know they exist","Outside SAP's documentation it is hard to be seen","With AI it matters more: SAP's docs, MCP servers and skills tell only SAP's side","So: a map of what SAP provides, where it stops, and what the community adds"]},{"key":"s-map-to-graph","layout":"section","section":"map-to-graph","title":"From a CAP map to an ecosystem graph"},{"key":"what-lists-miss","layout":"points","section":"map-to-graph","title":"What existing lists do not do","points":["They are lists, weighted by downloads alone","Little context: what is this, and how does it relate to the rest?","SAP's work and the community's sit on separate islands","The posts and talks that explain a project are missing","No access for AI agents, and the information is spread across many places"]},{"key":"map","layout":"block","section":"map-to-graph","title":"One domain of the CAP map","block":{"section":"map-to-graph","kind":"capability_map"}},{"key":"map-to-graph-nodes","layout":"points","section":"map-to-graph","title":"The map became a graph","points":["Artifacts: the tools, plugins and samples that exist","Capabilities: the context that groups them","People: the ones who build them","Content: the posts and talks that explain them","The map stays for people; the 2D and 3D graph show the edges"]},{"key":"s-beyond-cap","layout":"section","section":"beyond-cap","title":"Beyond CAP"},{"key":"why-beyond","layout":"points","section":"beyond-cap","title":"Why it grew beyond CAP","points":["CAP, UI5 and BTP belong together: a plugin and the service it uses cannot be described apart","Almost daily, new ABAP MCP servers and diagram skills, often unaware of what existed","In the age of AI, relevance matters more: build on what is there","SAP Developers was rebuilt as a graph too: inspiring, and the same challenges"]},{"key":"connects","layout":"statement","section":"beyond-cap","text":"The atlas connects things. The work itself lives elsewhere."},{"key":"s-age-of-ai","layout":"section","section":"age-of-ai","title":"Building in the age of AI"},{"key":"roles","layout":"points","section":"age-of-ai","title":"Who did what","points":["Agents (Claude and Codex) did the coding, mostly on frontier models","Claude also designed, or at least tried to","I explored ideas, verified, tested, fine-tuned and gave feedback","No spec framework: the concept was not clear from the start, so I built around my own workflow"]},{"key":"intake","layout":"block","section":"age-of-ai","title":"One intake, step by step","block":{"section":"age-of-ai","kind":"flow"}},{"key":"intake-cost","layout":"points","section":"age-of-ai","title":"What an intake costs","points":["About $4.55 at the median: $4.21 for drafting, $0.34 for the second reader","Cheaper deterministic versions cost $0.50 to $0.80, but fell short against published entries","So for this kind of work, agents stayed","Nothing enters the graph without a person"]},{"key":"size","layout":"points","section":"age-of-ai","title":"The size of it, on 25 October 2026","points":["About 129,500 lines of code in 1,160 source files","1,280 artifacts, 161 capabilities, 1,025 pieces of content","2,496 people and organisations","111 decisions and 80 concepts written down"]},{"key":"s-what-lasted","layout":"section","section":"what-lasted","title":"Losing focus... by building a game"},{"key":"lesson","layout":"statement","section":"what-lasted","text":"I built this platform so that other people do not build unnecessary things. Yet I did exactly that myself."},{"key":"thrown-kept","layout":"points","section":"what-lasted","title":"What I threw away, and what lasted","points":["Thrown away: community voices, side projects, a verdict in five rings, ideas, a recently shared feed, the orb in every corner","Kept in mind: fitting the atlas into SAP's architecture diagrams","Lasted: the Playground, a flight through the graph with orbs, ships and TechEd boards"]},{"key":"s-verdict","layout":"section","section":"verdict","title":"The verdict"},{"key":"on-ai","layout":"points","section":"verdict","title":"On using AI","points":["A game changer: it built what I could not have built alone","The first shot is often great; the last 20 percent are still the hard part","The result depends on your skill to verify and your will to iterate","Design keeps falling back to AI slop; consistency needs constant instructions","It does not translate 1:1 to business software"]},{"key":"grounded","layout":"statement","section":"verdict","text":"AI opens new possibilities, but you also have to stay grounded and precise about what you want."},{"key":"end","layout":"end","title":"Thank you","subtitle":"Have you tried the Playground yet?"}],"explains":["artifact:cds-caching","artifact:mikezaschka-cds-data-federation"],"terms":[]},"editions":[{"ref":"edition:building-onedevatlas-1","edition":1,"status":"published","date":"2026-10-25","page":"/topics/building-onedevatlas/1","explains":["artifact:cds-caching","artifact:mikezaschka-cds-data-federation"],"sections":[{"key":"starting","short":"Before there was an atlas","sap":[],"around":["artifact:cds-caching","artifact:mikezaschka-cds-data-federation"]},{"key":"map-to-graph","short":"From a CAP map to an ecosystem graph","sap":[],"around":[]},{"key":"beyond-cap","short":"Beyond CAP","sap":[],"around":[]},{"key":"age-of-ai","short":"Building in the age of AI","sap":[],"around":[]},{"key":"what-lasted","short":"Losing focus... by building a game","sap":[],"around":[]},{"key":"verdict","short":"The verdict","sap":[],"around":[]}]}],"edges":{"explains":[{"ref":"artifact:cds-caching","name":"cds-caching","json":"/artifacts/cds-caching.json"},{"ref":"artifact:mikezaschka-cds-data-federation","name":"cds-data-federation","json":"/artifacts/mikezaschka-cds-data-federation.json"}]}}